在 LIBSVM 中的 SVM 中进行交叉验证时停止打印准确性 [关闭]

Posted

技术标签:

【中文标题】在 LIBSVM 中的 SVM 中进行交叉验证时停止打印准确性 [关闭]【英文标题】:Stop priniting the Accurancy while cross validation in SVM in LIBSVM [closed] 【发布时间】:2014-07-25 01:17:27 【问题描述】:

我在 LIBSVM 的 svmtrain 中使用交叉验证。如何让它停止在控制台中打印“交叉验证准确性”? 谢谢

【问题讨论】:

这个问题似乎离题了,因为它与编程无关。也许Super User 会是一个更好的提问地点。 @jww 这是关于编程的。他必须更改源代码才能做到这一点 @Pedrom - 你应该提名重新开放。 【参考方案1】:

您必须为此更改代码,因为没有选项可以在静默模式下进行交叉验证。

您没有指定如何使用 libsvm,因此假设您使用 C,这是您必须更改的函数:

void do_cross_validation()

    int i;
    int total_correct = 0;
    double total_error = 0;
    double sumv = 0, sumy = 0, sumvv = 0, sumyy = 0, sumvy = 0;
    double *target = Malloc(double,prob.l);

    svm_cross_validation(&prob,&param,nr_fold,target);
    if(param.svm_type == EPSILON_SVR ||
       param.svm_type == NU_SVR)
    
        for(i=0;i<prob.l;i++)
        
            double y = prob.y[i];
            double v = target[i];
            total_error += (v-y)*(v-y);
            sumv += v;
            sumy += y;
            sumvv += v*v;
            sumyy += y*y;
            sumvy += v*y;
        
        printf("Cross Validation Mean squared error = %g\n",total_error/prob.l);
        printf("Cross Validation Squared correlation coefficient = %g\n",
            ((prob.l*sumvy-sumv*sumy)*(prob.l*sumvy-sumv*sumy))/
            ((prob.l*sumvv-sumv*sumv)*(prob.l*sumyy-sumy*sumy))
            );
    
    else
    
        for(i=0;i<prob.l;i++)
            if(target[i] == prob.y[i])
                ++total_correct;
        printf("Cross Validation Accuracy = %g%%\n",100.0*total_correct/prob.l);
    
    free(target);

编辑:您刚刚告诉我您正在使用 matlab,您需要从 svmtrain.c:100 中删除 mexPrintf 语句并在 Matlab 中重新编译接口。

【讨论】:

我在 matlab 中使用这条线 cv_acc(i) = svmtrain(labels, data,sprintf('-t 2 -c %f -g %f -v %d ', 2^ C(i), 2^gamma(i), 折叠)); end . 交叉验证通过添加 -v 和指定验证折叠数的变量 fold 自动完成。 @user3656367 那么我认为你需要对C代码进行更改并重新编译matlab接口 是的,必须在 C 文件中进行更改。只需注释打印命令。

以上是关于在 LIBSVM 中的 SVM 中进行交叉验证时停止打印准确性 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

libsvm java中的交叉验证准确性

绘制一对多 SVM 中 10 倍交叉验证的结果(使用 LibSVM)

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

libsvm 交叉验证与 matlab 中的预计算内核

如何在 LibSVM 中实现十折交叉验证

SVM 回归的交叉验证