[KT AIVLE 4기] 머신러닝2

리니·2023년 10월 30일
4

KT AIVLE

목록 보기
7/22
post-thumbnail
post-custom-banner

📌 Linear Regression

  • 최적의 회귀모델
    • 최선의 회귀모델은 전체 데이터의 오차 합이 최소가 되는 모델을 의미
    • 결국 오차 합이 최소가 되는 가중치 w1w_1와 편향w0w_0을 찾는 것을 의미

단순 회귀(Simple Regression)

  • 독립변수 하나가 종속변수에 영향을 미치는 선형 회귀

  • x값 하나만으로 y값을 설명할 수 있는 경우

  • 회귀식: y^=w0+w1x1\hat{y} = w_0 + w_1x_1

  • 독립변수의 최선의 가중치와(w_1)와 편향(w_0)을 찾음

  • 모델 학습 후 회귀계수 확인 가능
    * coef_: 회귀계수(=가중치)

    • intercept_: 편향

다중 회귀(Multiple Regression)

  • 여러 독립변수가 종속변수에 영향을 미치는 선형 회귀
  • 𝑦 값을 설명하기 위해서는 여러 개의 𝑥 값이 필요한 경우
  • 회귀식: y^=w0+w1x1++wnxn\hat{y} = w_0 + w_1x_1 + \cdots + w_nx_n
  • 각 독립변수의 최선의 가중치와(w1,w2,)(w_1, w_2, \cdots)와 편향(w0)(w_0)을 찾음
  • 회귀계수가 여럿이므로 독립변수 이름과 같이 확인하는 것을 권고

모델 구현

  • 회귀 모델에만 사용
  • 알고리즘 함수: sklearn.linear_model.LinearRegression
  • 성능평가 함수: sklearn.metrics.mean_absolute_error, sklearn.metrics.r2_score 등

📌 K-Nearest Neighbor

  • k 근접 이웃(가장 가까운 이웃 k개)
  • 학습용 데이터에서 k개의 최근접 이웃의 값을 찾아 그 값들로 새로운 값을 예측하는 알고리즘
  • 회귀와 분류에 사용되는 간단한 지도학습 알고리즘
  • 다른 알고리즘에 비해 이해는 쉬우나, 연산속도가 느림

Scaling

필요성: KNN은 거리 기반 알고리즘이다. k개의 가장 가까운 이웃을 선택한 다음 이러한 이웃을 기반으로 새 관측값에 대한 클래스(분류 문제의 경우)를 할당하거나 값(회귀 문제의 경우)을 예측한다.
이러한 거리 기반 알고리즘은 모두 변수 규모의 영향을 받는다. 알고리즘은 더 높은 크기의 변수 쪽으로 편향되어서는 안된다. 이 문제를 극복하기 위해 모든 변수를 동일한 규모로 축소할 수 있다.

대표적인 스케일링 방법
  • 방법 1: 정규화(Normalization)
    각 변수의 값이 0과 1사이 값이 됨
    Xnorm=xxminxmaxxminX_{norm} = \displaystyle {x - {x_{min}}\over{x_{max} - x_{min}}}
  • 방법 2: 표준화(Standardization)
    각 변수의 평균이 0, 표준편차가 1이 됨
    Xz=xxmeanxstdX_{z} = \displaystyle {x - {x_{mean}}\over{x_{std}}}
  • 평가용 데이터에도 학습용 데이터를 기준으로 스케일링을 수행!
  • sklearn이 제공하는 함수를 사용 가능
      # 함수 불러오기
      from sklearn.preprocessing import MinMaxScaler
      # 정규화
      scaler = MinMaxScaler()
      scaler.fit(x_train)
      x_train = scaler.transform(x_train)
      x_test = scaler.transform(x_test)

회귀모델 구현

  • 알고리즘 함수: sklearn.neighbors.KNeighborsRegressor
  • 성능평가 함수: sklearn.metrics.mean_absolute_error, sklearn.metrics.r2_score 등

분류모델 구현

  • 알고리즘 함수: sklearn.neighbors.KNeighborsClassifier
  • 성능평가 함수: sklearn.metrics.confusion_matrix, sklearn.metrics.classification_report등

📌 Decision Tree

  • 결정 트리, 의사 결정 나무
  • 특정 변수에 대한 의사결정 규칙을 나무 가지가 뻗는 형태로 분류해 나감
  • 분류와 회귀 모두에 사용되는 지도학습 알고리즘
  • 훈련 데이터에 대한 제약 사항이 거의 없는 유연한 모델
    • 과적합으로 모델 성능이 떨어지기 쉬움
    • 트리 깊이를 제한하는(=가지치기) 튜닝이 필요

용어

  • Root Node(뿌리마디): 전체 자료를 갖는 시작하는 마디
  • Terminal Node(끝마디): 자식 마디가 없는 마디(= Leaf Node)
  • Internal Node(중간 마디): 부모 마디와 자식 마디가 모두 있는 마디
  • Branch(가지): 연결되어 있는 2개 이상의 마디 집합
  • Depth(깊이): 뿌리 마디로부터 끝 마디까지 연결된 마디 개수

불순도(Impurity)

  • 순도가 높을수록 분류가 잘 된 것
불순도를 수치화 할 수 있는 지표

지니 불순도

  • 지니불순도=1(양성클래스비2+음성클래스비2)지니 불순도 = 1 - (양성 클래스 비율^2 + 음성 클래스 비율^2)

Gini=1i=1c(pi)2Gini = 1 - \sum_{i=1}^{c} {(pi)^2}

  • 분류 후에 얼마나 잘 분류했는지 평가하는 지표
  • 특징
    • 지니 불순도가 낮을수록 순도가 높음
    • 지니 불순도응 0 ~ 0.5 사이의 값(이진 분류의 경우)
      • 순수하게 분류되면 → 0
      • 완벽하게 섞이면(50:50) → 0.5
    • 지니 불순도가 낮은 속성으로 의사결정 트리 노드 결정

엔트로피(Entropy)

  • 엔트로피=음성클래스비율×log2(음성클래스비율)양성클래스비율×log2(양성클래스비율)엔트로피 = -음성클래스비율 \times \log_2(음성클래스비율) - 양성클래스비율 \times \log_2(양성클래스비율)

Entropy=i=1mpilog2piEntropy = -\sum_{i=1}^m {p_i \log_2 p_i}

  • p_i = 집합 안에서 속성 i의 확률을 나타냄
  • 엔트로피는 0~1 사이의 값
    • 순수하게 분류되면 → 0
    • 완벽하게 섞이면(50:50) → 1

정보 이득(Information Gain)

  • 어떤 속성이 얼마나 많은 정보를 제공하는가
  • 정보 이득 공식

Gain(T,X)=Entropy(T)Entropy(T,X)Gain(T, X) = Entropy(T) - Entropy(T, X)

  • 정보 이득이 크다 = 어떤 속성으로 분할할 때 불순도가 줄어든다
  • 모든 속성에 대해 분할한 후 정보 이득 계산
  • 정보 이득이 가장 큰 속성부터 분할

가지치기

  • 가지치기 하지 않으면 과대적합, 일반화되지 못함

  • 여러 하이퍼파라미터 값을 조정해 가지치기 가능

  • 학습 데이터에 대한 성능은 낮아지나, 평가 데이터에 대한 성능을 높일 수 있음

  • 적절한 하이퍼파라미터 값을 찾도록 노력

  • 주요 하이퍼파라미터

    • max_depth: 트리의 최대 깊이(기본값: None)
    • min_samples_split: 노드를 분할하기 위한 최소한의 샘플 개수(기본값: 2)
    • min_samples_leaf: 리프 노드가 되기 위한 최소한의 샘플 수(기본값: 1)
    • max_feature: 최선의 분할을 위해 고려할 Feature 수(기본값: None)
    • max_leaf_node: 리프 노드 최대 개수

회귀모델 구현

  • 알고리즘 함수: sklearn.tree.DecisionTreeRegressor
  • 성능평가 함수: sklearn.metrics.mean_absolute_error, sklearn.metrics.r2_score 등

분류모델 구현

  • 알고리즘 함수: sklearn.tree.DecisionTreeClassifier
  • 성능평가 함수: sklearn.metrics.confusion_matrix, sklearn.metrics.classification_report등

📌 Logistic Regression

로지스틱 함수

  • 시그모이드(sigmoid) 함수
    p=11=ef(x)p = {1 \over 1 = e^{-f(x)}}

  • 확률 값 𝑝 는 선형 판별식 값이 커지면 1, 작아지면 0에 가까운 값이 됨

  • (-\infin, \infin) 범위를 갖는 선형 판별식 결과로 (0,1)(0, 1) 범위의 확률 값을 얻게 됨

  • 기본적으로 확률 값 0.5를 임계값(Threshold)로 하여 이보다 크면 1, 아니면 0으로 분류

분류모델 구현

  • Logistic Regression 알고리즘은 분류모델에만 사용할 수 있음
  • 알고리즘 함수: sklearn.linear_model.LogisticRegression
  • 성능평가 함수: sklearn.metrics.confusion_matrix, sklearn.metrics.classification_report등

📌 K-Fold Cross Validation

  • 모든 데이터가 평가에 한 번, 학습에 k-1번 사용
  • K개의 분할(Fold)에 대한 성능을 예측 → 평균과 표준편차 계산 → 일반화 성능
  • 단, k는 2 이상이 되어야 함(최소한 한 개씩의 학습용, 검증용 데이터가 필요)
  • 모델 선언 후 cross_val_score(모델, x_train, y_train, 분할 개수) 형태로 사용
  • 기본 분할 개수(cv) 값은 5이며, 필요에 따라 적절히 조절할 수 있음
  • cross_val_score 함수 결과로 얻은 성능들의 평균을 모델의 성능으로 봄

📌 Hyperparameter 튜닝

  • Hyperparameter
  • Random Search, Grid Search

이 부분에 대해선 더 공부가 필요하다. 공부를 하면서 차차 추가해 보도록 하겠다.

profile
😊
post-custom-banner

0개의 댓글