728x90
scikit-learn에서는 matrix 계산을 위해 f1-score를 제공한다.
from sklearn import metrics
f1_score = metrics.f1_score(targets, pred, average='')
Sklearn 문서에 의하면 각 정의는 다음과 같다.
- macro average - averaging the unweighted mean per label( label별 산술 평균값)
- 모든 F1를 평균 낸 것
- weighted average - averaging the support-weighted mean per label (label 별 샘플 수의 비중 가중 평균값)
- label의 개수에 따라 가중치를 부여한 것
- micro average - averaging the total true positives, false negatives and false positives ( TP, FN, FP 평균값 다중 레이블 분류에만 해당)
- label 구별 없이 TP, FP, FN의 통합으로 f1을 매긴 것
모든 라벨이 중요하다면 macro, 샘플이 많은 라벨이 중요하다면 Weighted, 라벨 구분 없이 전체적 성능이 중요하다면 micro를 사용하면 된다.
TP = 해당 label을 label이라고 바르게 예측한 것 (True Positive)
FP = 해당 label이 아닌 것을 label로 예측한 것 (False Positive) / label 0의 FP를 구할 때, 0으로 예측했으나(positive), 틀림(False)
FN = 해당 label을 label이 아닌 것으로 예측한 것(False Negative) / label 0의 FN를 구할 때, 0으로 예측해야 하는데 (Negative) 0으로 예측 안 함(False)
(Positive, Negative를 해당 label로 하여 이해하는 것이 잘 외워짐 )
from sklearn.metrics import classification_report
from sklearn import metrics
y_true = [0, 1, 2, 2, 2]
y_pred = [0, 0, 2, 2, 1]
target_names = ['class 0', 'class 1', 'class 2']
print(classification_report(y_true, y_pred, target_names=target_names))
micro_f1 = metrics.f1_score(y_pred, y_true, average='micro')
print(f"F1 Score (Micro) : {micro_f1}")
https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html
728x90
'Machine Learning > 이론' 카테고리의 다른 글
배깅 Bagging (0) | 2023.11.14 |
---|---|
[통계] ELBO(Evidence of Lower Bound) (0) | 2023.06.19 |
[통계] 엔트로피 Entropy, 크로스 엔트로피 Cross Entropy, KL divergence (0) | 2023.06.14 |
[ML] 인공지능 기초, 개요 (0) | 2023.04.12 |
[미분] 미분 기초와 모델 학습에 쓰이는 미분 (1) | 2023.03.20 |