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.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()
编辑:虽然没有什么距离计算上.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 AUC只有在您可以对您的预测进行排序时才有用。使用'.predict()'会给每个样本最可能的类,所以你将无法进行排序。 –