3.1 MNIST
■ MNIST
- 숫자를 손으로 적은 이미지 데이터 셋
- 해당 이미지를 학습해서 각 이미지가 어떤 숫자를 적은 이미지인지 분류한다.
3.2 이진 분류기 훈련
■ 이진 분류기, classifier
- True or False 분류
■ 확률적 경사 하강법, Stochastic Gradient Descent (SGD)
- scikit-learn SGDClassifier
- 매우 큰 데이터셋을 효율적으로 처라
- SGD가 한번에 하나씩 훈련 샘플을 독립적으로 처리 -> 온라인 학습에 잘 들어맞는다.
3.3 성능 측정
3.3.1 교차 검증을 사용한 정확도 측정
- 교차검증의 경우 불균형한 데이터 셋을 다루는 등의 경우에 분류기의 성능 측정 지표로 적합하지 않다.
3.3.2 오차 행렬
■ 오차 행렬, confusion matrix
- 클래스 A의 샘플이 클래스 B로 분류된 횟수를 행렬의 형태로 나타낸 것
- sklearn.model_selection.cross_val_predict(): 각 테스트 폴드에서 얻은 예측을 반환한다.
- 오차 행렬의 행은 실제 클래스, 열은 예측한 클래스를 나타낸다.
- 오차 행렬 요소들
• 음성 클래스, negative class
• 양성 클래스, positive class
• 진짜 양성, true positive (TP)
• 가짜 양성, false positive (FP)
• 진짜 음성, true negative (TN)
• 가짜 음성, false negative (FN)
- 정밀도, precision
• 양성 예측의 정확도
• 정밀도 = TP / (TP + FP)
- 재현율, recall (민감도, sensitivity - 진짜 양성 비율, true positive rate, TPR)
• 분류기가 정확하게 감지한 양성 샘플의 비율
• 재현율 = TP / (TP + FN)
3.3.3 정밀도와 재현율
■ F1 점수, F1 score
- 정밀도와 재현율의 조화 평균 (harmonic mean)
- F1 = TP / (TP + (FN + TP) / 2)
- sklearn.metrics.f1_score()
- 정밀도와 재현율은 경우에 따라서 중요도가 달라진다. -> 어떤 경우에 적용할 것인가
3.3.4 정밀도/재현율 트레이드오프
■ SGDClassifier의 결정함수, decision function
- 샘플의 점수를 임곗값과 비교하여 양성 클래스, 음성 클래스 분류한다.
- 임곗값에 따라서 정확도 (정밀도, 재현율) 변경
- 정밀도와 재현율의 그래프를 통해서 분석하여 임곗값 설정
- precision_recall_curve(): 가능한 모든 임곗값에 대한 정밀도와 재현율을 계산
3.3.5 ROC 곡선
■ ROC (수신기 조작 특성, Receiver operating characteristic)
- 거짓 양성 비율 (FPR)에 대한 진짜 양성 비율(TPR)의 곡선
- FPR = 1 - TNR (진짜 음성 비율, 특이도)
- 민감도 (재현율)에 대한 '1 - 특이도' 그래프
- sklearn.metrics.roc_curve()
- ROC 그래프의 AUC (곡선 아래의 면적) 측정하여 분류기 비교 가능
3.4 다중 분류
■ 다중 분류기, multiclass classifier
- 다항 분류기, multinomial classifier
- 둘 이상의 클래스를 구별하는 분류기
- 일대다 전략, one-versus-all, one-versus-the-rest (OvA)
• 특정 숫자를 구분하는 이진 분류기를 여러개 훈련시켜서 다수의 숫자들을 구분할 수 있도록 하는 방법
- 일대일 전략, one-versus-one (OvO)
• 각 숫자의 조합마다 이진 분류기를 훈련시키는 것 -> 0~9의 숫자 분류시, 0-1, 0-2, 1,-2 등 모든 조합을 훈련시킨다.
• N개의 클래스를 분류하기 위해서는 N x (N-1) / 2 개의 분류기가 필요하다.
- 서포트 벡터 머신과 같은 일부 훈련 셋의 크기에 민감한 알고리즘은 OvO를 선호하지만, 대부분의 이진 알고리즘은 OvA를 선호한다.
- SGDClassifier에 대해서 decision_function()으로 확인시 전체 클래스에 대한 점수가 계산되고 이 중 가장 값이 큰 클래스를 반환한다.
- scikit-learn에서 OvO, OvA를 강제하기 위해서는 OneVsOneClassifier, OneVsRestClassifier를 사용한다.
'AI > 머신러닝' 카테고리의 다른 글
Ch4. 모델 훈련(4.1~4.2) (0) | 2021.03.10 |
---|---|
Ch3. 분류 (3.5~3.7) (0) | 2021.03.06 |
Ch2. 머신러닝 프로젝트 처음부터 끝까지 (2.4 ~ 2.8) (0) | 2021.03.01 |
Ch2. 머신러닝 프로젝트 처음부터 끝까지 (2.1 ~ 2.3) (0) | 2021.02.28 |
Ch1. 한눈에 보는 머신러닝 (1.3.2~1.5) (0) | 2021.02.24 |