我用LIBSVM在Matlab带有选项'-b 1'
在训练和预测处理。 但它总是返回Model does not support probabiliy estimates
,所以我没有得到任何的概率或准确估计。 我试着在二进制类SVM(不NU-SVM!),它应该有工作'-b 1'
,但事实并非如此。 有谁知道什么是这个问题的原因是什么?
谢谢
我用LIBSVM在Matlab带有选项'-b 1'
在训练和预测处理。 但它总是返回Model does not support probabiliy estimates
,所以我没有得到任何的概率或准确估计。 我试着在二进制类SVM(不NU-SVM!),它应该有工作'-b 1'
,但事实并非如此。 有谁知道什么是这个问题的原因是什么?
谢谢
用法:SVM-预测[选项] test_file里面model_file OUTPUT_FILE选项:
-b probability_estimates:是否预测概率估计,0或1(默认为0); 一类支持向量机仅0支持
-q:安静模式(无输出)
用法:SVM-火车[选项] training_set_file [model_file]选项:
-s svm_type : set type of SVM (default 0)
0 - C-SVC(多类分类)
1 - NU-SVC(多类分类)
2 - 一个类SVM
3 - 的ε-SVR(回归)4 - NU-SVR(回归)
-t kernel_type:设定类型的核函数的(默认2)
0 -线性:U 'V 1 -多项式:(γ-U' V + coef0)^度
2 -径向基函数:EXP(-gamma | UV | ^ 2)
3 - 乙状结肠:正切(伽马* U'* V + coef0)4 - 预先计算内核(在training_set_file内核值)
-d度:设定程度的内核功能(默认值3)
-g伽马:在核函数设定伽马(默认为1 / NUM_FEATURES)
-r coef0:内核功能设置coef0(默认为0)
-c费用:设定C-SVC,ε-SVR,和NU-SVR的参数C(缺省为1)
-n NU:设置NU-SVC,一个类SVM和NU-SVR的参数NU(默认0.5)
-p小量:设置在小量-SVR的损失函数的ε(默认0.1)
-m的cachesize:以MB为单位设置高速缓存大小(默认为100)
-e小量:终止标准的设定容差(默认值0.001)
-h收缩:是否使用收缩启发式,0或1(缺省为1)
-b probability_estimates:是否训练一个SVC或SVR模型的概率估计,0或1(默认为0)
-Wi重量:设置类的参数C i到加权* C,对于C-SVC(缺省为1)
-vn:N倍交叉验证模式
-q:安静模式(无输出)
我们可以看到,最后的第四行是-b选项。 如果我们训练了与“-b 1”选项的模型,我们将得到一个可以输出概率,当你试图预测模型。 否则,如果你只有当你试图预测并不会产生与“-b 1”模型中使用“-b 1”选项。 你将得到错误:型号不支持probabiliy估计
最主要的是,如果你想获得probabiliy的估计,你应该在你的训练和测试过程中使用“-b 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();
}
}
这意味着它没有找到概率模型。