SVM正在研究训练集,但不在R中的测试集上

时间:2014-11-23 14:32:39

标签: r svm

我使用SVM进行分类,我将数据集分为两个CSV文件,一个是训练集(70%的数据),另一个是测试集(30%的数据)。 当我在trainig上使用预测时,我得到答案,但在测试设置上显示错误  我正在使用e1071包

程序如下

Train <- read.csv("Train.csv")
Test <- read.csv("Test.csv")

x_Train <- subset(Train,select=-Class)
y_Train <- Train$Class

model <- svm(Class ~., data=Train)


pred=predict(model, x_Train) #working well
table(pred,y_Train)  


 x_Test <- subset(Test,select=-Class)
 y_Test <- Test$Class

pred <- predict(model, x_Test) #getting_error

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'

请问你能解决问题吗??

4 个答案:

答案 0 :(得分:1)

这是因为输出具有比例变量,而这些比例变量与“newdata”变量不匹配。

假设您为5个变量训练了SVM模型,称为PC2:PC6

svm_model$x.scale
$`scaled:center`
          PC2           PC3           PC4           PC5           PC6           
 5.445380e-16  2.507442e-16 -7.655441e-16 -5.730488e-16 -3.283584e-16 

$`scaled:scale`
      PC2       PC3       PC4       PC5       PC6       
17.774403 13.571134  7.911114  6.541206  3.608903  

如果变量的长度> 5,则在新数据中,您将收到此错误。在您的情况下,x_Test <- subset(Test,select=-Class)最有可能更改要扩展的变量数。

答案 1 :(得分:0)

删除测试数据中缺少的数据,或在预测模型中添加na.action = na.omit。或者您可以使用na.action = na.exclude

model <- svm(Class ~., data=Train, na.action = na.exclude)

答案 2 :(得分:0)

如果列车集中的预测变量类与测试集中该变量的类不同,那么您将遇到此问题。

例如,如果您使用预测变量x和[{1}}并且在测试集class(x) = numeric中训练了一个模型,那么您应该将class(x) = character转换为x在预测之前:

numeric

话虽如此,它可以是任何不严格data$x <- as.numeric(data$x)character的课程,也可以是numeric变量。

答案 3 :(得分:0)

好的,对于那些有这个错误的人,但这些解决方案都没有像我一样工作:我所做的是略微增加测试数据的大小,它就像一个魅力。第一次出现错误时,我将2套80-20分开,尝试75-25并且工作得很好。我无法确定原因,但确实有效。