ROC АУК только полезно, если вы можете ранговый порядок свои предсказания. Используя .predict()
, вы получите только самый вероятный класс для каждого образца, и вы не сможете выполнить этот порядок рангов.
В приведенном ниже примере я помещаю случайный лес на случайно сгенерированный набор данных и тестировал его на протяженном образце. Синяя линия показывает правильную кривую ROC, выполненную с использованием .predict_proba()
, в то время как зеленый показывает вырожденный с .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()
EDIT: Хотя нет ничего не мешает вам расчета roc_auc_score()
на .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)
ROC AUC полезен, если вы можете ранжировать ваши прогнозы. Использование '.predict()' будет просто давать наиболее вероятный класс для каждого образца, и поэтому вы не сможете сделать это упорядочение рангов. –