ML 앙상블모델(2)
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
해석은 여러분에게 맡기도록 하겠다.