我在Matlab中使用libsvm,并在训练和预测过程中使用了'-b 1'
选项。但它总是返回Model does not support probabiliy estimates
,因此我无法获得任何概率或准确性估计。我尝试在二分类SVM(不是nu-svm!)中使用,按理说'-b 1'
应该有效,但实际上并非如此。有人知道这个问题的原因吗?
谢谢
回答:
- 让我展示一下svm-predict的使用方法:
使用方法:svm-predict [选项] 测试文件 模型文件 输出文件 选项:
-b 概率估计:是否预测概率估计,0或1(默认0);对于一类SVM仅支持0
-q:安静模式(无输出)
- svm-train:
使用方法:svm-train [选项] 训练集文件 [模型文件] 选项:
-s svm类型:设置SVM类型(默认0)
0 — C-SVC(多类分类)
1 — nu-SVC(多类分类)
2 — 一类SVM
3 — epsilon-SVR(回归) 4 — nu-SVR(回归)
-t 核类型:设置核函数类型(默认2)
0 — 线性:u’*v 1 — 多项式:(gamma*u’*v + coef0)^degree
2 — 径向基函数:exp(-gamma*|u-v|^2)
3 — sigmoid:tanh(gamma*u’*v + coef0)4 — 预计算核(训练集文件中的核值)
-d 度数:设置核函数中的度数(默认3)
-g gamma:设置核函数中的gamma(默认1/特征数)
-r coef0:设置核函数中的coef0(默认0)
-c 成本:设置C-SVC、epsilon-SVR和nu-SVR的参数C(默认1)
-n nu:设置nu-SVC、一类SVM和nu-SVR的参数nu(默认0.5)
-p epsilon:设置epsilon-SVR损失函数中的epsilon(默认0.1)
-m 缓存大小:设置缓存内存大小,单位MB(默认100)
-e epsilon:设置终止标准的容差(默认0.001)
-h 收缩:是否使用收缩启发式,0或1(默认1)
-b 概率估计:是否训练一个用于概率估计的SVC或SVR模型,0或1(默认0)
-wi 权重:设置类别i的参数C为weight*C,适用于C-SVC(默认1)
-v n:n折交叉验证模式
-q:安静模式(无输出)
我们可以看到倒数第四行是-b选项。如果我们用’-b 1’选项训练模型,我们将得到一个在预测时可以输出概率的模型。否则,如果你在预测时只使用’-b 1’选项而没有用’-b 1’生成模型,你会得到错误:Model does not support probabiliy estimates
最重要的是,如果你想获得概率估计,你应该在训练和测试过程中都使用’-b 1‘选项。