繁体   English   中英

e1071 SVM:尝试预测时出错

[英]e1071 SVM: Error trying to predict

我一直收到此错误,我不知道为什么。

scale.default(newdata [,object $ scaled,drop = FALSE],center = object $ x.scale $“ scaled:center”,:“ center”的长度必须等于'x'的列数

我正在使用默认的虹膜数据集,这是我的所有代码。 这是尝试使用成对方法实现多类SVM的尝试。

# pass in the dataframe & the number of classes
multiclass.svm <- function(data) {
  class.vec = data[,length(data)]
  levels = levels(class.vec)
  pair1 <- data[which(class.vec == levels[1]),]
  pair1 <- droplevels(pair1)
  pair2 <- data[which(class.vec == levels[length(levels)]),]
  pair2 <- droplevels(pair2)
  pairs = list(rbind(pair1, pair2))
#  print(pairs)
  for(i in 2:length(levels)){
    L1 <- data[which(class.vec == levels[i-1]),]
    L1 <- droplevels(L1)
    L2 <- data[which(class.vec == levels[i]),]
    L2 <- droplevels(L2)
    pair <- list(rbind(L1, L2))
    pairs <- c(pairs, pair)
  }
  # now we construct our (n choose 2) binary models
  models = list()
  for(pair in pairs){
    classifier = pair[,length(pair)]
    p.svm = svm(formula=classifier~., data=pair)
    models = c(models, list(p.svm))
  }
  for(model in models){
    test = iris[1,]
    print(predict(model, test))
  }
  return(models)
}

测试/用途:

> h = multiclass.svm(iris)
 Show Traceback

 Rerun with Debug
 Error in scale.default(newdata[, object$scaled, drop = FALSE], center = object$x.scale$"scaled:center",  : 
  length of 'center' must equal the number of columns of 'x' 
> 

任何帮助将不胜感激...我发现了关于此主题的其他一些问题,无济于事。 谢谢。

好的,因此,不幸的是,答案是非常棘手的(取决于您的数据集。)问题在于,虹膜数据集中存在三级分类。 由于我将类分为两对,因此我的每个模型都只有两个分类级别。

在使用预测模型时,您要训练的模型以及要测试的值都必须具有相同的水平。 因此,棘手的部分(至少在这种情况下)是从每对中删除不必要的级别。

我建议将库plyr用于其重估功能。 要删除特定级别(代替所有未使用的“删除级别”功能),可以使用重估并将每个不需要的级别重命名为现有级别(实质上是将其销毁)。

归功于这位波兰博客作者,他为我指引了正确的方向: http : //ppiotrow.blogspot.com/2013/04/solved-r-svm-test-data-does-not-match.html

但是,解决我的特定问题的快速简便的方法只是删除所有的droplevel调用haha。 由于SVM在未使用的级别上找不到任何要点,因此保留无关级别并没有实际问题。

希望这可以帮助某人。 麦克风

我也遇到过同样的问题。 我通过将测试集中的所有预测变量转换为它们的正确类(即as.factoras.numeric

例如,如果训练集中的numeric预测变量作为测试集中的character变量存储在内存中,则会出现此错误。 我希望这有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM