我使用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'
请问你能解决问题吗??
答案 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并且工作得很好。我无法确定原因,但确实有效。