지도학습(분류) - 분류평가지표
1. 서론
--- 지도학습(분류) 개념 소개 포스팅 (하단 링크 참조) ---
https://dataworld.tistory.com/44
지도학습(분류)
1. 서론 ML 기법 중 '분류' 기법에 대해 알아본다. (ML 기법 중 '회귀' 기법에 관한 포스팅은 아래 여러 포스팅 참조!) -- 단순선형회귀 -- https://dataworld.tistory.com/42 지도학습 (회귀) - 단순선형회귀 1...
dataworld.tistory.com
--- 지도학습 '의사결정나무' 소개 포스팅 (하단 링크 참조) ---
https://dataworld.tistory.com/46
지도학습(분류) - 의사결정나무
1. 서론 * 의사결정나무기법은 지도학습 중 '분류문제'에 해당하는 기법이다. * (앞서) 지도학습 분류기법의 개념에 관해 먼저 숙지하자. (하단 포스팅 참조) https://dataworld.tistory.com/44 지도학습(분
dataworld.tistory.com
* 분류 모델의 성능을 평가하기 위해 몇 가지 분류평가지표를 사용하여야 한다.
2. 혼동행렬(Confusion Matrix)
* Positive는 0, Negative는 1로도 표현 가능함
* True Positive: 실제 Positive인 값을 Positive라고 예측 (정답)
* True Negative: 실제 Negative인 값을 Negative라고 예측 (정답)
* False Positive: 실제 Negative인 값을 Positive라고 예측 (오답) - 1형 오류
* False Negative: 실제 Positive인 값을 Negative라고 예측 (오답) - 2형 오류
[1] 정확도(Accuracy)
= 전체 데이터 중에서 제대로 분류된 데이터의 비율로, 모델이 얼마나 정확하게 분류하는 지 나타냄
* 일반적으로 분류 모델의 주요 평가 방법으로 사용됨
* 그러나, 클래스 비율이 불균형할 경우 평가 지표의 신뢰성을 잃을 가능성이 있다.
* 정확도 = 실제 정답인 비율 / 전체
- 즉 정확도가 높다는 건 해당 모델이 잘 맞췄다는 뜻
[2] 정밀도(Precision)
= 모델이 Positive라고 분류한 데이터 중에서 실제로 Positive인 데이터의 비율
* Negative가 중요한 경우
* 즉, 실제로 Negative인 데이터를 Positive라고 판단하면 안되는 경우 사용되는 지표
- 즉 FP가 중요
* 예) 스팸 메일 판결을 위한 분류 문제
- 해당 메일이 스팸일 경우 P, 스팸이 아닌 일반 메일일 경우 N
- 일반 메일을 스팸메일(P)로 잘못 예측했을 경우 중요한 메일을 전달받지 못하는 상황이 발생할 수 있다. 이럴 경우 정밀도 수치를 살펴보는게 중요하다.
[3] 재현율(Recall, TPR)
= 실제로 Positive인 데이터 중에서 모델이 Positive로 분류한 데이터의 비율
* Positive가 중요한 경우
* 즉, 실제로 Positive인 데이터를 Negative라고 판단하면 안되는 경우 사용되는 지표
- 즉 FN이 중요
* 예) 악성종양 여부 판결을 위한 검사
- 악성종양일 경우 P, 양성종양일경우 (악성종양이 아닌 경우) N
- 악성종양을 양성종양인 N으로 잘못 예측했을 경우 제 때 치료를 받지 못하게 되어 생명 위급 가능성, 즉 이 때는 재현율을 따지는 것이 중요하다.
[4] 정리
** 분류 목적에 따라 다양한 지표를 계산하여 평가하기
- 분류 결과를 전체적으로 보고 싶다면? -> 혼동행렬
- 정답을 얼마나 잘 맞췄는지? -> 정확도
- FP 또는 FN의 중요도가 높다면? -> 정밀도 & 재현율
[5] 실습 (+정확도, 정밀도, 재현율 출력)
{1} import & 데이터 준비
* 내장된 함수 load_breast_cancer 사용
- X는 feature 데이터로 30개의 환자 데이터가 들어가 있으며, Y는 label 데이터로 0은 음성(악성) & 1은 양성(정상)을 뜻한다
* train_test_split를 사용하여 훈련용 데이터와 학습용 데이터를 분리한다.
import numpy as np
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn import tree
from sklearn.metrics import confusion_matrix
from sklearn.utils.multiclass import unique_labels
X, Y = load_breast_cancer(return_X_y = True)
X = np.array(X)
Y = np.array(Y)
train_X, test_X, train_Y, test_Y = train_test_split(X, Y, test_size=0.2, random_state = 42)
{2} ML 모델 학습 및 예측 (의사결정나무모델 사용)
* 의사결정나무모델로 ML 모델을 정함 (해당 실습에 한해서) - DecisionTreeClassifier() 사용
* fit함수로 학습 (train data) & predict함수로 예측 (test data)
DTmodel = DecisionTreeClassifier()
DTmodel.fit(train_X, train_Y)
y_pred = DTmodel.predict(test_X)
{3} confusion matrix 계산
* 혼동행렬은 결과, 즉 클래스 데이터인 Y를 가지고 계산하기에 Y에 관해 예측한 값인 y_pred와 실제 Y값인 test_Y값을 입력한다.
- 즉, test data에 관해서 표현한다.
cm = confusion_matrix(test_Y, y_pred)
{4} confusion matrix 시각화 - heatmap 사용
fig = plt.figure(figsize=(5,5))
ax = sns.heatmap(cm, annot=True)
ax.set(title='Confusion Matrix',
ylabel='True label',
xlabel='Predicted label')
fig.savefig("decistion_tree.png")
{5} 정확도, 정밀도, 재현율 구하기
* 정확도 구하기 (총 두 가지 방법)
- DTmodel의 내장된 score함수를 사용 (실제 X & Y data 인자로 집어넣기)
- accuracy_score 자체 함수 사용 (실제 Y data & ML모델을 집어넣고 산출한 예측값 인자)
- train data에 대한 정확도, test data에 대한 정확도 각각 구할 수 있음
- (중요) Dtmodel.score & accuracy_score 함수 결괏값은 동일
DTmodel.score(train_X, train_Y)
# or
accuracy_score(Y_true, Y_pred)
* 정밀도, 재현율 계산하기
- 정밀도는 precision_score, 재현율은 recall_score 함수 사용
precision_score(train_Y, y_pred_train)
recall_score(train_Y, y_pred_train)
- 출처 - 2021 NIPA/AI 기본/응용 교육과정
'Artificial Intelligence > Machine Learning' 카테고리의 다른 글
지도학습(분류) - 의사결정나무 (0) | 2021.12.03 |
---|
댓글