我希望得到一些关于我为什么得到的指示:
Warning message: In method$predict(modelFit = modelFit, newdata =
newdata, submodels = param) : kernlab class prediction calculations
failed; returning NAs
当我打印预测时:
svmRadial_Predict
[1] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>....
我写的代码用于执行SVM拟合:
#10-fold cross validation in 3 repetitions
control = trainControl(seeds = s, method="repeatedcv", number=10,
repeats=3, savePredictions = TRUE, classProbs = TRUE)
拟合的SVM模型如下:
svmRadial_model = train(y=modelTrain$Emotion,
x=modelTrain[c(2:4)],
method ='svmRadial',
trControl = control,
data=modelTrain,
tuneLength = 3
)
我编写的用于执行预测的代码如下所示:
svmRadial_Predict <- predict(svmRadial_model,
newdata = modelTest[c(2:4)], probability = TRUE )
我检查了数据,训练或测试集中没有NA值 . y值是一个因子,如果产生差异,x值是数值?任何调试这个的提示都将非常感谢!
模型训练我可以看到这样的警告:
line search fails -1.407938 -0.1710936 2.039448e-05
我假设的只是模型无法适应数据中特定观察的超平面 . 我正在使用svmRadial内核我正在尝试拟合的数据已经使用R scale()函数进行居中和缩放 .
进一步的工作让我相信它与classProbs = TRUE标志有关 . 如果我将其遗漏,则不会打印任何警告 . 我已经启动了另一段代码,SVM似乎需要花费很长时间才能在我的笔记本电脑上完成此任务,但我会在完成后立即报告结果 .
作为最后的编辑,模型拟合完成没有错误,我可以使用该模型很好地预测/计算混淆矩阵等 . 我不明白为什么包括classProbs = TRUE打破它,但也许它与组合有关交叉验证,我在trainControl中请求的交叉验证
1 回答
我的解决办法就是省略trainControl函数的classProbs = TRUE参数 . 一旦我这样做,一切都有效 . 我猜它与引擎盖下的交叉验证有什么关系,但我不确定 .