카테고리 없음

혼동행렬 Confusion matrix _ 정확도,정밀도,재현율

오기오기 2021. 10. 18. 02:10
728x90
반응형

1. 혼동 행렬(Confusion matrix)

분류 문제에서 모델을 학습시킨 뒤, 모델에서 데이터의 X값을 집어넣어 얻은 예상되는 y값과, 실제 데이터의 y값을 비교하여 정확히 분류 되었는지 성능을 평가하는 메트릭(metric)

출처 : NIPA AI

  • True Positive (TP) : 실제 값이 참이고 예측된 값도 참
  • False Positive (FP) : 실제 값은 거짓, 예측된 값은 참
  • False Negative (FN) : 실제 값은 참, 예측된 값은 거짓
  • True Negative (TN) : 실제 값은 거짓, 예측된 값도 거짓

 

2. 혼동행렬 계산하기

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

https://1percent-a-day.tistory.com/9

 

sklearn을 사용한 의사결정나무_decision tree_전처리,학습,예측

이번에는 sklearn에 있는 load_iris 데이터를 이용하여 의사결정나무 모델을 학습해보겠습니다 우선 필요한 라이브러리를 불러와줍니다. import numpy as np import pandas as pd from matplotlib import pyplot a..

1percent-a-day.tistory.com

저번과 동일하게 전처리,학습하기,예측하기를 실행해줍니다

# sklearn에 저장된 데이터를 불러 옵니다.
X, Y = load_breast_cancer(return_X_y = True)
X = np.array(X)
Y = np.array(Y)

# 데이터 정보를 출력합니다
print('전체 샘플 개수: ',len(X))
print('X의 feature 개수: ',len(X[0]))

# 학습용 평가용 데이터로 분리합니다
train_X, test_X, train_Y, test_Y = train_test_split(X, Y, test_size=0.2, random_state = 42)

# 분리된 평가용 데이터 정보를 출력합니다
print('평가용 샘플 개수: ',len(test_Y))
print('클래스 0인 평가용 샘플 개수: ',len(test_Y)-sum(test_Y))
print('클래스 1인 평가용 샘플 개수: ',sum(test_Y),'\n')

# DTmodel에 의사결정나무 모델을 초기화 하고 학습합니다
DTmodel = DecisionTreeClassifier()
DTmodel.fit(train_X, train_Y)

# test_X을 바탕으로 예측한 값을 저장합니다
y_pred = DTmodel.predict(test_X)

confusion_matrix(y_true, y_pred) : Confusion matrix의 값을 np.ndarray로 반환해줍니다.

confusionmatrix = confusion_matrix(test_Y,y_pred)
print('Confusion Matrix : \n {}'.format(confusionmatrix))

# 혼동 행렬을 출력합니다
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")

3. 정확도/ 정밀도 / 재현율 계산하기

- 정확도 (Accuracy)

DTmodel.score(train_X, train_Y) : train_X 데이터에 대한 정확도(accuracy) 값을 계산

acc_train = DTmodel.score(train_X,train_Y)
acc_test = DTmodel.score(test_X,test_Y)

# 정확도를 출력합니다.
print('train_X Accuracy: %f' % (acc_train))
print('test_X Accuracy: %f' % (acc_test))

- 정밀도 (Precision)

precision_score(train_Y, y_pred_train) : 학습용 데이터에 대한 정밀도(precision) 값을 계산

 

precision_train = precision_score(train_Y, y_pred_train)
precision_test = precision_score(test_Y, y_pred_test)

# 정밀도를 출력합니다.
print('train_X Precision: %f' % (precision_train))
print('test_X Precision: %f' % (precision_test),'\n')

 

- 재현율 (Recall) 

recall_score(train_Y, y_pred_train) : 학습용 데이터에 대한 재현율(recall) 값을 계산

recall_train = recall_score(train_Y, y_pred_train)
recall_test = recall_score(test_Y, y_pred_test)

# 재현율을 출력합니다.
print('train_X Recall: %f' % (recall_train))
print('test_X Recall: %f' % (recall_test))
728x90
반응형