0

コードを使用してクロス検証を実行し、ROCスコアを返します。あなたは順番にあなたの予測をランク付けすることができるかどう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_auc_score(y_test,results.predict(X_test)) 

ではなく

roc_auc_score(y_test,results.predict_proba(X_test)) 
+0

ROC AUCは、予測の順位を付けることができる場合にのみ有効です。 '.predict()'を使うと、各サンプルに対して最も確からしいクラスが与えられますので、そのランク付けをすることはできません。 –

答えて

1

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() 

enter image description here

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) 
+0

ありがとうございます。しかし、私はROC曲線ではなくROCスコアに関係しています。私はroc_auc_score(y_test、results.predict(X_test))を取得したいと思います。 – LUSAQX

+0

@LUSAQX ROCスコアのようなものはありませんか? – Calimo

+0

私はroc_auc_score()を意味します。 – LUSAQX

関連する問題