predict.svm 中的错误:测试数据与模型不匹配

Posted

技术标签:

【中文标题】predict.svm 中的错误:测试数据与模型不匹配【英文标题】:Error in predict.svm: test data does not match model 【发布时间】:2014-12-03 14:37:43 【问题描述】:

我有一个大约 500 行和 170 列的数据框。我正在尝试使用 e1071 包中的 svm 运行分类模型。分类变量称为“SEGMENT”,是一个具有 6 个级别的因子变量。数据框中还有其他三个因子变量,其余都是数值型。

data <- my.data.frame
# Split into training and testing sets, training.data and testing.data
.
.
.
fit <- svm(SEGMENT ~ ., data = training.data, cost = 1, kernel = 'linear', 
+ probability = T, type = 'C-classification')

模型运行良好。

Parameters:
SVM-Type:  C-classification 
SVM-Kernel:  linear 
   cost:  1 
   gamma:  0.0016 

Number of Support Vectors:  77

( 43 2 19 2 2 9 )

Number of Classes:  6 

Levels: 
EE JJ LL RR SS WW

当我尝试在 data.testing 上测试模型时出现问题,该模型的结构完全类似于训练集:

x <- predict(fit, testing.data, decision.values = T, probability = T)

然后事情变得相当壮观:

Error in predict.svm(fit, newdata = testing, decision.values = T, probability = T) : 
test data does not match model !

欢迎提出想法。

【问题讨论】:

str(testing.data) 发布输出。我的猜测是因素水平会有所不同。我还猜测,如果您在 SO htat 中搜索该错误文本,您会发现之前已经多次询问和回答了这个问题。 请花时间发布reproducible example,以便更轻松地为您提供帮助。否则,我们只是在猜测,可能出了什么问题。 【参考方案1】:

当测试数据和训练数据中的列不同时,就会发生这种情况。 尝试 str(training.data) & str(testing.data) 除了需要预测的变量之外,它们应该具有相同的变量。 在 svm 训练模型中仅包含您希望用于预测的那些因素。

例如:

fit <- svm(SEGMENT ~ ., data = training.data[,1:6], cost = 1, kernel = 'linear', 
+ probability = T, type = 'C-classification')     


x <- predict(fit, testing.data[,1:5], decision.values = T, probability = T)

【讨论】:

以上是关于predict.svm 中的错误:测试数据与模型不匹配的主要内容,如果未能解决你的问题,请参考以下文章

weka中的训练和测试集不兼容错误?

错误修复程序和测试集如何不兼容?

第二章 模型评估与选择

我应该平衡测试集以评估模型吗? [关闭]

libsvm matlab 中的 2 个错误“模型不支持概率估计和下标分配维度不匹配”

在测试模型时,k 交叉验证中的 x 和 y 具有不同的行数