[D&A 운영진 ML 스터디] 2주차 1차시

권유진·2022년 7월 31일
0

D&A 운영진 스터디

목록 보기
14/17

분류

성능 측정

  • 정확도(Accuracy): 정확한 예측을 한 비율
    • 불균형한 데이터셋을 다룰 때 객관적이지 않음
      • 데이터셋에서 라벨이 A인 데이터가 90%, 라벨이 B인 데이터가 10%일 때, 모두 그냥 A로만 예측해도 정확도는 90%가 나옴
  • 오차 행렬(Confusion Matrix)
    • 오차 행렬의 행은 실제 클래스, 열은 예측한 클래스 의미
    • 예측예측
      음성양성
      실제음성True NegativeFalse Positive
      실제양성False NegativeTrue Positive
    • True Negative와 True Positive가 많아야 모델이 좋은 성능 지니고 있는 것
    • 정밀도(Precision)
      • TPTP+FP\cfrac{TP}{TP+FP}
      • 양성으로 예측한 것 중 정확하게 예측한 비율
      • 양성으로 잘못 예측하면 안되는 상황에 사용
    • 재현율(Recall)
      • TPTP+FN\cfrac{TP}{TP+FN}
      • 실제로 양성인 것들 중 정확하게 예측한 양성의 비율
      • 양성인 것을 예측하지 못하면 안되는 상황에 사용
        • ex) 좀도둑 분류, 나쁜 동영상 탐지
      • 민감도(Sensitivity), TPR(True Positive Rate)이라고도 부름
    • Precision과 Recall은 Trade-off 관계!!
      • 결정 경계(decision threshold)에 따라서 precision이 증가하면 recall이 감소, recall이 증가하면 precision이 감소
    • F1 Score
      • F1=21recall+1precision=2recallprecisionrecall+precision=TPTP+FN+FP2F_1 = \cfrac{2}{\cfrac{1}{recall}+\cfrac{1}{precision}} = 2 \cfrac{recall \cdot precision}{recall+precision} = \cfrac{TP}{TP+\cfrac{FN+FP}{2}}
      • recall과 precision의 조화평균
        • recall과 precision을 모두 반영한 지표
    • PR Curve
      • x축이 재현율, y축이 정밀도인 곡선
      • 양성 class가 드물거나 거짓 음성보다 거짓 양성이 더 중요할 때 사용
    • ROC Curve
      • x축이 FPR, y축이 TPR로 이루어진 곡선
      • x축이 1-특이도, y축이 재현율로 이루어진 곡선
        • 특이도: TNR=TNFP+TNTNR = \cfrac{TN}{FP+TN}
      • 여기서도 trade-off 관계가 존재
        • 재현율이 높을수록 FPR이 증가
      • 그래프 아래의 면적을 통해 성능 측정
        • 최대 1, 최소 0.5
from sklearn.model_selection import cross_val_score, cross_val_predict

sgd_clf.decision_function([X]) # threshold를 얻는 함수
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 선호
    • 하지만 대부분의 알고리즘은 OvR 선호
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') # TP, FN, FP의 합계를 계산해 글로벌 평균 계산

다중 출력 분류

  • 한 라벨이 다중 클래스가 될 수 있도록 일반화
    • 값을 두 개 이상 가질 수 있다.
    • ex) 잡음이 있는 사진을 입력 받아 깨끗한 이미지를 출력
      • 각 픽셀: 라벨, 픽셀 값: 0~255

참고
Hands-on Machine Learning with Scikit-Learn, Keras & Tensorflow 2 - 오렐리앙 제롱

profile
데이터사이언스를 공부하는 권유진입니다.

0개의 댓글