在LIBSVM中的SVM中交叉验证时停止打印精度

时间:2014-06-04 11:49:24

标签: classification svm libsvm cross-validation

我在LIBSVM中的svmtrain中使用交叉验证。如何让它停止打印"交叉验证准确度"在consol? 谢谢

1 个答案:

答案 0 :(得分:2)

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

您没有指定如何使用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中重新编译该接口。