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 АУК только полезно, если вы можете ранговый порядок свои предсказания. Используя .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() 

enter image description here

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

Спасибо. Но я отношусь к оценке ROC, а не к кривой ROC. Поэтому я хочу получить roc_auc_score (y_test, results.predict (X_test)) – LUSAQX

+0

@LUSAQX нет такой вещи, как оценка ROC, вы имеете в виду AUC (область под кривой?) – Calimo

+0

Я имею в виду roc_auc_score(). – LUSAQX

 Смежные вопросы

  • Нет связанных вопросов^_^