首页 文章

e1071 SVM:尝试预测时出错

提问于
浏览
0

我一直收到这个错误,我无法弄清楚原因 .

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' 
>

任何帮助都将非常感谢...我在这个主题上找到了一些其他问题但无济于事 . 谢谢 .

2 回答

  • 0

    好吧,不幸的是答案非常棘手(取决于你的数据集 . )问题是在虹膜数据集中,有三个级别的分类 . 由于我将这些类分成两组,因此我的每个模型只有两个级别的分类 .

    当使用预测模型时've trained on AND the value you'重新测试 must both have the same levels. 因此,棘手的部分(至少在这种情况下)是从每对中删除不必要的级别 .

    我建议使用库plyr来实现其重估值功能 . 要删除特定级别(而不是所有未使用的级别功能),您可以使用重估值并将每个不需要的级别重命名为现有级别(基本上将其销毁) .

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

    但是,解决我的具体问题的快捷方法就是删除所有的droplevels调用哈哈 . 由于SVM不会在未使用的级别上找到任何点,因此在保留无关级别时没有实际问题 .

    希望这有助于那里的人 . 麦克风

  • 0

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

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

相关问题