#title 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의 대각선(↘)이 많으면 많을수록 좋은거다.