ROC AUCに基づくROCを返すことができるだけで有効です。 .predict()
を使用すると、各サンプルに最も可能性の高いクラスが与えられますので、そのランク付けを行うことはできません。
以下の例では、ランダムに生成されたデータセットにランダムフォレストを適合させ、持ち出されたサンプルでそれをテストしました。青い線は.predict_proba()
を使って行われた正しいROC曲線を示し、緑は縮退したものを.predict()
と表示します。ここでは、実際には1つのカットオフ点しか認識していません。
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:.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()'を使うと、各サンプルに対して最も確からしいクラスが与えられますので、そのランク付けをすることはできません。 –