[python/머신러닝] scikit-learn의 분류 성능평가 (sklearn.metrics)
sklearn.metrics 메소드를 살펴보자
1. confusion matrix 형태의 데이터를 관리한다.
: 클래스 분류 결과를 실제(정답) 클래스와 예측 클래스를 축으로 가진 형태
sklearn.metrics.confusion_matrix(y_true, y_pred, *, labels=None, sample_weight=None, normalize=None)
실제 클래스 | 예측 클래스 | |
TP ( True Positive ) | T | T |
TN ( True Negative ) | F | F |
FP ( False Positive ) | F | T |
FN ( False Negative ) | T | F |
-- case 1 ( 예측 : 행 / 실제 : 열 )
0 : Negative / 1 : Positive
0 | 1 | |
0 | TN | FP |
1 | FN | TP |
-> 예측 0, 실제 0 : 예측을 0으로 하고 실제도 0으로 맞음 ( True Negative )
예측 0, 실제 1 : 예측을 0으로 했으나 실제는 1 틀림 ( Fasle Negative )
예측 1, 실제 0 : 예측을 1으로 했으나 실제는 0 틀림 ( False Positive )
예측 1, 실제 1 : 예측을 1로 하고 실제로 1이 맞음 ( True Positive )
실제와 예측 값에 따라 앞(T/F) 결정, 예측(행)에 따라서 뒤(N/P)가 결정
-- case 2
0 : Negative / 1 : Positive / labels = [ 0, 1, 2 ]
0 | 1 | 2 | |
0 | TN | FP | FP |
1 | FN | TP | TP |
2 | FN | TP | TP |
2. 평가 점수
2-1. accuracy_score( ) : 정답률 ( =정확도 )
- 실제 데이터 중 맞게 예측한 데이터의 비율을 뜻한다.
2-2. presicion_score( ) : 적합율 ( PPV : Positive Predicitive value )
- positive에 속한다고 출력한 샘플 중 실제로 positive 클래스에 속하는 샘플 수의 비율을 말한다.
FP( False Positive : 예측은 positive로 했으나 실제는 negative인 경우)가 커지면 적합율은 작아진다.
2-3. recall_score( ) : 재현율
- 실제 positive 클래스에 속한 표본 중에 positive 클래스에 속한다고 출력한 표본의 수의 비율을 뜻한다.
FN( False Negative : negative로 예측했으나 실제가 positive인 경우)이 커지면 재현율은 작아진다.
from sklearn.metrics import *
y_true = [ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1 ]
y_pred = [ 0, 1, 1, 1, 1, 0, 0, 0, 1, 1 ]
cm =confusion_matrix(y_true, y_pred)
print(cm)
acc = accuracy_score(y_true, y_pred)
print('accuracy_score : ',acc)
pre = precision_score(y_true, y_pred)
print('precision_score : ', pre)
recall = recall_score(y_true, y_pred)
print('recall_score: ', recall)
< 출력 결과 >
[[1 4] # 00(TN) 1개, 01(FP) 4개,
[3 2]] # 10(FN) 3개, 11(TP) 2개
accuracy_score : 0.3 # 3 ( 1 +2 ) / 10 ( 1 + 4 + 3 + 2 )
precision_score : 0.3333333333333333 # 2 / 6 ( 4+2 )
recall_score: 0.4 # 2 / 5 (2 + 3)
2-4. f1_score( ) : f1 측정(measure) 값
2-5 : Classification_report( )
- 각각의 클래스를 positive 클래스로 보았을 때의 적합율, 재현율, F1점수를 각각 구하고 그 평균값으로 전체 모형의 성능을 평가한다.
from sklearn.metrics import *
y_true_m = [ 0, 0, 0, 1, 1, 1, 2, 2, 2 ]
y_pred_m = [ 0, 1, 1, 1, 1, 2, 2, 2, 2 ]
print(confusion_matrix(y_true_m, y_pred_m),'\n')
print('average=None : ', precision_score(y_true_m, y_pred_m, average=None))
print('average=\'macro\' : ', precision_score(y_true_m, y_pred_m, average='macro'))
print('average=\'micro\' : ', precision_score(y_true_m, y_pred_m, average='micro'))
print('average=\'weighted\' : ', precision_score(y_true_m, y_pred_m, average='weighted'))
print('\n')
print(classification_report(y_true_m, y_pred_m))
< 출력 결과 >