【问题标题】:Cross Validation with ROC?使用 ROC 进行交叉验证?
【发布时间】:2017-04-21 17:44:10
【问题描述】:

我使用代码运行交叉验证,返回 ROC 分数。

rf = RandomForestClassifier(n_estimators=1000,oob_score=True,class_weight  = 'balanced') 
scores = cross_val_score ( rf, X,np.ravel(y), cv=10, scoring='roc_auc')

如何根据

返回 ROC
roc_auc_score(y_test,results.predict(X_test))  

而不是

roc_auc_score(y_test,results.predict_proba(X_test))  

【问题讨论】:

  • ROC AUC 仅在您可以对预测进行排序时才有用。使用.predict() 只会为每个样本提供最可能的类别,因此您将无法进行该排名排序。

标签: python machine-learning cross-validation roc model-validation


【解决方案1】:

ROC AUC 仅在您可以对预测进行排序时才有用。使用 .predict() 只会为每个样本提供最可能的类别,因此您将无法进行该排名排序。

在下面的示例中,我在一个随机生成的数据集上拟合了一个随机森林,并在一个保留的样本上对其进行了测试。蓝线显示使用.predict_proba() 完成的正确ROC 曲线,而绿色显示使用.predict() 的简并曲线,它只知道一个截止点。

from sklearn.datasets import make_classification
from sklearn.metrics import roc_curve
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split

rf = RandomForestClassifier()

data, target = make_classification(n_samples=4000, n_features=2, n_redundant=0, flip_y=0.4)
train, test, train_t, test_t = train_test_split(data, target, train_size=0.9)

rf.fit(train, train_t)

plt.plot(*roc_curve(test_t, rf.predict_proba(test)[:,1])[:2])
plt.plot(*roc_curve(test_t, rf.predict(test))[:2])
plt.show()

编辑:虽然没有什么可以阻止您在 .predict() 上计算 roc_auc_score(),但上面的重点是它并不是一个真正有用的度量。

In [5]: roc_auc_score(test_t, rf.predict_proba(test)[:,1]), roc_auc_score(test_t, rf.predict(test))
Out[5]: (0.75502749115010925, 0.70238005573548234) 

【讨论】:

  • 谢谢。但我关心的是 ROC 分数而不是 ROC 曲线。所以我想得到 roc_auc_score(y_test,results.predict(X_test))
  • @LUSAQX 没有 ROC 分数这样的东西,你的意思是 AUC(曲线下面积?)
  • 我的意思是 roc_auc_score()。
  • roc_auc_score() 只是 ROC 曲线下方的区域。您可以使用roc_auc_score() 轻松计算绿色曲线下的面积,但我的回答是,它本质上将是一个毫无意义的数字,因为您真正拥有的只是使用.predict() 进行的单一灵敏度/特异性测量跨度>
  • @Chris roc_curve 返回 3 个元素,我想将前两个传递给 plt.plot[:2] 选择前两个元素,* 是参数解包运算符,将它们作为两个单独的输入传递给plt.plot(有关其工作原理的更多详细信息,请参见geeksforgeeks.org/packing-and-unpacking-arguments-in-python)。跨度>
猜你喜欢
  • 2012-09-11
  • 2021-01-30
  • 2015-06-11
  • 2020-07-13
  • 2019-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
相关资源
最近更新 更多