카테고리 없음

ML 앙상블모델(2)

shinyfood 2023. 12. 28. 08:42
728x90
반응형

https://shinyfood.tistory.com/87

 

ML/ 앙상블 모델(1)

앙상블 모델 - tree구조(결정트리)를 기반으로 만들어진 모델 - 여러개의 트리 모델을 이용해서 훈련하는 모델을 앙상블 모델이라고 칭합니다. 앙상블 모델 분류 - 회귀와 분류에서 모두 사용한

shinyfood.tistory.com

기존 글에서 이어집니다.

 

성능 평가하기

 

기존의 성능평가는 MAE와  R^2로 진행했지만 이번엔 정확도, 정밀도, 재현율, F1-Score 값을 이용해서 진행한다.

재현율이 높고, F1-Score가 높은값이면 보통 선정된다고 볼 수 있다.(무조건은 아니다)

정확도, 정밀도, 재현율, F1-Score의 모든 값은 0~1 사이의 값을 가지며, 값이 높을수록 좋다.

해당 값들을 확인하기위해서는 오차행렬도가 필요 하다.

오차행렬도의 구분 이미지

#시각화 라이브러리 정의
import matplotlib.pyplot as plt
import seaborn as sns

#한글 및 마이너스 기호처리
plt.rc("font", family="Malgun Gothic")
plt.rcParams["axes.unicode_minus"] = True

numpy 및 오차행렬도 계산 및 시각화 라이브러리

import numpy as np
from sklearn.metrics import confusion_matrix
from sklearn.metrics import ConfusionMatrixDisplay

 

오차행렬의 기준 특성은 종속변수이므로, 훈련에 사용한 범주를 먼저 확인해보도록 하자.

rf.classes_
array([0., 1.])

오차행렬 평가를 위해 매트릭스를 추출하도록 하겠다.

cm = confusion_matrix(test_target, y_pred, labels=rf.classes_)
array([[266,  75],
       [ 69, 890]], dtype=int64)
#오차행렬도 시각화하기

disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=rf.classes_)

disp.plot()

이제부터 중요한 내용이니 집중하도록 하자.

오차행렬(혼동행렬)은 어떠한 유형의 오류가 발생하고 있는지를 나타내는 값이다.

정확도(Score)의 값과 여기서나온 오차행렬도의 시각화 결과로 최종 모델을 선정한다.

 

FP(False Positive)
    : 예측 결과가 맞지는 않음(False).
    : 긍정적(Positive)으로 해석함.
    : 위험하지 않은 오류.
    
 * FN(False Negative)
    : 예측 결과가 맞지는 않음(False).
    : 부정적(Negative) 오류로 해석함.
    : 위험한 오류로 해석.
    : FN의 값이 크다면, 정확도(Score)의 값이 높더라도 예측모델로 사용을 고려해야함.
    
 * TP(True Positive)
    : 예측결과가 맞는 경우(True).
    : 1을 1로 잘 예측한 경우.
    
 * TN(True Negative)
    : 예측결과가 맞는 경우(True).
    : 0을 0으로 잘 예측한 경우.

 

평가에 사용되는 값은 정확도, 정밀도, 재현율, F1-Score 이다.

 

정확도(Accuracy) = (TP + TN) / (TP + TN + FP + FN)

정밀도(Precision) = TP / (TP + FP)

재현율(Recall)      = TP / (TP + TN)

F1-Score = (정밀도 * 재현율) / (정밀도 + 재현율)

 

정리 : 최종모델 선정방법은 과적합 여부를 따지고, 재현율과 F1-Score가 모두 높으면좋고, 재현율이 현저히 낮은 경우에는 모델 선정에서 고려, 또는 제외한다.

 

#분류모델 평가 라이브러리 정확도,정밀도,재현율,F1-Score 순
from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score
acc = accuracy_score(test_target, y_pred)
acc
0.8892307692307693

pre = precision_score(test_target, y_pred)
pre
0.9222797927461139

rec = recall_score(test_target, y_pred)
rec
0.9280500521376434

f1 = f1_score(test_target, y_pred)
f1
0.9251559251559252

 

해석은 여러분에게 맡기도록 하겠다.

 

728x90
반응형