Post

[KT Aivle 3기 AI] 16일차. 머신러닝 (3) 기본알고리즘

KT Aivle School 3기 AI 16일차

  • 강사 : 이장래 강사님
  • 주제 : 기본 알고리즘 Linear Regression, KNN, Decision Tree, Logistic Regression, SVM
  • 내용 :
    • Linear Regression, KNN, Decision Tree, Logistic Regression, SVM 설명 및 실습

기본 알고리즘

Linear Regression

  • 단순 회귀 : x 값 하나만으로 y값을 설명할 수 있는 경우
  • 다중 회귀 : y 값을 서령하기 위해서는 여러 개의 x 값이 필요한 경우
  • 회귀 계수 : model.coef_
  • 편향 : model.intercept_
  • 선형 회귀 실습 코드

K-Nearest Neighbor

  • k 최근접 이웃
  • 회귀와 분류에 사용되는 매우 간단한 지도학습 알고리즘
  • 다른 알고리즘에 비해 이해하기 쉽지만, 연산 속도가 느림
  • 적절한 k를 찾는 것이 중요 (default: n_neighbors=5)
  • k 값이 커질 수록 모델이 단순해진다
  • KNN 실습코드 airquality
  • KNN 실습코드 diabetes

유클리드 거리, 맨하튼 거리

  • 유클리드 거리 : 피타고라스 정리와 동일
  • 맨하튼 거리 : 수직, 수평 방향으로만 움직임

→ 항상 유클리드거리 ≤ 맨허튼 거리

정규화(Scaling)

  • 거리와 관련된 알고리즘은 정규화가 필수적!!
    • 축 별로 거리가 달라서…
  • 정규화는 항상 학습 데이터로 진행!!
    • 미래의 데이터가 현재의 데이터에 영향을 주면 안된다.

Normalization

$\large X_{norm} = \frac{x - x_{min}}{x_{max} - x_{min}}$

Standardization

$\large X_z = \frac{x-x_{mean}}{std}$

공식을 직접 사용하거나, sklearn이 제공하는 함수 사용

1
2
3
4
5
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(x_train)
x_train = scaler.transform(x_train)
x_test = scaler.transform(x_test)

Decision Tree

  • 결정 트리
  • 분석 과정이 직관적이며, 이해와 설명하기가 쉬움
  • 스무고개처럼 의미 있는 질문을 먼저 하는 것이 중요
    • 정보 이득이 높은 방향으로!!
  • 과적합으로 모델 성능이 떨어지기 쉽다 → 트리 크기를 제한하는 튜닝이 필요
  • Decision Tree 실습코드 titanic

불순도 (Impurity)

  • 순도의 반대말
  • 불순도를 수치화 할 수 있는 지표
    • 지니 불순도(Gini Impurity)
    • 엔트로피(Entropy)

지니 불순도 (Gini Impurity)

  • $\large Gini = 1 - \sum_{i=1}^c (p_i)^2$

  • $1-\text{양성 클래스 비율}^2 + \text{음성 클래스 비율}^2$
  • 지니 불순도의 값 : 0 ~ 0.5 (완벽하게 분류되면 : 0, 완벽하게 섞이면 : 0.5)
  • 지니 불순도가 낮은 속성으로 의사결정 트리 노드 결정
  • 트리를 내려가면서 불순도가 낮아지면 좋다!

엔트로피(Entropy)

  • $\large Entropy = -\sum_{i=1}^m p_i\log_2 p_i$

  • 엔트로피
    • 음성클래스비율 $\times \log_2$(음성클래스비율)
    • 양성클래스비율 $\times \log_2$(양성클래스비율)
  • 엔트로피 값 : 0 ~ 1 (완벽하게 분류되면 : 0, 완벽하게 섞이면 : 1)

정보 이득 (Information Gain)

  • $\large Gain(T, X) = Entropy(T) - Entropy(T, X)$
  • 정보 이득이 크다 = 어떤 속성으로 분할할 때 불순도가 줄어든다.
  • 모든 속성에 대해 분할한 후 정보 이득 계산
  • 정보 이득이 가장 큰 속성부터 분할

가지치기 (튜닝)

  • 가지치기를 하지 않으면 Overfitting 발생 가능성 매우 높음
  • 여러 하이퍼파라미터 값을 조정해 가지치기 할 수 있음
    • max_depth, min_samples_leaf, min_samples_split, max_feature, max_leaf_node 등
  • 가장 적절한 하이퍼파라미터 값을 찾도록 노력해야 함

결정트리 시각화

  • 여러 시각화 방법 중 Graphvis 패키지 사용
  • 사전에 Graphvis 패키지 설치 및 운영체제 환경 설정이 진행 되어야 한다.
  • 코드는 실습 코드 확인

Logistic Regression

  • 학습을 통해 선형 회귀선을 찾는 것이 아니라, 로지스틱 함수에 의해 반환되는 값을 확률로 간주하여 그 확률에 따라 분류를 결정함
  • Logistic Regression 실습코드(iris)

로지스틱 함수

$\large p = \frac{1}{1 + e^{-f(x)}}$

  • 시그모이드(Sigmoid) 함수라고도 부름
  • 확률 값 p는 선형 판별식 값이 커지면 1, 작아지면 0에 가까운 값이 됨
  • $(-\infty, \infty)$ 범위를 갖는 선형 판별식 결과로 $(0, 1)$ 범위의 확률 값을 얻게 됨
  • 확률 값 0.5를 기준으로 이진 분류를 수행할 수 있게 됨

    x 데이터가 주어졌을 때 확률을 예측하는 로지스틱 회귀분석은 학습 데이터를 잘 설명하는 선형 판별식의 기울기(a)와 절편(b)를 찾는 문제

SVM (Support Vector Machine)

  • 분류를 위한 기준선, 즉 결정 경계선(Decision Boundary)을 찾는 알고리즘
  • SVM 성능을 높이기 위해 정규화 작업이 필요
  • 분류 문제와 회귀 문제 모두에 사용 사능(SVC, SVR)
  • 결정 경계 (Decision Boundary) : 서로 다른 분륫값을 결정하는 경계
  • 서포트 벡터(Support Vector) : 결정 경계선과 가장 가까운 데이터 포인트
  • 마진(Margin) :
    • 서포트 벡터와 결정 경계 사이의 거리
    • 마진을 최대로 하는 결정 경계를 찾는 것이 SVM의 목표
    • 마진이 클수록 새로운 데이터에 대해 안정적으로 분류할 가능성이 높음
  • SVM 이해 실습코드
  • SVM 실습코드(Admission)

svm

비용 (C)

  • 약간의 오류를 허용하기 위해 비용(C)이라는 변수를 사용
  • 비용을 낮게 잡으면 (이상치들이 있을 가능성을 크게 봄)
    • 마진을 높이고 에러를 증가시키는 결정 경계선을 만듦 (Soft Margin) → 과소적합 위험
  • 비용을 높게 잡으면 (이상치들이 있을 가능성을 작게 봄)
    • 마진은 낮추고 에러를 감소시키는 결정 경계선을 만듦 (Hard Margin) → 과대적합 위험
  • SVM에서 적절한 비용 값을 찾는 과정이 매우 중요

커널트릭

  • 직선으로 분류할 수 없는 경우 커널 트릭을 통해 분류
  • 저차원 데이터를 고차원 데이터로 옮긴 것과 같은 효과를 줘서 결정 경계선을 찾음
  • rbf 커널(기본값), Poly, Linear
  • rbf와 poly의 경우 gamma 설정이 필요

감마 (gamma)

  • 모델이 생성하는 경계가 복잡해지는 정도
  • 값이 클 수록 경계가 복잡해지고, 값이 낮을 수록 경계가 단순해짐
This post is licensed under CC BY 4.0 by the author.

[KT Aivle 3기 AI] 15일차. 머신러닝 (2) 모델 성능 평가 방법

[KT Aivle 3기 AI] 17일차. 머신러닝 (4) Hyperparameter 튜닝