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

42
我正在学习一个scikit-learn示例(分类器比较),并对predict_probadecision_function感到困惑。他们使用Z = clf.decision_function()Z = clf.predict_proba()绘制分类结果的轮廓。这两者之间有什么区别?是每种分类方法都有其中一种作为分数吗?哪个更适合解释分类结果,我应该如何选择?
2个回答

43
后者,decision_function,是用于寻找与分离超平面的距离的方法。例如,SVM分类器将空间分成与分类结果相关联的区域,该函数可针对给定点找到到分隔器的距离。
后一种方法predict_proba是一个(软)分类器的方法,输出实例属于每个类的概率。
我猜在你的情况下,predict_prob通常更有用 - 另一种方法更具体于算法。

谢谢Ami!我还在想分类器用什么来计算最终预测,是decision_function还是predict_prob?这两个似乎有些联系,对吧? - Rosy
是的,它们确实相关;具体来说,它们是反单调的。 - Ami Tavory
@AmiTavory,可以请您看一下这里与scikit-learn相关的问题吗 - https://stackoverflow.com/questions/48788611/python-find-document-similarity-to-show-related-ones? - Istiaque Ahmed

12

您的示例是

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(在二元情况下)。

使用Platt缩放

既“昂贵”又存在“理论问题”。这就是为什么在这里使用decision_function的原因。(就像@Ami所说的那样,这是边界-到超平面的距离,可以在不进行更多计算的情况下访问)。在SVM情况下,建议使用

decision_function而不是predict_proba

还有其他decision_functionSGDClassifier's。在这里,predict_proba取决于损失函数,而decision_function普遍可用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接