SVM 预测水平在测试和训练数据之间不匹配
SVM Predict Levels not matching between test and training data
我正在尝试预测处理推荐电影的二元分类问题。
我有一个 50 行(电影)和 6 列(5 个电影属性和对电影的共识)的训练数据集。
然后我有一个包含 20 部具有相同列的电影的测试数据集。
我然后运行
pred<-predict(svm_model, test)
并接收
predict.svm(svm_model, test) 错误:测试数据与模型不匹配!。
从类似的帖子来看,错误似乎是因为训练数据集和测试数据集之间的级别不匹配。这是真的,我已经通过比较 str(test)
和 str(train)
证明了这一点。然而,这两个数据集都来自随机选择的电影,并且它们的分类属性总是具有不同的级别。正在做
levels(test$Attr1) <- levels(train$Attr1)
更改测试中的实际列数据,从而使预测器不正确。有谁知道如何解决这个问题?
我训练集的前六行在下面link。
https://justpaste.it/1ifsx
你可以这样做,假设 Attr1 是一个字符:
- 使用来自测试和训练的 attribute1 的唯一值创建一个级别属性。
使用点 1 中找到的所有级别在训练和测试属性 1 上创建一个因子。
levels <- unique(c(train$Attr1, test$Attr1))
test$Attr1 <- factor(test$Attr1, levels=levels)
train$Attr1 <- factor(train$Attr1, levels=levels)
如果您不想要 factos,请将 as.integer
添加到部分代码,您将获得由 factors 代替的数字。这有时在像 xgboost 这样的模型中更方便,并且可以节省一次热编码。
as.integer(factor(test$Attr1, levels=levels))
我正在尝试预测处理推荐电影的二元分类问题。
我有一个 50 行(电影)和 6 列(5 个电影属性和对电影的共识)的训练数据集。
然后我有一个包含 20 部具有相同列的电影的测试数据集。
我然后运行
pred<-predict(svm_model, test)
并接收
predict.svm(svm_model, test) 错误:测试数据与模型不匹配!。
从类似的帖子来看,错误似乎是因为训练数据集和测试数据集之间的级别不匹配。这是真的,我已经通过比较 str(test)
和 str(train)
证明了这一点。然而,这两个数据集都来自随机选择的电影,并且它们的分类属性总是具有不同的级别。正在做
levels(test$Attr1) <- levels(train$Attr1)
更改测试中的实际列数据,从而使预测器不正确。有谁知道如何解决这个问题?
我训练集的前六行在下面link。 https://justpaste.it/1ifsx
你可以这样做,假设 Attr1 是一个字符:
- 使用来自测试和训练的 attribute1 的唯一值创建一个级别属性。
使用点 1 中找到的所有级别在训练和测试属性 1 上创建一个因子。
levels <- unique(c(train$Attr1, test$Attr1)) test$Attr1 <- factor(test$Attr1, levels=levels) train$Attr1 <- factor(train$Attr1, levels=levels)
如果您不想要 factos,请将 as.integer
添加到部分代码,您将获得由 factors 代替的数字。这有时在像 xgboost 这样的模型中更方便,并且可以节省一次热编码。
as.integer(factor(test$Attr1, levels=levels))