본문 바로가기

AI/머신러닝

Ch3. 분류 (3.1~3.4)

반응형

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를 사용한다.

반응형