다중 분류 모델을 만들었는데 성능 평가를 하려고 하니 에러가 떴다.
✅ f1_score
Target is multiclass but average='binary'. Please choose another average setting, one of [None, 'micro', 'macro', 'weighted'] 에러
찾아보니 f1, recall, roc_auc 같은 경우에는 이진분류이 경우에 사용할 수 있다고 한다.
다중 분류 모델에서는 average라는 파라미터값을 설정해주면 사용할 수 있다.
# 에러
f1 = round(f1_score(y_test, y_pred), ndigits=3)
# 수정
f1 = round(f1_score(y_test, y_pred, average='micro'), ndigits=3)
실제로 에러 문장에서도 average 값이 binary로 설정되어 있으니, micro, macro, weighted 중에서 하나를 선택해주라고 나온다.
이럴때는 각 패키지와 파라미터를 잘 설명하고 있는 패키지 홈페이지에 들어가서 확인하는게 제일 좋다.
아래는 사이킷런 홈페이지에서 f1_score의 파라미터를 설명해둔 페이지에서 가져온 average에 대한 설명이다.
binary :
기본값으로 설정되어있고, 오직 이진 분류에서만 사용된다.
micro :
총 true positive, false negative, false positive를 이용해 스코어를 계산한다.
macro :
각 레이블의 매트릭스를 계산하고 각 레이블의 가중이 되지 않는 평균(unweighted mean)을 찾는다.
레이블 불균형을 고려하지 않는다.
weighted :
각 레이블의 매트릭스를 계산하고, 각 레이블에 대한 실제 인스턴스의 수 별로 가중된 가중 평균을 찾는다.
(레이블 불균형이 있더라도 가중치를 주어 평균을 계산한다는 의미인 것 같다.)
precision과 recall 사이에 있지 않은 F-score를 초래할 수 있다.
samples :
각 인스턴스에 대한 매트릭스를 계산하고, 평균을 찾는다.
(오직 accuracy_score와 다른 다중 분류에서만 의미가 있다.)
✅ recall_score
f1을 변경하고 실행하니 리콜에서도 동일한 에러가 떴다.
Target is multiclass but average='binary'. Please choose another average setting, one of [None, 'micro', 'macro', 'weighted'] 에러
그래서 동일하게 average='micro'를 추가해주었다.
# 에러
recall = round(recall_score(y_test, y_pred), ndigits=3)
# 수정
recall = round(recall_score(y_test, y_pred, average='micro'), ndigits=3)
✅ roc_auc_score
잘 넘어가나 싶었는데 이번에는 roc_auc에서 에러가 발생했다.
multi_class must be in ('ovo', 'ovr') 에러
다중 분류인 경우에서만 나타나는 에러로, 사용할 구성 유형을 결정해야한다.
이번에도 사이킷런 사이트에서 찾아봤다.
ovo :
One-vs-one(일대일)을 의미하며 가능한 모든 클래스 쌍 조합의 평균 auc를 계산한다.
average='macro'로 설정했을 때 클래스 불균형에 민감하지 않다.
ovr :
One-vs-rest(일대나머지)를 의미하며 나머지에 대한 각 클래스 auc를 계산한다.
클래스 불균형이 '나머지'에 영향을 미치기 때문에 average='macro'로 설정해도 클래스 불균형에 민감하다.
나는 어떤게 맞는지 잘 몰라서 둘 다 적용해봤다.
# 에러
auc = round(roc_auc_score(y_test, y_pred), ndigits=3)
# 수정
auc = round(roc_auc_score(y_test, y_pred, multi_class='ovo'), ndigits=3)
그런데 또 다른 에러가 나서 그냥 auc는 구하지 않기로 했다...
✅ 결과
그래도 다중 분류 모델 성능 평가에서 f1과 recall을 해결한 덕분에 위와 같은 성능평가를 진행할 수 있었다.
'ML&DL > study' 카테고리의 다른 글
멀티모달(Multi Modal AI) 총정리 + 예제 실습 코드 (0) | 2023.11.21 |
---|---|
04. 심층 신경망 네트워크 - 앤드류응(Andrew Ng)교수님 머신러닝/딥러닝 한글자막 공부하기 (0) | 2021.09.10 |
03. 얕은 신경망 네트워크 - 앤드류응(Andrew Ng)교수님 머신러닝/딥러닝 한글자막 공부하기 (0) | 2021.09.05 |
02. 경사하강법 Gradient Descent - 앤드류 응(Andrew Ng)교수님 머신러닝/딥러닝 한글자막 공부하기 (0) | 2021.08.13 |
01. Intro - 앤드류 응(Andrew Ng)교수님 머신러닝/딥러닝 한글자막 공부하기 (0) | 2021.08.09 |