본문 바로가기
인공지능(AI)/머신러닝

[핸즈온 머신러닝] 3장 분류

by hyezzisss 2022. 1. 11.

1. 이진 분류

확률적 경사 하강법

  • 매우 큰 데이터셋을 효율적으로 처리하는 장점을 지님 (한 번에 하나씩 훈련 샘플을 독립적으로 처리하기 때문)
  • 훈련하는데 무작위성을 사용
from sklearn.linear_model import SGDClassifier

sgd_clf = SGDClassifier(random_state=42)
sgd_clf.fit(X_train, y_train)

2. 성능 측정

1) 교차 검증을 사용한 정확도 측정

k-겹 교차검증 : 훈련 세트를 k개의 폴드로 나누고 각 폴드에 대해 예측을 만들고 평가하기 위해 나머지 폴드로 훈련시킨 모델을 사용

from sklearn.model_selection import cross_val_score

cross_val_score(sgd_clf, X_train, y_train, cv=3, scoring="accuracy") # 3개 폴드

불균형한 데이터셋을 다룰 때는 정확도를 분류기의 성능 지표로 선호하지 않는다.

2) 오차 행렬

  • 분류기의 성능을 평가하는 더 좋은 방법
  • 클래스 A의 샘플이 클래스 B로 분류된 횟수를 셈
from sklearn.model_selection import cross_val_predict
from sklearn.metrics import coufnsion_matrix

# cross_val_predict(): 평가 점수를 반환하지 않고 테스트 폴드에서 얻은 예측을 반환
y_train_pred = cross_val_predict(sgd_clf, X_train, y_train, cv=3)
confusion_matrix(y_train, y_train_pred)

3) 정밀도와 재현율

정확도 : 양성 샘플 하나만 예측하면 간단히 완벽한 정밀도를 얻을 수 있지만 다른 모든 양성 샘플을 무시하기 때문에 그리 유용하지 않음 -> 재현율과 같이 사용하는 것이 일반적

재현율 : 분류기가 정확하게 감지한 양성 샘플의 비율로 민감도 또는 진짜 양성 비율이라고도 함

from sklearn.metrics import precision_score, recall_score

precision_score(y_train, y_train_pred)
recall_score(y_train, y_train_pred)

F1 점수 : 정밀도와 재현율의 조화 평균

from sklearn.metrics import f1_score

f1_score(y_train, y_train_pred)

4) 정밀도/재현율 트레이드오프

  • 정밀도를 올리면 재현율이 줄어듦

SGDClassifier 분류기의 경우 결정 함수를 사용하여 각 샘플의 점수를 계산

  • 결정 임계값의 변화에 따라 재현율과 정밀도의 값이 변경됨
  • predict 메서드 대신 decision_function() 메서드를 호출하면 각 샘플의 점수 확인 가능
  • 적절한 임곗값은 cross_val_predict()을 이용해 훈련 세트에 있는 모든 샘플의 점수를 구한 후 precision_recall_curve()를 이용해 가능한 모든 임곗값에 대해 정밀도와 재현율 계산 가능

5) ROC 곡선

  • 정밀도에 대한 재현율 곡선이 아닌 거짓 양성 비율(FPR)에 대한 진짜 양성 비율(TPR)의 곡선
  • FPR : 양성으로 잘못 분류된 음성 샘플의 비율
  • 민감도(재현율)에 대한 1-특이도 그래프
  • roc_curve() 함수를 이용해 여러 임계값에서 TPR과 FPR 계산
  • 곡선 아래의 면적(AUC)을 측정하면 분류기들 비교 가능 -> 사이킷런 roc_auc_score이용

3. 다중 분류

다중 분류기 : SGD 분류기, 랜덤 포레스트 분류기, 나이브 베이즈 분류기 등

이중 분류기 : 로지스틱 회귀, SVM -> 여러 개 사용해 다중 클래스 분류 가능

  • OvR : 특정 숫자를 구분하는 경우 숫자별 이진 분류기 10개를 훈련시키고 분류할 때 각 분류기의 결정 점수 중에서 가장 높은 클래스 선택 -> 대부분의 이중 분류 알고리즘에서 선호
  • OvO : 0과 1 구별, 0과 2 구별 등과 같이 각 숫자의 조합마다 이진 분류기를 훈련 -> 일부 알고리즘의 경우 훈련 세트의 크기에 민감해 작은 훈련 세트에서 많은 분류기를 훈련시키는 것이 빠르므로 사용

4. 다중 레이블 분류

  • 같은 사진에 여러 사람이 등장하는 경우처럼 여러 개의 이진 꼬리표를 출력하는 분류 시스템
  • KneighborsClassifier는 다중 레이블 분류를 지원

 

 

댓글