SVM预测级别与测试和训练数据之间不匹配

时间:2018-03-18 00:38:06

标签: r svm

我正在尝试预测处理推荐电影的二元分类问题。

我有50行(电影)和6列的训练数据集(5部电影属性以及对电影的共识)。

然后,我有一个包含相同列的20部电影的测试数据集。

然后我跑

pred<-predict(svm_model, test)

并收到

predict.svm(svm_model,test)出错:测试数据与模型不匹配!

在类似帖子中,似乎错误是因为训练和测试数据集之间的级别不匹配。这是事实,我通过比较str(test)str(train)证明了这一点。但是,这两个数据集都来自随机选择的电影,并且对于其分类属性将始终具有不同的级别。做

levels(test$Attr1) <- levels(train$Attr1)

更改测试中的实际列数据,从而使预测变量不正确。有谁知道如何解决这个问题?

我的训练集的前半部分行在以下链接中。 https://justpaste.it/1ifsx

1 个答案:

答案 0 :(得分:0)

你可以这样做,假设Attr1是一个角色:

  1. 使用来自test和train的attribute1中的唯一值创建一个levels属性。
  2. 在火车和测试属性1上创建一个因子,其中包含在第1点中找到的所有级别。

    levels <- unique(c(train$Attr1, test$Attr1))
    test$Attr1  <- factor(test$Attr1, levels=levels)
    train$Attr1 <- factor(train$Attr1, levels=levels)
    
  3. 如果您不想要事实,请将as.integer添加到部分代码中,您将获得数字因素。这在xgboost这样的模型中有时比较容易,并且可以保存在一个热门编码上。

    as.integer(factor(test$Attr1, levels=levels))