与ROC交叉验证?

时间:2016-12-06 22:44:45

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

我使用代码运行交叉验证,返回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))  

1 个答案:

答案 0 :(得分:1)

只有在您对预测进行排序时,ROC AUC才有用。使用from sklearn.datasets import make_classification from sklearn.metrics import roc_curve from sklearn.ensemble import RandomForestClassifier from sklearn.cross_validation 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() 只会为每个样本提供最可能的类,因此您将无法进行排名。

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

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) 

enter image description here

编辑虽然没有什么可以阻止你计算{{prefix}}/bin上的{{[prefix}}/libexec/mc/mcwrapper.sh,但上述观点是它并不是真正有用的衡量标准。

bin/