Chapter 1. 한눈에 보는 머신러닝


1.1 머신러닝이란?

▷ 머신러닝 애플리케이션 - 광학 문자 판독기(Optical Character Recognition, OCR), 스팸 필터(spam filter), etc.

일반적인 정의: 머신러닝은 명시적인 프로그래밍 없이 컴퓨터가 학습하는 능력을 갖추게 하는 연구 분야다.   _아서 사무엘(Arthur Samuel, 1959)

공학적인 정의: 어떤 작업 T에 대한 컴퓨터 프로그램의 성능을 P로 측정했을 때 경험 E로 인해 성능이 향상됐다면,
                            이 컴퓨터 프로그램은 작업 T성능 측정 P에 대해 경험 E로 학습한 것이다.   _톰 미첼(Tom Mitchell, 1997)

  • 훈련 세트(Training set) - 학습하는 데 사용하는 샘플세트
  • 훈련 사례(Training instance) - 각 훈련 데이터(샘플)
  • 훈련 데이터(Training data) - 훈련에 사용된 데이터(경험 E)
  • 작업 T - e.g. 새로운 메일이 스팸인지 구분하는 것
  • 경험 E - 훈련 데이터
  • 성능 측정 P - 정확도(accuracy)   e.g. 정확히 분류된 메일의 비율

1.2 왜 머신러닝을 사용하는가? (in the spam filter)

Figure1-1

그림 1-1 전통적인 접근 방법

▷발견한 각 패턴을 감지하는 알고리즘을 직접 작성
▷문제가 단순하지 않아 규칙이 점점 길고 복잡해지므로 유지 보수하기 매우 힘듦



Figure1-2

그림 1-2 머신러닝 접근 방법

▷패턴 감지와 판단 기준을 자동으로 학습
▷프로그램이 훨씬 짧아지고 유지 보수하기 쉬우며 대부분 정확도가 더 높음



Figure1-3

그림 1-3 자동으로 변화에 적응함

▷전통적인 방식에서는 새 패턴에 대해서 새로운 규칙을 직접 추가해야 하지만
▷머신러닝 기반에서는 새 패턴을 자동으로 인식하고 새로운 규칙을 자동으로 학습



Figure1-4

그림 1-4 머신러닝을 통해 배웁니다.

▷스팸 필터가 충분한 스팸 메일로 훈련되었다면 스팸을 예측하는 데 가장 좋은 단어와 단어의 조합이 무엇인지 확인할 수 있음
      - 예상치 못한 연관 관계나 새로운 추세가 발견되기도 해서 해당 문제를 더 잘 이해하도록 도와줌

▶머신러닝 기술을 적용해서 대용량의 데이터를 분석하면 겉으로는 보이지 않던 패턴을 발견할 수 있음 → 데이터 마이닝(data mining)



머신러닝이 뛰어난 분야

  • 기존 솔루션으로는 많은 수동 조정과 규칙이 필요한 문제 : 하나의 머신러닝 모델이 코드를 간단하고 더 잘 수행되도록 할 수 있음
  • 전통적인 방식으로는 전혀 해결 방법이 없는 복잡한 문제 : 가장 뛰어난 머신러닝 기법으로 해결 방법을 찾을 수 있음
  • 유동적인 환경 : 머신러닝 시스템은 새로운 데이터에 적응할 수 있음
  • 복잡한 문제와 대량의 데이터에서 통찰 얻기

      ※ e.g. 음성 인식(speech recognition) - 각 단어를 녹음한 샘플을 사용해 스스로 학습하는 알고리즘을 작성하는 것이 현재 가장 좋은 솔루션


1.3 머신러닝 시스템의 종류

  1. 사람의 감독 하에 훈련하는 것인지 그렇지 않은 것인지(지도, 비지도, 준지도, 강화 학습)
  2. 실시간으로 점진적인 학습을 하는지 아닌지(온라인 학습과 배치 학습)
  3. 단순하게 알고 있는 데이터 포인트와 새 데이터 포인트를 비교하는 것인지
    아니면 훈련 데이터셋에서 과학자들처럼 패턴을 발견하여 예측 모델을 만드는지(사례 기반 학습과 모델 기반 학습)

1.3.1 지도 학습과 비지도 학습

  • 학습하는 동안의 감독 형태나 정보량에 따라 분류

지도 학습(supervised learning)에는 알고리즘에 주입하는 훈련 데이터에 레이블(label)이라는 원하는 답이 포함됨

Figure1-5

그림 1-5 지도 학습에서 레이블된 훈련 세트(예를 들면 스팸 분류)

분류(classification)가 전형적인 지도 학습
▶또 다른 전형적인 지도 학습은 예측 변수(predictor variable)라 부르는 특성(feature)(주행거리, 연식, 브랜드 등)을 사용해
   중고차 가격 같은 타깃 수치를 예측하는 것 → 회귀(regression)

Figure1-6

그림 1-6 회귀

▶일부 회귀 알고리즘은 분류에 사용할 수 있고 로지스틱 회귀는 클래스에 속할 확률을 출력함    e.g. 스팸일 가능성 20%

가장 중요한 지도 학습 알고리즘들

  • k-최근접 이웃(k-Nearest Neighbors)
  • 선형 회귀(Linear Regression)
  • 로지스틱 회귀(Logistic Regression)
  • 서포트 벡터 머신(Support Vector Machines, SVM)
  • 결정 트리(Decision Tree)와 랜덤 포레스트(Random Forests)
  • 신경망(Neural networks)

비지도 학습(unsupervised learning)에는 말 그대로 훈련 데이터에 레이블이 없음 - 아무런 도움 없이 학습해야 함

Figure1-7

그림 1-7 비지도 학습에서 레이블 없는 훈련 세트

가장 중요한 비지도 학습 알고리즘들

  • 군집(clustering)
    • k-평균(k-Means)
    • 계층 군집 분석(Hierarchical Cluster Analysis, HCA)
    • 기댓값 최대화(Expectation Maximization)
  • 시각화(visualiztion)와 차원 축소(dimensionality reduction)
    • 주성분 분석(Principal Component Analysis, PCA)
    • 커널(kernel) PCA
    • 지역적 선형 임베딩(Locally-Linear Embedding, LLE)
    • t-SNE(t-distributed Stochastic Neighbor Embedding)
  • 연관 규칙 학습(Association rule learning)
    • 어프라이어리(Apriori)
    • 이클렛(Eclat)

Figure1-8

그림 1-8 군집

Figure1-9

그림 1-9 의미 있는 군집을 강조한 t-SNE 시각화의 예

Figure1-10

그림 1-10 이상치 탐지


준지도 학습(semisupervised learning)은 레이블이 일부만 있는 데이터를 다룸    e.g. 구글 포토 호스팅 서비스

Figure1-11

그림 1-11 준지도 학습

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


강화 학습(Reinforcement learning)    e.g. 딥마인드(DeepMind)의 알파고(AlphaGo)

Figure1-12

그림 1-12 강화 학습

에이전트(agent)환경(environment)을 관찰해서 행동(action)을 실행하고 그 결과로 보상(reward)(또는 부정적인 보상에 해당하는 벌점(penalty))을 받음 ▶시간이 지나면서 가장 큰 보상을 얻기 위해 정책(policy)이라고 부르는 최상의 전략을 스스로 학습


1.3.2 배치 학습과 온라인 학습

  • 입력 데이터의 스트림(stream)으로부터 점진적으로 학습할 수 있는지의 여부에 따라 분류

배치 학습(batch learning)은 가용한 데이터를 모두 사용해 훈련시켜야 함

▶먼저 시스템을 훈련시키고 제품 시스템에 적용하면 더 이상의 학습 없이 실행됨 → 오프라인 학습(offline learning)

온라인 학습(online learning)은 데이터를 순차적으로 한 개씩 또는 미니배치(mini-batch)라 부르는 작은 묶음 단위로 주입하여 시스템을 훈련시킴

▶매 학습 단계가 빠르고 비용이 적게 들어 시스템은 데이터가 도착하는 대로 즉시 학습할 수 있음

Figure1-13

그림 1-13 온라인 학습

외부 메모리(out-of-core) 학습: 점진적으로 데이터의 일부를 읽어 들이고 훈련 단계를 수행

Figure1-14

그림 1-14 온라인 학습을 사용한 대량의 데이터 처리

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


1.3.3 사례 기반 학습과 모델 기반 학습

  • 어떻게 일반화되는가에 따라 분류

사례 기반 학습(instance-based learning)

▷시스템이 사례를 기억함으로써 학습하고 유사도(similarity) 측정을 사용해 새로운 데이터에 일반화함

Figure1-15

그림 1-15 사례 기반 학습

모델 기반 학습(model-based learning)

▷샘플들의 모델을 만들어 예측에 사용

Figure1-16

그림 1-16 모델 기반 학습


Equation1-1

식 1-1 간단한 선형 모델

효용 함수(utility function)(또는 적합도 함수(fitness function)): 모델이 얼마나 좋은지 측정
비용 함수(cost function): 모델이 얼마나 나쁜지 측정(선형 회귀에서는 보통 비용 함수를 사용)

▶선형 모델의 비용이 가장 적은 파라미터 찾기 → 훈련(training)

Figure1-19

그림 1-19 훈련 데이터에 최적인 선형 모델


  • 예제 1-1 사이킷런을 이용한 선형 모델의 훈련과 실행
In [1]:
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]

# 데이터 적재
oecd_bli = pd.read_csv("./datasets/lifesat/oecd_bli_2015.csv", thousands=',')
gdp_per_capita = pd.read_csv("./datasets/lifesat/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]]
<Figure size 640x480 with 1 Axes>
[[5.96242338]]
In [2]:
# 선형 회귀 모델을 k-최근접 이웃 회귀 모델로 교체할 경우
knn = sklearn.neighbors.KNeighborsRegressor(n_neighbors=3)

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

# 키프로스에 대한 예측
print(knn.predict(X_new)) # 결과 [[ 5.76666667]]
[[5.76666667]]

전형적인 머신러닝 프로젝트의 형태

  1. 데이터를 분석
  2. 모델을 선택
  3. 훈련 데이터로 모델을 훈련
  4. 새로운 데이터에 모델을 적용해 예측 - 추론(inference)