scikit-learn中的predict_proba和decision_function有啥区别?

Posted

技术标签:

【中文标题】scikit-learn中的predict_proba和decision_function有啥区别?【英文标题】:What's the difference between predict_proba and decision_function in scikit-learn?scikit-learn中的predict_proba和decision_function有什么区别? 【发布时间】:2016-08-01 06:53:27 【问题描述】:

我正在研究scikit-learn example(分类器比较),但对predict_probadecision_function 感到困惑。

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

这两者有什么区别?是不是每个分类方法都有两者中的任何一个作为分数?

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

【问题讨论】:

【参考方案1】:

你的例子是

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 被计算(在二进制情况下)

使用普拉特缩放

is both "expensive" and has "theoretical issues"。这就是这里使用decision_function 的原因。 (正如@Ami 所说,这是 margin - 到超平面的距离,无需进一步计算即可访问)。在 SVM 的情况下,建议

使用decision_function 代替predict_proba

还有其他decision_functions:SGDClassifier's。这里predict_proba依赖于损失函数,decision_function是通用的。

【讨论】:

【参考方案2】:

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

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

我猜predict_prob 通常在您的情况下更有用 - 另一种方法更具体到算法。

【讨论】:

谢谢阿米!我仍然想知道分类器使用什么来计算最终预测、决策函数或预测概率?这两者似乎有某种联系,对吧? 是的,它们确实是相关的;特别是它们是反单调的。 @AmiTavory,我可以请您在这里查看与 scikit-learn 相关的问题 - ***.com/questions/48788611/… 吗?

以上是关于scikit-learn中的predict_proba和decision_function有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

scikit-learn 中的 DBSCAN(仅使用指标)

scikit-learn 中的不平衡

混淆矩阵中的 Scikit-learn 变化阈值

GradientBoostingClassifier 与 scikit-learn 中的 BaseEstimator?

如何修复 scikit-learn 中的令牌模式?

scikit-learn 中的测试集分区