我知道在MatLab中这很简单(使用’-v 10’)。
但我需要在R中实现。我确实发现有人提到添加cross = 10
作为参数可以实现,但这在帮助文件中并未确认,所以我对此持怀疑态度。
svm(Outcome ~. , data= source, cost = 100, gamma =1, cross=10)
如果有成功的R语言SVM脚本示例,我也会非常感激,因为我仍然遇到了一些障碍?
编辑:我忘了提到我在标签外使用的是libsvm包。
回答:
我也在尝试进行10折交叉验证。我认为使用tune函数并不是进行交叉验证的正确方法,因为这个函数是用来优化参数的,而不是用来训练和测试模型的。
我有以下代码来执行留一法交叉验证。假设dataset是一个存储数据的数据框。在每次LOO步骤中,观察值与预测值的矩阵会被添加,因此在最后,result包含全局的观察值与预测值矩阵。
#LOOValidationfor (i in 1:length(dataset)){ fit = svm(classes ~ ., data=dataset[-i,], type='C-classification', kernel='linear') pred = predict(fit, dataset[i,]) result <- result + table(true=dataset[i,]$classes, pred=pred);}classAgreement(result)
所以,为了进行10折交叉验证,我猜我们应该手动划分数据集,并使用这些折叠来训练和测试模型。
for (i in 1:10) train <- getFoldTrainSet(dataset, i) test <- getFoldTestSet(dataset,i) fit = svm(classes ~ ., train, type='C-classification', kernel='linear') pred = predict(fit, test) results <- c(results,table(true=test$classes, pred=pred));}# 使用results计算平均准确率和kappa值,results存储了每个折叠的结果
希望这对你有帮助。