首页 文章

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

提问于
浏览
0

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

我有一个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

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

    • 使用来自test和train的attribute1中的唯一值创建一个levels属性 .

    • 在train和test1上创建一个因子,其中包含在第1点中找到的所有级别 .

    levels <- unique(c(train$Attr1, test$Attr1))
    test$Attr1  <- factor(test$Attr1, levels=levels)
    train$Attr1 <- factor(train$Attr1, levels=levels)
    

    如果您不想要事实,请将 as.integer 添加到部分代码中,您将获得数字因素 . 在xgboost这样的模型中,这有时更方便,并且可以节省一个热编码 .

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

相关问题