我在Matlab中使用libsvm,在训练和预测过程中使用选项'-b 1'
。但它总是返回Model does not support probabiliy estimates
,所以我没有得到任何概率或准确度估计。我试过二进制类SVM(不是nu-svm!),它应该与'-b 1'
一起工作,但事实并非如此。有谁知道这个问题的原因是什么?
由于
答案 0 :(得分:1)
实际上,您的问题需要更多信息才能得到正确的答案。但一般来说,给出错误的部分在源代码中:
try
{
BufferedReader input = new BufferedReader(new FileReader(argv[i]));
DataOutputStream output = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(argv[i+2])));
svm_model model = svm.svm_load_model(argv[i+1]);
if(predict_probability == 1)
{
if(svm.svm_check_probability_model(model)==0)
{
System.err.print("Model does not support probabiliy estimates\n");
System.exit(1);
}
}
else
{
if(svm.svm_check_probability_model(model)!=0)
{
System.out.print("Model supports probability estimates, but disabled in prediction.\n");
}
}
predict(input,output,model,predict_probability);
input.close();
output.close();
}
catch(FileNotFoundException e)
{
exit_with_help();
}
catch(ArrayIndexOutOfBoundsException e)
{
exit_with_help();
}
}
这意味着它没有找到概率模型。
答案 1 :(得分:1)
用法:svm-predict [options] test_file model_file output_file 选项:
-b probability_estimates:是否预测概率估计,0或1(默认为0);对于单类SVM,仅支持0
-q:安静模式(无输出)
用法:svm-train [options] training_set_file [model_file]选项:
-s svm_type : set type of SVM (default 0)
0 - C-SVC(多级分类)
1 - nu-SVC(多级分类)
2 - 一类SVM
3 - epsilon-SVR(回归)4 - nu-SVR(回归)
-t kernel_type:设置内核函数的类型(默认为2)
0 - 线性:u' v 1 - 多项式:(gamma u' v + coef0)^度
2 - 径向基函数:exp(-gamma | u-v | ^ 2)
3 - sigmoid:tanh(gamma * u' * v + coef0)4 - 预先计算的内核(training_set_file中的内核值)
-d degree:设置内核函数的度数(默认为3)
-g gamma:在内核函数中设置gamma(默认值为1 / num_features)
-r coef0:在内核函数中设置coef0(默认为0)
-c cost:设置C-SVC,epsilon-SVR和nu-SVR的参数C(默认为1)
-n nu:设置nu-SVC,one-class SVM和nu-SVR的参数nu(默认为0.5)
-p epsilon:将epsilon设置为epsilon-SVR的损失函数(默认为0.1)
-m cachesize:以MB为单位设置缓存大小(默认为100)
-e epsilon:设置终止标准的容差(默认值为0.001)
-h收缩:是否使用收缩启发式,0或1(默认为1)
-b probability_estimates:是否训练SVC或SVR模型进行概率估计,0或1(默认为0)
-wi weight:将类i的参数C设置为weight * C,对于C-SVC(默认为1)
-v n:n倍交叉验证模式
-q:安静模式(无输出)
我们可以看到最后的第四行是-b选项。如果我们使用' -b 1'选项,我们将获得一个可以在您尝试预测时输出概率的模型。否则,如果您只使用' -b 1'当您尝试使用' -b 1'来预测并且不生成模型时的选项。你会得到错误:模型不支持概率估计
主要的是,如果你想获得可能的估计,你应该使用' -b 1 '在训练和测试过程中,两者都是。