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_proba
和decision_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_function
s: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有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章