Search
Duplicate

머신 러닝 교과서/ 컴퓨터는 데이터에서 배운다

데이터를 지식으로 바꾸는 지능적인 시스템 구축

20세기 후반 데이터에서 지식으 추출하여 예측하는 자가 학습(self-learning) 알고리즘과 관련된 인공 지능의 하위 분야로 머신 러닝이 출현했다.
사람이 수동으로 대량의 데이터를 분석하여 규칙을 유도하고 모델을 만드는 대신, 머신 러닝이 데이터에서 더 효율적으로 지식을 추출하여 예측 모델과 데이터 기반의 의사 결정 성능을 점진적으로 향상시킬 수 있게 됨.

머신 러닝의 세 가지 종류

머신 러닝은 3가지 종류로 구분해 볼 수 있다.
지도 학습 (supervised learning)
비지도 학습 (unsupervised learning)
강화 학습 (reinforcement learning)

지도 학습으로 미래 예측

지도 학습의 주요 목적은 레이블(label) 된 훈련 데이터에서 모델을 학습하여 본 적 없는 미래 데이터에 대해 예측을 만드는 것.
지도(supervised)는 희망하는 출력 신호(레이블)가 있는 일련의 샘플을 의미한다.
지도 학습은 다시 데이터를 범주(category)를 구분하는 분류(classification)와 연속적인 값을 출력하는 회귀(regression)으로 구분할 수 있다.

분류: 클래스 레이블 예측

분류는 과거의 관측을 기반으로 새로운 샘플의 범주형 클래스 레이블을 예측하는 것이 목적.
클래스 레이블은 이산적(discrete)이고 순서가 없어 샘플이 속한 그룹으로 이해할 수 있다.
스팸 이메일 감지는 전형적인 이진 분류(binary classification) 작업의 예이다.
두 개 이상의 클래스 레이블을 가진 경우 지도 학습 알고리즘으로 학습한 예측 모델은 훈련 데이터셋에 있는 모든 클래스 레이블을 새로운 샘플에 할당할 수 있다.
이런 다중 분류(multiclass classification)의 전형 적인 예는 손글씨 인식 문제.
아래 그림은 30개의 훈련 샘플이 있는 이진 분류 작업의 개념을 나타낸다.
15개의 샘플은 음성 클래스(negative class)로 레이블(뺄셈 기호)되어 있고, 다른 15개의 샘플은 양성 클래스(positive class)로 레이블(덧셈 기호) 되어 있다.
각 샘플이 두 개의 x1,x2x_{1}, x_{2} 값에 연관되어 있으므로 2차원 데이터 셋이다.
지도 학습 알고리즘을 사용하여 두 클래스를 구분할 수 있는 규칙을 학습한다. 이 규칙은 점선으로 나타난 결정 경계(decision boundary)이다.
새로운 데이터의 x1,x2x_{1}, x_{2} 값이 주어지면 두 개의 범주 중 하나로 분류한다.

회귀: 연속적인 출력 값 예측

회귀는 예측 변수(predictor variable)(또는 설명 변수(explanatory variable), 입력(input))와 연속적인 반응 변수(response variable) (또는 출력(outcome), 타겟(target)) 가 주어졌을 때 출력 값을 예측하는 두 변수 사이의 관계를 찾는다.
학생들의 수학 점수를 예측하는 것이 그 예
아래 그림은 선형 회귀(linear regression)의 개념으로 입력 xx와 타깃 yy가 주어지면 샘플과 직선 사이 거리가 최소가 되는 직선을 그을 수 있다.
일반적으로 평균 제곱 거리를 사용한다.
이렇게 데이터에서 학습한 직선의 기울기와 절편(intercept)을 사용하여 새로운 데이터의 출력 값을 예측한다.

강화 학습으로 반응형 문제 해결

강화 학습은 환경과 상호 작용하여 시스템(에이전트(agent))의 성능을 향상하는 것이 목적이다.
환경의 현재 상태 정보는 보상(reward) 신호를 포함하기 때문에 강화 학습을 지도 학습과 관련된 분야로 생각할 수 있다.
강화 학습의 피드백은 정답(ground truth) 레이블이나 값이 아니라 보상 함수로 얼마나 좋은지를 측정한 값이다.
에이전트는 환경과 상호 작용하여 보상이 최대화 되는 일련의 행동을 강화 학습으로 학습한다.
탐험적인 시행착오(trial and error) 방식이나 신중하게 세운 계획을 사용한다.
강화 학습의 대표적인 예는 체스이다.
강화 학습에는 여러 하위 분류가 있는데, 일반적인 구조는 강화 학습 에이전트가 환경과 상호작용하여 보상을 최대화 하는 것이다.
각 상태는 양의 보상이나 음의 보상과 연관된다. 보상은 체스 게임의 승리나 패배처럼 전체 목표를 달성하는 것으로 정의할 수 있다.

비지도 학습으로 숨겨진 구조 발견

지도 학습에서는 모델을 훈련할 때 사전에 옳은 답을 알고 있고, 강화 학습에서는 에이전트의 특정 행동을 어떻게 보상할지 그 측정 방법을 정의하는 반면, 비지도 학습에서는 레이블되지 않거나 구조를 알 수 없는 데이터를 다룬다.
비지도 학습을 사용하면 알려진 출력 값이나 보상 함수의 도움을 받지 않고 의미 있는 정보를 추출하기 위해 데이터 구조를 탐색할 수 있다.

군집: 서브그룹 찾기

군집(clustering)은 사전 정보 없이 쌓여 있는 그룹 정보를 의미 있는 서브그룹(subgroup) 또는 클러스터(cluster)로 조직하는 탐색적 데이터 분석 기법이다.
분석 과정에서 만든 각 클러스터는 어느 정도 유사성을 공유하고 다른 클러스터와는 비슷하지 않은 샘플 그룹을 형성한다. 군집을 비지도 분류(unsupervised classification)이라고 하는 이유가 여기에 있다.
클러스터링은 정보를 조직화하고 데이터에서 의미 있는 관계를 유도하는 도구이다.
마케터가 관심사를 기반으로 고객 그룹을 나누는 것이 그 예

차원 축소: 데이터 압축

비지도 학습의 또 다른 하위 분야는 차원 축소(dimensionality reduction)이다.
고차원의 데이터를 다루어야 하는 경우 하나의 관측 샘플에 많은 측정 지표가 존재하는데, 이로 인해 머신 러닝 알고리즘의 계산 성능과 저장 공간의 한계에 맞닥뜨릴 수 있다.
비지도 차원 축소는 잡음(noise) 데이터를 제거하기 위해 특성 전처리 단계에서 종종 적용하는 방법이다. 이런 잡음 데이터는 특정 알고리즘의 예측 성능을 감소시킬 수 있다.
차원 축소는 관련 있는 정보를 대부분 유지하면서 더 작은 차원의 부분 공간(subspace)으로 데이터를 압축한다.
차원 축소는 데이터 시각화에도 유리하다. 아래 그림은 고차원 특성을 1, 2, 3차원 특성공간으로 시각화하는 예

기본 용어와 표기법 소개

아래 그림 1-8의 표는 머신 러닝 분야의 고전적인 예제인 붓꽃(Iris) 데이터셋 일부를 보여준다. 붓꽃 데이터 셋은 Setosa, Versicolor, Virginica 세 종류 150개의 붓꽃 샘플을 담고 있다.
각 붓꽃 샘플은 데이터셋에서 하나의 행(row)으로 표현된다.
센티미터 단위의 측정값은 열(column)에 저장되어 있으며, 데이터셋의 특성(feature)라고도 한다.
데이터는 선형대수학(linear algebra)을 사용하여 행렬(matrix)과 벡터(vector) 표기로 데이터를 표현한다.
일반적인 관례에 따라 샘플은 특성 행렬 XX에 있는 행으로 나타내고, 특성은 열을 따라 저장한다.
150개의 샘플과 네 개의 특성을 가진 붓꽃 데이터셋은 150 x 4 크기의 행렬 XR150×4X \in \mathbb{R}^{150 \times 4}로 쓸 수 있다.
[x1(1)x2(1)x3(1)x4(1)x1(2)x2(2)x3(2)x4(2)............x1(150)x2(150)x3(150)x4(150)]\left[ \begin{array}{rrrr} x_{1}^{(1)} & x_{2}^{(1)} & x_{3}^{(1)} & x_{4}^{(1)} \\ x_{1}^{(2)} & x_{2}^{(2)} & x_{3}^{(2)} & x_{4}^{(2)} \\ ... & ... & ... & ... \\ x_{1}^{(150)} & x_{2}^{(150)} & x_{3}^{(150)} & x_{4}^{(150)} \end{array} \right]
기호 설명)
위 첨자 iiii번째 훈련 샘플을(지수가 아니다 주의), 아래 첨자 jj는 데이터셋의 jj번째 차원을 나타낸다.
굵은 소문자는 벡터 (xRn×1)(x \in \mathbb{R}^{n \times 1})를 나타내고 굵은 대문자는 행렬 XRn×m)X \in \mathbb{R}^{n \times m})을 나타낸다.
벡터나 행렬에 있는 하나의 원소를 나타낼 때는 이탤릭체를 사용한다. xnx^{n} 또는 xmnx_{m}^{n}
예컨대 x1150x_{1}^{150}은 150번째 샘플의 1번째 차원인 꽃받침 길이를 나타낸다. 특성 행렬의 각 행은 하나의 꽃 샘플을 나타내고 4차원 행 벡터 xiR1×4x^{i} \in \mathbb{R}^{1 \times 4}로 쓸 수 있다.
xi=[x1(i)x2(i)x3(i)x4(i)]x_{i} = \left[ \begin{array}{rrrr} x_{1}^{(i)} & x_{2}^{(i)} & x_{3}^{(i)} & x_{4}^{(i)} \end{array} \right]
각 특성 차원은 150차원의 열 벡터 xjR150×1x_{j} \in \mathbb{R}^{150 \times 1} 이다. 예컨대 다음과 같다.
xj=[xj(1)xj(2)...xj(150)]x_{j} = \left[ \begin{array}{rrrr} x_{j}^{(1)} \\ x_{j}^{(2)} \\ ... \\ x_{j}^{(150)} \end{array} \right]
비슷하게 타깃 변수(여기서는 클래스 레이블)를 150차원의 열 벡터로 저장한다.
y=[y1y2...y150](y{Setosa,Versicolor,Virginica})y = \left[ \begin{array}{rrrr} y^{1} \\ y^{2} \\ ... \\ y^{150} \end{array} \right] (y \in \{ Setosa, Versicolor, Virginica \})

머신 러닝 시스템 구축 로드맵

아래 그림은 예측 모델링에 머신 러닝을 사용하는 전형적인 작업 흐름을 보여준다.

전처리: 데이터 형태 갖추기

데이터 전처리는 모든 머신 러닝 어플리케이션에서 가장 중요한 단계이다.
많은 머신 러닝 알고리즘에서 최적의 성능을 내려면 선택된 특성이 같은 스케일을 가져야 한다. 특성을 [0, 1] 범위로 변환하거나 평균이 0이고 단위 분산을 가진 표준 정규 분포(standard normal distribution)로 변환하는 경우가 많다.
일부 선택된 특성은 매우 상관관계가 높아 어느 정도 중복된 정보를 가질 수 있다. 이때는 차원 축소 기법을 사용하여 특성을 저차원 부분 공간으로 압축한다. 특성 공간의 차원을 축소하면 저장 공간이 덜 필요하고 학습 알고리즘을 더 빨리 실행할 수 있다.
어떤 경우에는 차원 축소가 모델의 예측 성능을 높이기도 한다. 데이터셋에 관련 없는 특성(또는 잡음)이 매우 많을 경우, 즉 신호 대 잡음비(Signal-to-Noise Ratio, SNR)가 낮은 경우이다.
머신 러닝 알고리즘이 훈련 데이터셋에서 잘 작동하고 새로운 데이터에서도 잘 일반화 되는지 확인하려면 데이터셋을 랜덤하게 훈련 세트와 테스트 세트로 나눠야 한다.
훈련 세트에서 머신 러닝 모델을 훈련하고 최적화 한다. 테스트 세트는 별도로 보관하고 최종 모델을 평가하는 맨 마지막에 사용한다.

예측 모델 훈련과 선택

분류 알고리즘은 저마다 태생적인 편향이 존재한다. 작업에서 아무런 가정도 하지 않는다면 어떤 하나의 분류 모델이 더 우월하다고 말할 수 없다.
현실에서 가장 좋은 모델을 훈련하고 선택하기 위해 최소한 몇 가지 알고리즘을 비교해야 한다.
여러 모델을 비교하기 전에 먼저 성능을 측정할 지표를 결정해야 한다. 분류에서 널리 사용되는 지표는 정확도(accuracy)이다. 정확도는 정확히 분류된 샘플 비율이다.
모델 선택에 테스트 세트를 사용하지 않고 최종 모델을 평가하려고 따로 보관한다면 테스트 세트와 실제 데이터에서 어떤 모델이 잘동작할지를 어떻게 알 수 있을까?
이 질문에 나온 이슈를 해결하기 위해 다양한 교차 검증 기법을 사용한다.
이 기법은 모델의 일반화 성능을 예측하기 위해 훈련 데이터를 훈련 세트와 검증 세트로 더 나눈다.
또 머신 러닝 라이브럴리들에서 제공하는 알고리즘의 기본 하이퍼파라미터가 현재 작업에 최적이라고 기대할 수는 없다. 이어지는 장에서는 모델 성능을 상세하게 조정하기 위해 하이퍼파라미터 최적화 기법을 사용할 것이다.
하이퍼파라미터(hyperparameter)는 데이터에서 학습하는 파라미터가 아니라 모델 성능을 향상하기 위해 사용하는 다이얼로 생각할 수 있다.

모델을 평가하고 본 적 없는 샘플로 예측

훈련 세트에서 최적의 모델을 선택한 후에는 테스트 세트를 사용하여 이전에 본 적 없는 데이터에서 얼마나 성능을 내는지 예측하여 일반화 오차를 예상한다.
이 성능에 만족한다면 이 모델을 사용하여 새로운 데이터를 예측할 수 있다.
이전에 언급한 특성 스케일 조정과 차원 축소 같은 단계에서 사용한 파라미터는 훈련 세트만 사용하여 얻은 것임을 주목해야 한다. 나중에 동일한 파라미터를 테스트 세트는 물론 새로운 모든 샘플을 변환하는데 사용한다.
그렇지 않으면 테스트 세트에서 측정한 성능은 과도하게 낙관적인 결과가 된다.

머신 러닝을 위한 파이썬

(이하 파이썬 설치에 대한 내용 생략)