2017-12-10 5 views
0

다른 질문의 중복으로 표시 될 수 있습니다. here.sklearn은 바이너리 분류기에 대한 roc 곡선 아래의 면적을 어떻게 계산합니까?

y_pred = clf.predict(X_test) roc_auc_score(y_test, y_pred)

이유를 : 그러나, 나는에서 제공하는 하나입니다, 단 하나의 임계 값을 테스트하여 ROC 곡선 아래의 면적을 계산하는 방법 Scikit 배우고 이해할 수없는 여전히 대답을 보았고, 한 여러 개의 값 (다중 임계 값의 결과 인 다중 y_test, y_pred)을 취하지 않습니다. 단순화 된 설명은 정말 감사하겠습니다.

답변

0

이 경우 roc_auc_score()의 두 번째 인수는 예측 확률이 clf.predict_proba(X_test) 인 형식이어야합니다. 이 임계 값은이 예측 확률의 기준에서이 함수 내에서 계산됩니다.

import numpy as np 
from sklearn.metrics import roc_auc_score 
y_true = np.array([0, 0, 1, 1]) 
y_scores = np.array([0.1, 0.4, 0.35, 0.8]) 
roc_auc_score(y_true, y_scores) 
0.75 

roc_auc_score가이 도움이 roc_curve 그 자체를보고있을 caluclated 방법을 이해하려면 : documentation이에 대한 예제가있다. 이것은 sklearn.metrics.roc_curve() 함수로 할 수 있습니다. 예는 documentation 찍은 :

import numpy as np 
from sklearn import metrics 
y = np.array([1, 1, 2, 2]) 
scores = np.array([0.1, 0.4, 0.35, 0.8]) 
fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2) 
fpr 
array([ 0. , 0.5, 0.5, 1. ]) 
tpr 
array([ 0.5, 0.5, 1. , 1. ]) 
thresholds 
array([ 0.8 , 0.4 , 0.35, 0.1 ]) 

합니다 (y은 여전히 ​​2 포지티브 클래스 인과 이진 분류 후자 예에서 상이한 있는데도.)

로서 후자의 예에서 알 수있는 다른 임계 값은 제공된 scores에서 으로 취합니다.

ROC Curve은 y 축과 플롯의 x 축에 위양성률 fpr에 참 긍정적 인 평가 tpr를 넣어 생성 될 것이다.

+0

다음과 같이'clf.predict_proba (X_test)'대신'y_pred = clf.predict (X_test)'를 사용했다면 어떻게 되나요? [link] (https://stackoverflow.com/questions/31159157)/another-result-with-roc-auc-score-and-auc) 나는 여전히 가능하다고 생각한다. – Ophilia

+0

'clf.predict' 출력을 사용할 수 있다는 것이 옳은데, 이것은 몇 가지 의미가 있으며 계산할 수 없다. 원하는 양. 이진 분류가 주어지면'clt.predict'는 0 또는 1을 포함하는 배열을 반환합니다. 이 값은 점수 (일반적으로 0에서 1까지의 범위)로 해석 될 수도 있습니다. 'clf.predict_proba' – LuckyJosh

+0

... (0 또는 1뿐만 아니라)에 의해 반환 된 점수의 차이점은 두 가지 가능한 임계 값을 가지고 있다는 것입니다. 1) 광석 이상으로 점수가 1 점인 모든 것을 긍정적 인 계급으로 가정한다. 2) 점수가 0 이상인 모든 것을 취합니다. – LuckyJosh