데이터분석

53. Classification 모델링

장수우 2024. 2. 9. 14:59
학습 주제
  • Classification 모델링이란?
  • Classification 모델 종류
  • Classification 모델 성능 평가
  • scikit-learn 사용법 학습
  • Classification 모델 실습
주요 학습 내용
  • Classification 모델링 정의
    • 분류 모델은 데이터를 다양한 클래스로 분류하는데 사용
      ex) 이메일 스팸 감지, 질병 진단, 이미지 인식 등
  • Classification 모델 종류
    • 이진 분류 (Binary Classification)
    • 다중 클래스 분류 (Multiclass Classification)
    • 다중 레이블 분류 (Multilabel Classification)
  • Classification 알고리즘 종류
    • Logistic Regression
      - 이진 분류 문제에 자주 사용
    • Decision Tree
      - 직관적이고 시각화 하기 쉽다.
    • Random Forests
    • Support Vector Machines
      - 복잡한 분류 문제에 효과적
    • Deep Learning
      - 고급 분류 문제, 이미지 및 음성 인식에 사용
  • Classification 모델 성능 평가
    • Confusion Matrix
      - Precision = TP / (TP + FP) : ex) spam으로 예측된 리뷰 중 얼마나 실제로 spam인가 ?
      - Recall = TP / (TP + FN) : ex) 실제 spam중의 얼마나 spam으로 예측되었나?
      - Accuracy : (TP + TN) / (TP + TN + FP + FN)
실제 / 예측 Positive 예측 Negative 예측
Positive 실제 True Positive (TP) False Negative(FN)
Negative 실제 False Positive (FP) True Negative(TN)
  • True Positives & False Positives
    • 스팸리뷰 classification의 경우
      - True Positive : 스팸리뷰를 스팸리뷰라 판정
      TPR : TP / (TP + FN)
      - False Positive : 정상리뷰를 스팸리뷰가 판정하는 경우
      FPR : FP / (FP + TN)
    • 모든 리뷰를 스팸이라고 판정하면?
      - TPR은 100% 이지만 FPR 도 100%
    • 모든 리뷰를 정상이라고 판정하면?
      - FPR 은 0 %가 되지만 TPR도 0 %
    • Binary Classifier는 확률을 리턴해준다.
      - 어떤 threshold를 사용할지 결정하는데 사용하는 것이 ROC커브와 AUC
  • ROC 커브
    • ROC : Receiver Operating Characteristic
      - Binary classifier의 정확도를 보기위한 용도로 사용한다.
    • True Positive Rate를 Y축, False Positive Rate를 X축으로 그려진 그래프
      - TPR : 스팸 판정 시 맞을 확률, FPR : 스팸이 아닌 것들을 스팸 판정하는 확률
      - 이 그래프를 통해 TPR(높)과 FPR(낮) 을 최적의 위치에서 조정한다.
      ROC 커브의 밑면적을 계산하면 바로 AUC가 나온다.
  • AUC(Area under te Curve)
    • 0부터 1사이의 값을 리턴한다.
      - 1에 가까우면 ML 모델이 굉장히 정확함을 의미
      - 0.5는 랜덤 추정에 가까움을의미
      - 0에 가까우면 데이터에  뭔가 문제가 있다.
    • AUC 값을 보고 binary classification의 경우에는 threshold를 결정한다.

  • scikit-learn 학습
    • 큰 흐름 (Hold Out 사용 시)
      1. 먼저 머신러닝 알고리즘과 모델 성과 지표 결정
      2. 데이터셋 로딩
      3. 데이터셋을 훈련 데이터와 데스트 데이터로 분리
      4. 훈련 데이터 전처리
      5. 훈련 데이터로 모델 빌딩
      6. 테스트 데이터 전처리
      7. 레이블 정보 제외 테스트 데이터를 모델에 입력으로 지정
      8. 위 결과물과 정답 레이블 비교하여 성과계산
  • 피처 추출
    • 피처 값들을 모델 훈련에 적합한 형태로 바꾸는 것을 지칭한다.
    • Feature extraction
      - Loading features from dicts
      - Feature hashing 
      - Text feature extraction
      - Image feature extraction
    • Preprocessing data
      - 숫자 필드 값 범위 표준화
      - 가능한 값의 범위를 특정 범위(0~1)로 변환해야한다.
      - Feature Scaling 혹은 정규화 라고 한다.

    • Imputation of missing values
      - 비어있는 필드들의 값을 어떻게 채울 것인가?
    • 카테고리를 숫자로 변환
      ex ) Red, Blue, Orange, White, Black => 1, 2, 3,  4, 5
    • Encoder 들간의 차이점
      - OneHotEncoder : 서로 관계 없는 카테고리들을 인코딩
      - LabelEncoder : 레이블 필드를 인코딩하는 경우
      - OrdinalEncoder : 순서가 있는 카테고리들을 인코딩 하는 경우
  • 피처 변환
    • 숫자 필드 값의 범위 (0~1)로 변환
      - Feature Scaling 혹은 Normalization이라 부른다.
    • sklearn.preprocessing 모듈 아래 스케일러 존재
      - StandardScaler  : 각 값에서 평균을 빼고 이를 표준편차로 나눈다. 값의 분포를 정규분포를 따르게 변환
      - MinMaxScaler : 모든 값을 0~1 사이로 스케일, 각 값에서 최소값을 빼고 (최대값 - 최소값) 으로 나눈다.
      - RobustScaler
      - MaxAbsScaler
    • sklearn.preprocessing 모듈 아래 두 개의 Imputer 존재
      - Simplelmputer : 간단한 통계(평균, 중앙값, 최다 빈도 또는 상수)를 지정하여 누락된 값을 대체
      - IterativeImputer : 결측값이 있는 각 피처를 다른 피처들의 함수로 지정
  • 모델 데스트
    • Hold out 테스트 : train_test_split
    • Cross Validation (X-Fold) 테스트 : cross_validate
      from sklearn.model_selection import train_test_split
      from sklearn.model_selection import cross_validate​
    • 파이프 라인 사용 해보기
      from sklearn.datasets import make_classification
      from sklearn.linear_model import LogisticRegression
      from sklearn.model_selection import train_test_split
      from sklearn.pipeline import make_pipeline
      from sklearn.preprocessing import StandardScaler
      
      X, y = make_classification(random_state=42)
      X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
      
      pipe = make_pipeline(StandardScaler(), LogisticRegression())
      
      pipe.fit(X_train, y_train)
      pipe.score(X_test, y_test)​
    • Classifiaction 리포트 생성
      from sklearn.metrics import classification_report
      classificationReport = classification_report(expected, predicted)
      
      # recall = 정답값, f1-score = 예측값​
  • 이후 타이타닉 파일, 당뇨병 여부 예측 문제를 가지고 머신러닝 실습을 진행하겠습니다.
공부하면서 어려웠던 점
  • -
반응형