【问题标题】:e1071 SVM: Error trying to predicte1071 SVM:尝试预测时出错
【发布时间】:2016-07-26 06:24:53
【问题描述】:

我不断收到这个错误,我不知道为什么。

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

我正在使用默认的 iris 数据集,这是我的所有代码。这是使用成对方法实现多类 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' 
> 

非常感谢任何帮助...我发现有关此主题的其他一些问题无济于事。谢谢。

【问题讨论】:

  • 查看this链接,它可能会提供一些见解。

标签: r svm


【解决方案1】:

好的,不幸的是,答案相当棘手(取决于您的数据集)。问题是在 iris 数据集中,有三个级别的分类。由于我将类分成对,我的每个模型只有两个分类级别。

当使用预测你训练过的模型和你正在测试的值必须具有相同的水平。所以,棘手的部分(至少在这种情况下)是删除不必要的每一对的等级。

我建议使用库 plyr 来实现其重估功能。要删除特定关卡(而不是所有未使用的下拉关卡功能),您可以使用 revalue 并将每个不需要的关卡重命名为现有关卡(实质上是破坏它。)

感谢这位波兰博主引导我朝着正确的方向前进: http://ppiotrow.blogspot.com/2013/04/solved-r-svm-test-data-does-not-match.html

不过,解决我的具体问题的快速简便的方法是简单地删除所有 droplevels 调用哈哈。由于 SVM 不会找到任何点来利用未使用的级别,因此将无关级别留在里面没有实际问题。

希望这对那里的人有所帮助。 迈克

【讨论】:

    【解决方案2】:

    我也遇到过同样的问题。我通过将测试集中的所有预测变量转换为正确的类来修复错误,即as.factoras.numeric

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-16
      • 2016-01-22
      • 2018-02-10
      • 2016-09-24
      • 2019-07-10
      • 2017-04-13
      • 1970-01-01
      • 2013-09-11
      相关资源
      最近更新 更多