scikit-learn中predict_proba和decision_function之间有什么区别?

Ros*_*osy 32 scikit-learn

我正在学习一个scikit学习的例子(分类比较),并与糊涂了predict_probadecision_function.

他们通过使用Z = clf.decision_function()或绘制轮廓来绘制分类结果 Z = clf.predict_proba().

这两者有什么不同?是这样每种分类方法都有两个分数?

哪一个更适合解释分类结果,我该如何从两个中进行选择?

Ami*_*ory 32

后者predict_proba是(软)分类器的方法,输出实例在每个类中的概率.

前者,decision_function找到分离超平面的距离.例如,(n)SVM分类器找到将空间分成与分类结果相关联的区域的超平面.给定一个点,该函数找到分隔符的距离.

我猜这predict_prob在你的情况下更有用,一般来说 - 另一种方法更具体的算法.


ser*_*inc 10

你的榜样是

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]
Run Code Online (Sandbox Code Playgroud)

所以代码使用decision_function它是否存在.在SVM情况下,predict_proba计算(在二进制情况下)

使用Platt缩放

既"昂贵"又具有"理论问题".这就是为什么decision_function在这里使用.(正如@Ami所说,这是边距 - 超平面的距离,无需进一步计算即可访问).在SVM的情况下,建议

decision_function而不是predict_proba.

还有其他decision_function的:SGDClassifier's.这里,predict_proba取决于损失功能,并且decision_function普遍可用.