'Section 3 - F1 score 및 ROC, AUC 강의' 관련 교재 코드 문의 드립니다.
246
작성한 질문수 23
안녕하세요.
다름이 아니라 강사님께서 제공해주신 코드와 교재의 코드가 다른 부분이 있어서 질문 드립니다.
우선 강사님께서 제공해주신 코드를 보면,
from sklearn.metrics import roc_curve
# 레이블 값이 1일때의 예측 확률을 추출
pred_proba_class1 = lr_clf.predict_proba(X_test)[:, 1]
fprs, tprs, thresholds = roc_curve(y_test, pred_proba_class1)
print('반환된 분류 결정 임곗값 배열의 Shape:', thresholds.shape)
# 반환된 임곗값 배열 로우가 47건이므로 샘플로 10건만 추출하되, 임곗값을 5 Step으로 추출.
thr_index = np.arange(0, thresholds.shape[0], 5)
print('샘플 추출을 위한 임곗값 배열의 index 10개:', thr_index)
print('샘플용 10개의 임곗값: ', np.round(thresholds[thr_index], 2))
# 5 step 단위로 추출된 임계값에 따른 FPR, TPR 값
print('샘플 임곗값별 FPR: ', np.round(fprs[thr_index], 3))
print('샘플 임곗값별 TPR: ', np.round(tprs[thr_index], 3))
이렇게 나와있습니다.
그런데 교재 p.171쪽 맨 아래 코드를 보면,
"thresholds[0]은 max(예측확률) + 1로 임의 설정되기 때문에, 이를 제외하기 위해 np.arange는 1부터 시작"이라고 나와있습니다.
즉, 교재에서는 thr_index = np.arange(1, thresholds.shape[0], 5) 이렇게 코드를 입력해주었습니다.
제공해주신 코드와 교재 코드의 차이가 무엇인지와 "thresholds[0]은 max(예측확률) + 1로 임의 설정"이라는 것이 무슨 말인지 설명해주시면 감사하겠습니다! ^^
답변 8
0
일단 버전 차이때문에 그렇게 나타나는 것 같습니다. 굳이 사이킷런을 update 하지 않으셔도 될 것 같습니다.
초판과 동영상 녹화 시 아마 제 사이킷런 버전이 0.19 였던것 같습니다. 그리고 개정판 책 낼때는 0.21로 테스트 했습니다. 오히려 0.19가 동영상 강의 결과와 더 동일하게 나올 것입니다.
감사합니다.
0
작성해주신 코드를 돌려봐도 강사님과 다르게 나옵니다...
max predict_proba와 thresholds[0] 값 모두 0.94로 나오네요.
그래서 확인해보니 사이킷런 버전이 강사님과 다르네요...
사이킷런 버전이 달라서 제 코드가 강사님과 다른 코드를 출력해주는 것인가요?
0
저는 아래와 같이 하면 max(예측확률)이 0.965... , thresholds[0]은 1.965.....가 나옵니다.
제 사이킷런 버전은 0.22.1 이며 https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_curve.html
문서의 Return 부분 설명과 동일한 결과값이 나오고 있습니다. 아래 코드를 수행해 보시고 재 확인 부탁드립니다.
from sklearn.metrics import roc_curve
# 레이블 값이 1일때의 예측 확률을 추출
pred_proba_class1 = lr_clf.predict_proba(X_test)[:, 1]
print('max predict_proba:', np.max(pred_proba_class1))
fprs , tprs , thresholds = roc_curve(y_test, pred_proba_class1)
print('thresholds[0]:', thresholds[0])
결과 출력
max predict_proba: 0.9651539711607673 thresholds[0]: 1.9651539711607673
0
thresholds[0] 값이 'max(예측확률) + 1' 값이 나온다고 하셨는데, 제가 print( thresholds[0] ) 을 입력해보니 0.94(=max(예측확률))가 나옵니다... +1을 하지 않은 결과를 반환해주는 것 같습니다.
말씀 해주신대로라면, print( thresholds[0] ) 의 출력 결과가 1.94가 나와야 하는 것 아닌가요?
0
안녕하십니까,
thr_index = np.arange(1, thresholds.shape[0], 5)가 더 정확한 코드 입니다. 개정판에서 코드를 변경했는데, 동영상이 개정판 보다 먼저 제작되어서 그렇습니다.
fprs , tprs , thresholds = roc_curve(y_test, pred_proba_class1) 를 통해 thresholds로 array가 반환되는데, thresholds[0] 값은 pred_proba_class1에서 가장 큰 값에 + 1은 한 값으로 세팅됩니다(max(pred_proba_class1) + 1로 여기서는 1.97이 나옵니다.). 따라서 이값은(thresholds[0]=1.97) fpr, tpr 을 threshold 기준값으로 구할 시에는 제외가 되어야 하는데, 이것이 동영상에는 반영이 되지 않았습니다.
아래 roc_curve API 설명에서 Returns부분을 참조 부탁드립니다.
https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_curve.html
지적해 주셔서 감사합니다. 추후에 동영상 일괄 업데이트시 반영하겠습니다.
안녕하세요 열심히 수강중인 학생입니다
0
63
2
정수 인덱싱
0
68
2
넘파이 오류
0
85
2
11강 numpy의 axis 축 질문 드립니다.
0
85
2
Kaggle 에서 Santander customer satisfaction data 를 다운로드 되지가 않습니다.
0
79
2
Feature importances 를 보여주는 barplot 이 그래프로 안보여져요.
0
70
2
타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.
0
75
2
타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.
0
64
2
5강 강의 오류가 있어요.
0
84
1
실무에서 LTV 관련 모델 선택 질문입니다!
0
72
2
14강 강의 듣는중에 궁금한게 있어서 질문합니다~
0
69
3
파이썬 다운그레이 후 사이킷런 재설치
0
117
2
좋은 강의 감사합니다.
0
72
2
scoring 함수 음수값
0
67
2
6번 강의에 사이킷런, 파이썬, 아나콘다 각각 버전 일치 안 시키고 진행해도 강의 따라가 지나요?
0
100
2
분류 평가 정확도 예측
0
77
2
안녕하세요. 강의 들으면서 업무에 적용하고 싶은 수강생입니다.
0
99
1
카카오톡 채널 있나요
0
107
1
혹시 강의에서 사용하시는 ppt 받을 수 있는건가요
0
190
2
pca 스케일링 관련하여 질문드립니다.
0
100
2
주피터 대신 구글 코랩
0
172
2
강의에서 사용하는 pdf or ppt자료는 따로 없는 건가요?
0
148
2
실루엣 스코어..
0
86
2
float64 null 값 처리 방법
0
103
2





