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()으로 축퇴 한 것을 보여줍니다. 여기서 하나의 컷오프 점만 알고 있습니다.

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