如何在R中使用LibSVM执行10次交叉验证?

Sig*_*ard 6 r machine-learning svm libsvm cross-validation

我知道在MatLab中这很容易('-v 10').

但我需要在R中做到这一点.我确实发现了一个关于添加cross = 10参数的评论会做到这一点.但是这在帮助文件中没有得到证实,所以我对它持怀疑态度.

svm(Outcome ~. , data= source, cost = 100, gamma =1, cross=10)
Run Code Online (Sandbox Code Playgroud)

任何成功的R的SVM脚本的例子也会受到赞赏,因为我仍然遇到了一些死胡同?

编辑:我忘了提到我使用libsvm包的标签之外.

hlf*_*dez 6

我也试图进行10倍交叉验证.我认为使用tune不是执行它的正确方法,因为此函数用于优化参数,但不用于训练和测试模型.

我有以下代码来执行Leave-One-Out交叉验证.假设数据集是存储数据的data.frame.在每个LOO步骤中,添加观察到的预测矩阵,以便最后,结果包含全局观察矩阵和预测矩阵.

#LOOValidation
for (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)
Run Code Online (Sandbox Code Playgroud)

因此,为了执行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));

}
# compute mean accuracies and kappas ussing results, which store the result of each fold
Run Code Online (Sandbox Code Playgroud)

我希望这对你有帮助.