scikit-learn的svm predict_proba的混淆概率



我的目的是通过特定类的每个样本的排序概率来绘制PR曲线。然而,我发现,当我使用两个不同的标准数据集:虹膜和数字时,通过svm的predict_proba()获得的概率有两种不同的行为。

使用下面的python代码对第一种情况用"iris"情况求值,并且该类获得最高概率是合理的。

D = datasets.load_iris()
clf = SVC(kernel=chi2_kernel, probability=True).fit(D.data, D.target)
output_predict = clf.predict(D.data)
output_proba = clf.predict_proba(D.data)
output_decision_function = clf.decision_function(D.data)
output_my = proba_to_class(output_proba, clf.classes_)
print D.data.shape, D.target.shape
print "target:", D.target[:2]
print "class:", clf.classes_
print "output_predict:", output_predict[:2]
print "output_proba:", output_proba[:2]

接下来,它产生如下输出。显然,每个样本的最高概率与预测()的输出相匹配:样本#1为0.97181088,样本#2为0.96961523。

(150, 4) (150,)
target: [0 0]
class: [0 1 2]
output_predict: [0 0]
output_proba: [[ 0.97181088  0.01558693  0.01260218]
[ 0.96961523  0.01702481  0.01335995]]

然而,当我用以下代码将数据集更改为"数字"时,概率显示出相反的现象,即每个样本的最低概率支配预测()的输出标签,样本#1的概率为0.00190932,样本#2的概率为0.00220549。

D = datasets.load_digits()

输出:

(1797, 64) (1797,)
target: [0 1]
class: [0 1 2 3 4 5 6 7 8 9]
output_predict: [0 1]
output_proba: [[ 0.00190932  0.11212957  0.1092459   0.11262532      0.11150733  0.11208733
0.11156622  0.11043403  0.10747514  0.11101985]
[ 0.10991574  0.00220549  0.10944998  0.11288081  0.11178518   0.11234661
0.11182221  0.11065663  0.10770783  0.11122952]]

我读过这篇文章,它导致了一个解决方案,使用线性SVM与decision_function()。然而,由于我的任务,我仍然必须关注支持向量机的卡方核。

解决方案吗?

正如文档所述,不能保证predict_probapredict在SVC上给出一致的结果。你可以简单地使用decision_function。对于线性支持向量机和核支持向量机都是如此。

相关内容

  • 没有找到相关文章

最新更新