카테고리 없음
혼동행렬 Confusion matrix _ 정확도,정밀도,재현율
오기오기
2021. 10. 18. 02:10
728x90
반응형
1. 혼동 행렬(Confusion matrix)
분류 문제에서 모델을 학습시킨 뒤, 모델에서 데이터의 X값을 집어넣어 얻은 예상되는 y값과, 실제 데이터의 y값을 비교하여 정확히 분류 되었는지 성능을 평가하는 메트릭(metric)
- 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
반응형