该模型不支持libsvm中的概率估计



在训练和预测过程中,我在Matlab中使用了带有选项'-b 1'的libsvm。但它总是返回Model does not support probabiliy estimates,所以我没有得到任何概率或准确性估计。我在二进制类SVM中尝试过(而不是nu-SVM!),它本应该和'-b 1'一起工作,但事实并非如此。有人知道这个问题的原因吗?

感谢

  1. 让我向您展示svm predict的用法:

用法:svm predict[选项]test_file model_file output_file选项:

-b probability_estimates:预测概率估计,0还是1(默认为0);对于一类SVM,仅支持0

-q:安静模式(无输出)

  1. svm训练:

用法:svm train[选项]training_set_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--多项式:(gammau'v+coeff0)^度
2--径向基函数:exp(-gamma
|u-v|^2)
3--sigmoid:tanh(gamma*u'*v+coff0)

4——预计算内核(training_set_file中的内核值)

-d度:在内核函数中设置度(默认值3)

-g gamma:在内核函数中设置gamma(默认1/num_features)

-r coeff0:在内核函数中设置coeff0(默认为0)

-c cost:设置c-SVC、epsilon SVR和nu SVR的参数c(默认为1)

-n nu:设置nu SVC、一类SVM和nu SVR(默认0.5)的参数nu

-p epsilon:设置epsilon SVR的损失函数中的epsilon(默认值为0.1)

-m cachesize:设置以MB为单位的缓存大小(默认为100)

-eε:设置终止标准的容差(默认值0.001)

-h收缩:是否使用收缩启发式,0或1(默认为1)

-b probability_estimates:是否训练SVC或SVR模型进行概率估计,0或1(默认为0)

-wi weight:将i类的参数C设置为weight*C,用于C-SVC(默认为1)

-vn:n倍交叉验证模式

-q:安静模式(无输出)

我们可以看到最后四行是-b选项。如果我们用"-b1"选项训练模型,我们会得到一个模型,当你试图预测时,它可以输出概率。否则,如果在尝试预测而不使用"-b 1"生成模型时仅使用"-b"选项。你会得到错误:模型不支持概率估计

主要的是,如果你想获得概率估计,你应该在训练测试过程中使用">-b1",这两个过程都是如此。

实际上,您的问题需要更多信息才能得到正确的答案。但一般来说,出现错误的部分在源代码中:

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 estimatesn");
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();
}
}

这意味着它没有找到概率模型。

最新更新