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是唯一有用的,如果你能排列順序的預測。使用.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() 

enter image description here

編輯:雖然沒有什麼距離計算上.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分數這樣的事情,你的意思是AUC(曲線下面積?) – Calimo

+0

我的意思是roc_auc_score()。 – LUSAQX