본문

핸즈온 머신러닝 4일차 " 머신러닝 시스템의 종류(3)" 사례기반 vs 모델기반


1.3.3 사례 기반 학습과 모델 기반 학습(일반화 기준)



예측을 만드는 것입니다. 다시 말해, 주어진 훈련 데이터로 학습하여, 훈련 데이터에서는 본적 없는 새로운 데이터로 일반화되어야 한다는 뜻입니다. 훈련 데이터에서 높은 성능을 내는 것이 좋지만 그게 전부는 아닙니다. 새로운 샘플에서 잘 작동하는 모델이 목표입니다.


1) 사례 기반 학습

가장 간단한 형태의 학습은 단순히 기억하는 것. 스팸 필터를 이러한 방식으로 만들면 사용자가 스팸이라고 지정한 메일과 동일한 모든 메일을 스팸으로 분류합니다. 최악은 아니라도 최선이라고 할 수 없습니다.

스팸 메일과 동일한 메일은 스팸이라고 지정하는 대신 스팸 메일과 매우 유사한 메일을 구분하도록 스팸 필터를 프로그램할 수 있습니다. 유사도 측정입니다. 공통으로 포함한 단어의 수를 세는 것! 스팸 메일과 공통으로 가지고 있는 단어가 많으면 스팸으로 분류합니다.

이를 사례기반 학습이라 하며, 시스템이 사례를 기억하여 학습합니다. 그리고 유사도 측정을 통해 새로운 데이터에 일반화 합니다.


2) 모델 기반 학습

모델을 만들어서 예측에 사용하는 것입니다.

돈이 사람을 행복하게 만드는지 알아본다고 가정.

Better Life Index 와 1인당 GDP 통계를 내려 받습니다.

테이블을 합치고 표 1-1이 일부분 입니다.

표 1-1 돈이 사람을 행복하게 만드는가?

국가

1인당 GDP(달러)

삶의 만족도

헝가리

12,240

4.9

대한민국

27,195

5.8

프랑스

37,675

6.5

호주

50,962

7.3

미국

55,805

7.2



데이터가 흩어져 있지만, 거의 선형으로 보입니다. 모델링해보면


식 1-1 간단한 선형 모델

삶의 만족도 =0 +1×1인당_GDP


이를 통해서(살짝 업그레이드 된 데이터 이용) 새 샘플(키프로스)을 하는 산점도를 그려 시각화하고 선형 모델을 훈련하여 예측하는 파이썬 코드입니다.


GDP.py

gdp_per_capita.csv

oecd_bli_2015.csv

import matplotlib

import matplotlib.pyplot as plt

import numpy as np

import pandas as pd

import sklearn.linear_model

def prepare_country_stats(oecd_bli, gdp_per_capita):

  oecd_bli = oecd_bli[oecd_bli["INEQUALITY"]=="TOT"]

  oecd_bli = oecd_bli.pivot(index="Country", columns="Indicator", values="Value")

  gdp_per_capita.rename(columns={"2015": "GDP per capita"}, inplace=True)

  gdp_per_capita.set_index("Country", inplace=True)

  full_country_stats = pd.merge(left=oecd_bli, right=gdp_per_capita,

                                left_index=True, right_index=True)

  full_country_stats.sort_values(by="GDP per capita", inplace=True)

  remove_indices = [0, 1, 6, 8, 33, 34, 35]

  keep_indices = list(set(range(36)) - set(remove_indices))

  return full_country_stats[["GDP per capita", 'Life satisfaction']].iloc[keep_indices]

# Load the data

oecd_bli = pd.read_csv("oecd_bli_2015.csv", thousands=',')

gdp_per_capita = pd.read_csv("gdp_per_capita.csv",thousands=',',delimiter='\t',

                           encoding='latin1', na_values="n/a")

# Prepare the data

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"]]

# Visualize the data

country_stats.plot(kind='scatter', x="GDP per capita", y='Life satisfaction')

plt.show()

# Select a linear model

model = sklearn.neighbors.KNeighborsRegressor(n_neighbors=3)

# Train the model

model.fit(X, y)

# Make a prediction for Cyprus

X_new = [[22587]]  # Cyprus' GDP per capita

print(model.predict(X_new)) # outputs [[ 5.96242338]]


작업을 요약 하면

  1. 데이터 분석

  2. 모델 선택

  3. 훈련 데이터로 모델 훈련(비용함수를 최소화하는 모델)

  4. 모델 적용해 예측

이 과정으로 이루어 집니다. 

w) 효용함수(utility function) : 모델이 얼마나 좋은지 측정

    비용함수(cost function) : 모델이 얼마나 나쁜지 측정

cf) 선형 회귀에서는 보통 선형 모델의 예측과 훈련 데이터 사이의 거리를 재는 비용함수를 사용합니다.

스터디 중 필기한 내용으로 모든 참고자료는 핸즈온 머신러닝입니다.

아래 책을 클릭하시면 구매페이지로 이동합니다.


핸즈온 머신러닝


공감과 댓글은 글쓴이에게 큰 힘이 됩니다. 

마음에 드셨으면 공감과 댓글부탁드립니다.





댓글