我在 java 中使用 LIBSVM,我需要计算 AUC 值。自述文件说我们可以使用
-v
选项将数据分成 n 部分并计算它们的交叉验证准确性/均方误差,但在 java 中我使用的 svm_train 函数没有 -v
选项(它有 SVM 问题和 SVM 参数作为输入)。所以我正在使用 svm_cross_validation
函数,但它不会返回目标数组中的准确性(返回标签)。
svm.svm_cross_validation(SVM_Prob, SVM_Param, 3, target);
我得到如下所示的结果,但不显示任何准确性
optimization finished, #iter = 21
nu = 0.06666666666666667
obj = -21.0, rho = 0.0
nSV = 42, nBSV = 0
Total nSV = 42
我的数据不是不平衡的,所以我不确定我是否应该使用 LibLINEAR。 如何在 java 中找到 libsvm 的交叉验证准确性?
可以自己写一个简单的:
double[] target = new double[labels.length];
svm.svm_cross_validation(problem, param, 3, target);
double correctCounter = 0;
for (int i = 0; i < target.length; i++) {
if (target[i] == labels[i]) {
correctCounter++;
}
}