분류
성능 측정
- 정확도(Accuracy): 정확한 예측을 한 비율
- 불균형한 데이터셋을 다룰 때 객관적이지 않음
- 데이터셋에서 라벨이 A인 데이터가 90%, 라벨이 B인 데이터가 10%일 때, 모두 그냥 A로만 예측해도 정확도는 90%가 나옴
- 오차 행렬(Confusion Matrix)
- 오차 행렬의 행은 실제 클래스, 열은 예측한 클래스 의미
-
| | 예측 | 예측 |
---|
| | 음성 | 양성 |
실제 | 음성 | True Negative | False Positive |
실제 | 양성 | False Negative | True Positive |
- True Negative와 True Positive가 많아야 모델이 좋은 성능 지니고 있는 것
- 정밀도(Precision)
- TP+FPTP
- 양성으로 예측한 것 중 정확하게 예측한 비율
- 양성으로 잘못 예측하면 안되는 상황에 사용
- 재현율(Recall)
- TP+FNTP
- 실제로 양성인 것들 중 정확하게 예측한 양성의 비율
- 양성인 것을 예측하지 못하면 안되는 상황에 사용
- 민감도(Sensitivity), TPR(True Positive Rate)이라고도 부름
- Precision과 Recall은 Trade-off 관계!!
- 결정 경계(decision threshold)에 따라서 precision이 증가하면 recall이 감소, recall이 증가하면 precision이 감소
- F1 Score
- F1=recall1+precision12=2recall+precisionrecall⋅precision=TP+2FN+FPTP
- recall과 precision의 조화평균
- recall과 precision을 모두 반영한 지표
- PR Curve
- x축이 재현율, y축이 정밀도인 곡선
- 양성 class가 드물거나 거짓 음성보다 거짓 양성이 더 중요할 때 사용
- ROC Curve
- x축이 FPR, y축이 TPR로 이루어진 곡선
- x축이 1-특이도, y축이 재현율로 이루어진 곡선
- 특이도: TNR=FP+TNTN
- 여기서도 trade-off 관계가 존재
- 그래프 아래의 면적을 통해 성능 측정
from sklearn.model_selection import cross_val_score, cross_val_predict
sgd_clf.decision_function([X])
cross_val_score(sgd_clf, X_train, y_train, cv=3, method="decision_function")
다중 분류
- 두 개 이상의 클래스를 분류하는 것
- 로지스틱 회귀나 SVM은 이진 분류만 가능
- 이진 분류기 여러 개 사용해 분류할 수는 있음: OvO 전략(one-versus-one)
- 각 분류기의 결정 점수 중 가장 높은 것을 선택하는 전략: OvR 전략(one-versus-the-rest, one-versus-all; OvA)
- SVM 같은 일부 알고리즘은 데이터셋의 크기에 민감해 작은 데이터셋에서 많은 분류기를 훈련시키는 OvO 선호
from sklearn.multiclass import OneVsRestClassifier, OneVsOneClassifier
ovr_clf = OneVsRestClassifier(SVC())
ovr_clf.fit(X_train, y_train)
ovr_clf.predict(X_test)
에러 분석
- 모델 학습 후, confusion matrix를 통해 분석
- 이때 절대 수치만 봐서는 분석이 쉽지 않다.
- 비율을 통해 알아보면 분석이 쉽다.
- 잘 분류하지 못하는 class를 잘 분류할 수 있도록 보완
다중 라벨 분류
- 여러 개의 이진 label을 출력하는 분류 시스템
- ex) [앨리스, 밥, 찰리] -> [1, 0, 1]
- 평가 지표를 모든 라벨의 가중치가 같다고 할 수 있다.
- 하지만 각 클래스의 지지도를 가중치로 줄 수 있다.
f1_score(target, pred, average='macro')
f1_score(target, pred, average='weighted')
f1_score(target, pred, average='micro')
다중 출력 분류
- 한 라벨이 다중 클래스가 될 수 있도록 일반화
- 값을 두 개 이상 가질 수 있다.
- ex) 잡음이 있는 사진을 입력 받아 깨끗한 이미지를 출력
참고
Hands-on Machine Learning with Scikit-Learn, Keras & Tensorflow 2 - 오렐리앙 제롱