Post List

2025년 6월 12일 목요일

Python - Confusion Matrix


#iris 데이터세트 만들기
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
iris.data
iris.feature_names
iris.target
iris.target_names


iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)
iris_df["target"] = iris.target 
iris_df["target_names"] = iris.target_names[iris.target]
iris_df[:5]


#훈련세트, 테스트세트 나누기
from sklearn.model_selection import train_test_split
train_set, test_set = train_test_split(iris_df, test_size = 0.3)

train_set.shape
test_set.shape


#kNN
import sklearn.neighbors as nn
knn = nn.KNeighborsClassifier(n_neighbors = 1)

#훈련
knn.fit(X=train_set.ix[:, [0,1,2,3]], y=train_set.target)

#테스트
pred = knn.predict(X=test_set.ix[:, [0,1,2,3]])


#성능테스트
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report

#confusion_matrix
#classification_report
c_mat = confusion_matrix(test_set.target.values, pred)
print('\n\nConfusion Matrix\n', c_mat)
print('\n', classification_report(test_set.target.values, pred, target_names=iris.target_names))

결과
print('\n\nConfusion Matrix\n', c_mat)
print('\n', classification_report(test_set.target.values, pred, target_names=iris.target_names))



Confusion Matrix
 [[12  0  0]
 [ 0 21  1]
 [ 0  1 10]]

              precision    recall  f1-score   support

     setosa       1.00      1.00      1.00        12
 versicolor       0.95      0.95      0.95        22
  virginica       0.91      0.91      0.91        11

avg / total       0.96      0.96      0.96        45


  • precision(정확률): 예측과 실제가 얼마나 정확한가?
  • recall(재현율) : 올바르게 분류된 데이터의 비율은?
  • f1-score(F1점수) : 정확률과 재현율의 조화평균 --> 이걸 보면 된다.

뭐...TP(true positive) 등등 뭐 헤깔리는 용어들이 많은데, 다 집어 치우고..
confusion matrix의 대각선(↘)이 많으면 많을수록 좋은거다.



댓글 없음:

댓글 쓰기