정밀도(Precision), 재현율(Recall) 계산하기
[실습6]의 결과를 바탕으로 분류 지표 중 정밀도와 재현율을 계산하여 모델의 성능을 판별해보겠습니다.
이번 실습에서는 학습용 데이터와 평가용 데이터의 정밀도와 재현율을 계산하고 그 성능을 비교해보겠습니다.
정밀도와 재현율 계산을 위한 사이킷런 함수/라이브러리
- precision_score(train_Y, y_pred_train)
: 학습용 데이터에 대한 정밀도(precision) 값을 계산합니다. - recall_score(train_Y, y_pred_train)
: 학습용 데이터에 대한 재현율(recall) 값을 계산합니다.
데이터 정보
load_breast_cancer 유방암 유무 판별 데이터를 불러오는 함수
- X(Feature 데이터) : 30개의 환자 데이터
- Y(Label 데이터) : 0 음성(악성), 1 양성(정상)
지시사항
- precision_score를 사용하여 학습용, 평가용 데이터에 대한 정밀도를 계산하여 precision_train, precision_test에 저장해봅시다.
- recall_score를 사용하여학습용, 평가용 데이터에 대한 재현율을 계산하여 recall_train, recall_test에 저장해봅시다.
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
# sklearn에 저장된 데이터를 불러 옵니다.
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)
# DTmodel에 의사결정나무 모델을 초기화 하고 학습합니다
DTmodel = DecisionTreeClassifier()
DTmodel.fit(train_X, train_Y)
# 예측한 값을 저장합니다
y_pred_train = DTmodel.predict(train_X)
y_pred_test = DTmodel.predict(test_X)
# 혼동 행렬을 계산합니다
cm_train = confusion_matrix(train_Y, y_pred_train)
cm_test = confusion_matrix(test_Y, y_pred_test)
print('train_X Confusion Matrix : \n {}'.format(cm_train))
print('test_X Confusion Matrix : \n {}'.format(cm_test),'\n')
"""
1. 정밀도를 계산합니다.
"""
precision_train = precision_score(train_Y, y_pred_train) # precision_score()를 활용하여 정밀도를 계산합니다.
precision_test = precision_score(test_Y, y_pred_test)
# 정밀도를 출력합니다.
print('train_X Precision: %f' % (precision_train))
print('test_X Precision: %f' % (precision_test),'\n')
"""
2. 재현율을 계산합니다.
"""
recall_train = recall_score(train_Y, y_pred_train) # recall_score()를 활용하여 재현율을 계산합니다.
recall_test = recall_score(test_Y, y_pred_test)
# 재현율을 출력합니다.
print('train_X Recall: %f' % (recall_train))
print('test_X Recall: %f' % (recall_test))
train_X Confusion Matrix :
[[169 0]
[ 0 286]]
test_X Confusion Matrix :
[[40 3]
[ 3 68]]
train_X Precision: 1.000000
test_X Precision: 0.957746
train_X Recall: 1.000000
test_X Recall: 0.957746
[[169 0]
[ 0 286]]
test_X Confusion Matrix :
[[40 3]
[ 3 68]]
train_X Precision: 1.000000
test_X Precision: 0.957746
train_X Recall: 1.000000
test_X Recall: 0.957746