我的问题部分是由scikit-learn
. 在文档中,有两个 示例说明如何计算接收器操作特性 (ROC) 曲线。
一个predict_proba
用来
计算样本可能结果的概率 [...]。
,而其他用途decision_function
,产生
样本 X 到分离超平面的距离。
什么时候应该使用每一个?
我的问题部分是由scikit-learn
. 在文档中,有两个 示例说明如何计算接收器操作特性 (ROC) 曲线。
一个predict_proba
用来
计算样本可能结果的概率 [...]。
,而其他用途decision_function
,产生
样本 X 到分离超平面的距离。
什么时候应该使用每一个?
我从务实的角度回答这个问题,只是通过查看代码并从示例中推断出来。一个更理论的答案可能是一个很好的补充。
一般两者都可以使用。区别在这里得到了很好的解释。
然而最相关的是,并非所有算法都提供predict_proba
和decision_function
。据我所知,每个分类器都允许predict_proba
在 sklearn 中使用。对于某些人——特别是 SVC(支持向量分类)——两者都给出完全相同的结果。为了检查,我使用了这个predict_proba
示例并使用和 once更改了代码一次decision_function
。
具体来说,我改变了:
probas_ = classifier.fit(X[train], y[train]).predict_proba(X[test])
# Compute ROC curve and area the curve
fpr, tpr, thresholds = roc_curve(y[test], probas_[:, 1])
至:
probas_ = classifier.fit(X[train], y[train]).decision_function(X[test])
# Compute ROC curve and area the curve
fpr, tpr, thresholds = roc_curve(y[test], probas_)
两者都产生与您在图像中看到的完全相同的结果:
然而,这仅适用于 SVC,其中到决策平面的距离用于计算概率 - 因此 ROC 没有差异。
在另一个示例中,特定的代码行与此问题相关:
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]
因此,从 sklearn 示例中推断,我建议您decision_function
尽可能使用 ,如果没有,请使用 提供的概率predict_proba
。
decision_function
在 sklearn 中不提供 a 的算法示例:
KNeighborsClassifier()
RandomForestClassifier()
GaussianNB()