Networks/Hands-On 머신러닝 정리

Hands-On Machine Learning 정리 - 머신러닝(Chapter 1: 한눈에 보는 머신러닝)

코딩하는 Español되기 2024. 10. 18. 12:00

머신러닝, 딥러닝을 공부하면서 더 확실하게 공부하고 정리하기 위해 책을 정리하면서 다시 해보고자 합니다.

추천받은 Handsp-on Machine Learning (개정 2판)을 공부하면서 중간중간 궁금한 것도 추가하며 정리하고자 합니다.

 


Chap1 목차

1. 머신러닝 시스템의 종류

    - 지도 학습, 비지도 학습, 준지도 학습, 강화 학습
    - 배치 학습, 점진적 학습 
    - 사례 기반 학습, 모델 기반 학습
    - 예제 코드

2. 머신러닝의 주요 도전과제

    - 충분하지 않은 양의 훈련 데이터
    - 대표성 없는 훈련 데이터
    - 낮은 품질 
    - 관련 없는 특성
    - 과대 적합
    - 과소 적합

3. 테스트와 검증

    - 일반화 오차

    - 홀드 아웃 검증


1.머신러닝 시스템의 종류

1-1 사람의 감독하에 훈련을 하는가? 지도, 비지도, 준지도, 강화학습

    1-1-1 지도학습(Supervised Learning) : 알고리즘에 주입하는 훈련 데이터에 레이블(정답)이 포함

        ● 대표적인 학습 : 분류(Classification), 회귀(Regression)

        ● 대표적인 알고리즘

         : k-nearest neighbors, Linear regression, Logistic Regression, SVM, Decision tree/RandomForest, Neural networks

 

    1-1-2 비지도 학습(Unsupervised Learning) : 훈련 데이터에 레이블이 없음

        ● 대표적인 학습 알고리즘

          - 군집(Clustering)

            : k-means, DBSCAN, HCA(계층 군집 분석), 이상치/특이치 탐지, one-class SVM, Isolation Forest

          - 시각화와 차원 축소(Visualization & Dimensionality reduction)

            : PCA, Kernel PCA, LLE(지역적 선형 임베딩), t-SNE

          - 연관 규칙 학습(Association Rule Learning)

            : Apriori, Eclat

 

    1-1-3 준지도 학습(Semisupervised Learning) : 일부만 레이블이 있는 데이터를 학습

        ● 대부분의 준지도 학습 알고리즘은 지도 + 비지도 학습 조합으로 이루어짐

        ● DBN(Deep Belif Network; 심층 신뢰 신경망) : 여러 겹으로 쌓은 RBM(Restricted Boltzmann Machine)에 기반함

 

    1-1-4 강화 학습(Reinforcement Learning)

        : 에이전트(학습하는 시스템)가 환경을 관찰해 행동하고 보상 | 벌점을 받음 -> 정책을 스스로 학습

 

1-2 실시간으로 점진적으로 훈련을 하는가? 온라인 학습, 배치 학습

    1-2-1 배치 학습(Batch Learning) : 가용 데이터를 모두 사용하여 훈련(= 오프라인 학습)

 

    1-2-2 점진적 학습(Incremental Learning;Online Learning) : 미니배치(작은 묶음 단위)로 주입해 시스템 훈련

        : 매 학습 단계가 빠르고 비용이 적게 들어  빠른 변화에 스스로 적응해야 하는 시스템에 적합

          ※ 학습률(변화하는 데이터에 얼마나 빠르게 적응할 것인가)

              if 학습률 高 → 빠르게 적응 But 예전 데이터를 금방 망각

          단점 : 나쁜 데이터 주입 시 시스템 성능이 점진적으로 감소 So, 모니터링이 중요

          ※ 모니터링 e.g. 입력 데이터를 이상치 탐지 알고리즘으로 비정상 데이터를 잡기

 

1-3 훈련 데이터셋에서 패턴을 발견하여 예측 모델을 만드는가? 사례 기반 학습, 모델 기반 학습

    1-3-1 사례 기반 학습(Instance-Based Learning)

     : 훈련 샘플을 기억하여 학습 → 유사도 측정 → 새로운 데이터와 학습 데이터를 비교하여 일반화

 

    1-3-2 모델 기반 학습(Model-Based Learning) : 샘플들의 모델을 만들어 예측에 사용

     e.g. 돈이 사람을 행복하게 만드는가?

      - 데이터셋 : 더 나은 삶의 지표 데이터(OECD) + 1인당 GDP(IMF)

      - 데이터 경향 : 무작위성이 있지만 삶의 만족도는 1인당 GDP가 증가할수록 선형으로 올라감

      - 모델 선택 : 1인당 GDP라는 특성 하나를 가진 삶의 만족도에 대한 선형 모델

                         (= 1인당 GDP의 선형함수로 삶의 만족도를 모델링) 

      - 선형 모델

$$ S = \theta_0 + \theta_1 * G $$

      ※ 모델 파라미터 : $$ \theta_0, \theta_1 $$

      - 모델이 최상의 성능을 내도록 하는 값을 찾기 위해 측정 지표를 설정

      ※ 측정 지표 : 효용함수 | 적합도 함수(모델이 얼마나 좋은가), 비용 함수(모델이 얼마나 나쁜가)

      - 해당 알고리즘이 얻은 최적의 파라미터

$$ \theta_0 = 4.85 $$

$$ \theta_1 = 4.91 * 10^{-5} $$

       - OECD 데이터에 없는 키프로스 사람들의 행복도를 모델에 적용

         키프로스의 1인당 GDP  : 22,587 $

$$ 4.85 + 22,587 * 4.91 * 10^{-5} = 5.96 $$

 

[사이킷런을 이용한 선형 모델의 훈련과 실행 코드]

더보기
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import sklearn.linear_model

# 데이터 적재
oecd_bli = pd.read_csv(datapath + "oecd_bli_2015.csv", thousands=',')
gdp_per_capita = pd.read_csv(datapath + "gdp_per_capita.csv",thousands=',',delimiter='\t',
                             encoding='latin1', na_values="n/a")

# 데이터 준비
country_stats = prepare_country_stats(oecd_bli, gdp_per_capita)
X = np.c_[country_stats["GDP per capita"]]
y = np.c_[country_stats["Life satisfaction"]]

# 데이터 시각화
country_stats.plot(kind='scatter', x="GDP per capita", y='Life satisfaction')
plt.show()

# 선형 모델 선택
model = sklearn.linear_model.LinearRegression()

# 모델 훈련
model.fit(X, y)

# 키프로스에 대한 예측
X_new = [[22587]]  # 키프로스 1인당 GDP
print(model.predict(X_new)) # 출력 [[ 5.96242338]]

2. 머신러닝의 주요 도전 과제

2-1 충분하지 않은 양의 훈련 데이터

2-2 대표성 없는 훈련 데이터

    : 앞의 예제에서 선형 모델을 훈련하기 위해 사용한 나라의 집합에서는 일부 나라가 빠져있기에 대표성이 부족

      누락된 나라의 데이터를 추가하여 훈련하면 이전에 점선이었던 선형 모델이 실선으로 된 모델을 얻음

      (= 모델이 크게 변경되고 간단한 선형 모델은 잘 작동하지 않는다.)

      샘플이 작으면 샘플링 잡음(= 우연에 의한 대표성 없는 데이터)이 생기고,
      매우 큰 샘플의 경우에도 표본 추출 방법이 잘못된다면 샘플링 편향(= 대표성을 띄지 못함)이 생길 수 있음

      e.g. 샘플링 편향의 대표적인 예 : The Literary Digest의 여론 조사

2-3 낮은 품질의 데이터

2-4 관련 없는 특성

    특성 공학 : 관련 없는 특성이 적고 관련 있는 특성이 충분하게 할 수 있도록 훈련에 사용할 좋은 특성을 찾는 행위

     - 특성 선택(Feature Selection) : 훈련에 가장 유용한 특성을 선택

     - 특성 추출(Feature Extraction) : 특성을 결합해 더 유용한 특성을 생성(차원 축소 등)

     - 새로운 데이터를 수집해 새로운 특성을 생성

2-5 훈련 데이터 과대 적합(지나친 일반화의 오류와 유사)

    : 훈련 데이터에 있는 잡음의 양에 비해 모델이 너무 복잡할 때 발생

    <해결 방법>

     - 파라미터 수가 적은 모델을 선택, 훈련 데이터의 특성 수를 줄이거나 모델에 제약(규제)을 가해 단순화

     - 더 많은 훈련 데이터 수집

     - 훈련 데이터의 잡음 줄이기(오류 데이터 수정 | 이상치 제거)

2-6 훈련 데이터 과소 적합

    : 모델이 너무 단순해서 데이터의 내재된 구조를 학습하지 못하는 경우

    <해결방법>

     - 모델 파라미터가 더 많은 모델 선택

     - 학습 알고리즘에 더 좋은 특성을 제공 (특성공학)

     - 모델 제약 줄이기(규제 하이퍼파라미터 등)

 

3. 테스트와 검증

모델이 새로운 샘플에 얼마나 잘 일반화될지 아는 방법은 새로운 샘플에 실제로 적용해 보기

이를 위해 실제 서비스에 모델을 넣고 잘 작동하는지 모니터링하는 방법이 존재

하지만 모델이 나쁘다면 좋은 방법은 아니기에 다른 방법을 제시

- 훈련 데이터를 훈련세트와 테스트 세트로 나누기 → 훈련 세트에서 모델을 훈련

  → 테스트 세트에서 모델 평가 → 일반화 오차에 대한 추정값을 얻음

- IF 훈련 오차 低(= 훈련 세트에서 모델 오차) && 일반화 오차 高 → 모델이 훈련 데이터에 과대적합된 상태

※ 일반화 오차(Generalization Error; 새로운 샘플에 대한 오류비율; 외부 샘플오차)

 

3-1 하이퍼파라미터 튜닝과 모델 선택

    3-1-2 홀드아웃 검증(holdout validation) : 훈련 세트 일부를 떼어내어 여러 후보 모델을 평가하고 가장 좋은 하나 선택

    ※ 검증 세트 : 새로운 홀드 아웃 세트(= 개발 세트, 데브세트)

    - 줄어든 훈련세트(전체 훈련 세트에서 검증 세트를 뺀 데이터)에서 다양한 하이퍼파라미터 값을 가진 여러 모델 훈련

    - 검증 세트에서 가장 높은 성능을 내는 모델을 선택(홀드아웃 검증)

    - 최선의 모델을 전체 훈련 세트(검증 세트를 포함한 데이터)에서 다시 훈련하여 최종 모델 생성

    - 최종 모델을 테스트 세트에서 평가하여 일반화 오차 추정

   IF 검증 세트가 적으면 정확하게 평가 못함 So, 작은 검증 세트를 여러 개 사용하여 반복적인 교차 검증을 수행할 수 있음

   But 훈련 시간이 검증 세트의 개수에 비례하여 늘어남