我正在研究一个scikit-learn示例(分类器比较(,并对predict_proba
和decision_function
感到困惑。
他们通过使用Z = clf.decision_function()
或Z = clf.predict_proba()
绘制等值线来绘制分类结果。
这两者之间有什么区别?是不是每个分类方法都有两者中的任何一个作为分数?
哪一个更适合解释分类结果,我应该如何从两者中选择?
后者predict_proba
是一种(软(分类器输出实例在每个类中的概率的方法。
前者,decision_function
,找到到分离超平面的距离。例如,a(n( SVM 分类器查找将空间划分为与分类结果关联的区域的超平面。此函数给定一个点,查找到分隔符的距离。
我猜predict_prob
在您的情况下更有用,一般来说 - 另一种方法更特定于算法。
你的例子是
if hasattr(clf, "decision_function"):
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
else:
Z = clf.predict_proba(np.c_[xx.ravel(), yy.ravel()])[:, 1]
因此,如果存在,代码将使用decision_function
。在 SVM 情况下,计算predict_proba
(在二进制情况下(
使用普拉特缩放
既"昂贵"又有"理论问题"。这就是这里使用decision_function
的原因。(正如@Ami所说,这是保证金—— 到超平面的距离,无需进一步计算即可访问(。在 SVM 的情况下,建议
使用
decision_function
而不是predict_proba
。
还有其他decision_function
s:SGDClassifier'
s。在这里,predict_proba
取决于损失函数,decision_function
是普遍可用的。