안내 사항

이 시리즈는 더 이상 업데이트 되지 않습니다. 대신 새롭게 제 github 레포에 jupyter notebook을 기반으로 다시 정리하고 있습니다. 이 작업이 다 끝나고 스스로 이해한 것을 한글로 정리하게 될 때가 오기를 바랍니다.



주의

이 글의 내용은 Hastie, Tibshirani 등이 쓴 책 "The Elements of Statistical Learning"의 순서와 내용을 기반으로 정리한 글입니다. 따라서 잘못된 내용이 있을 수도 있으니 그럴 경우 제보해주시면 감사드리겠습니다.

Machine Learning, Supervised Learning이란?

Machine learning을 아-주 간단하게 축약하자면, 주어진 데이터를 기반으로 판단을 내릴 수 있는 규칙을 만들고 이를 토대로 주어진 데이터 밖에서 예측을 하는 방법이라고 할 수 있다. 이미 잘 분류되어있는 메일들(스팸 vs. 정상)을 가지고 스팸 분류 규칙을 만들고, 새로 메일이 왔을 때 이 메일이 스팸인지 아닌지에 대한 예측을 하고, 그 예측률을 높이고자 하는 노력이 machine learning의 대표적인 예이다. 그 중에서도 확실하게 input과 output의 개념이 정해져 있고, 이러한 input/output 데이터를 바탕으로 output을 예측하고자 하는 분석을 supervised learning 이라고 한다. 방금 예시를 든 스팸 분류 역시 supervised learning이라고 할 수 있다. 앞으로 supervised learning 기법들을 중점적으로 다룰 것이다.

여기서는 간단하지만 강력한 두 가지 예측 기법들을 소개한다. 하나는 Least squares를 통한 선형 모델(linear model)이고 또 다른 하나는 k-nearest-neighbor (이하 kNN)이다. 선형 모델이라는 이름에서 알 수 있듯이, 우리는 이미 데이터가 선형 구조(linearity)를 가지고 있다는 어마어마한 가정을 두고 시작한다. 이 선형성의 가정은 안정적인 예측을 주기도 하지만, 모델 자체가 부정확할 가능성을 갖게 된다. 반대로 kNN은 이러한 선입견을 최대한 배제하고, 있는 그대로의 데이터에 집중한다. kNN이라는 이름을 통해서도 이게 얼마나 단순한 방법인지 알 수 있다. (하지만 중요하다) least squares와 반대로 kNN은 정확하지만, 불안정하다. (예측이 안정적(stable)이라는 것은, 미적분학에서의 연속적(continuous)이다는 것과 비슷한 느낌으로 받아들이면 될 것이다. 느낌만...)

Linear Models and Least Squares

input: \(X_1, X_2, \cdots, X_p\in\mathbb{R}\)

output: \(Y\in\mathbb{R}\)

이미 데이터는 선형 관계를 갖고 있다고 우리는 가정하고 시작한다.

\[Y=\beta_0 + \sum_{j=1}^p X_j\beta_j\]

그리고 여기서 선형 모델을 맞춘다(fit)는 것은 \(Y\)를 \(X\)들로 표현하게 해주는 계수 \(\beta\)를 알고 싶다는 것이다. 진정한 \(\beta\)는 모르지만 나는 어느 정도의 샘플 데이터를 갖고 있으므로, 그 데이터를 통해서 \(\beta\)의 바짓자락이라도 붙잡아보고 싶다. 그렇게 해서 나오게 되는 추정치를 표현하기 위해 모자를 붙여서 \(\hat{\beta}\)로 표현한다. 우리가 열심히 노력해서 \(\hat{\beta}\)을 구했다(고 치자). 그러면 우리가 할 수 있는 일은 계산해낸 \(\hat{\beta}\)와 input 데이터를 이용해 정확히 선형 관계일 때의 \(Y\)값을 구할 수 있다. 이를 fitted value라고 한다. 방금 한 이야기들을 수식으로 정리하면 다음과 같다.

\[\hat{Y}=\hat{\beta}_0+\sum_{j=1}^p X_j\hat{\beta}_j=X^T\hat{\beta}\]

여기서 \(X^T=[1, X_1, \cdots, X_p]\in\mathbb{R}^{p+1},\) 그리고 \(\beta^T=[\beta_0,\beta_1,\cdots,\beta_p]\in\mathbb{R}^{p+1}\)

\(\left( p+1\right)\)차원의 input-output 공간에서, 이미 갖고 있는 데이터와 그 fitted values \((X,\hat{Y})\)는 당연하게도 (왜?) hyperplane을 그린다. X가 상수 1이라는 변수를 가지고 있다면 그 평면은 subspace가 되고, 아니라면 affine space가 될 것이다.

input 입장에서 봤을 때, Y를 X에 대한 함수로 표현한다고 해보면 \(Y=f(X)=X^T\beta\)가 될 것이다. 이 때 \(f\)의 gradient 베타는 steepest uphill direction을 의미한다.

아직 가려운 곳을 긁어주지 못했다. 그래서 \(\hat{\beta}\)을 어떻게 구할건데? 이 것은 아주 중요하고 어려운 문제이지만, 여기서는 그냥 least squares 방법으로 구할 거다. Least squares는 다음 량을 최소화하고 싶어한다. (최소화하는 \(\beta\)를 찾고 싶어한다)

\[RSS(\beta)=\sum_{k=1}^N\left(y_k-x_k^T\beta\right)^2=\left(\mathbf{y}-\mathbf{X}\beta\right)^T\left(\mathbf{y}-\mathbf{X}\beta\right)\]

여기서 소문자 표현 \((x_k,y_k)\in\mathbb{R}^{p+1}, k=1,\cdots,N\)는 실제로 우리가 가지고 있는 \(N\)개의 샘플 데이터를 의미하고 \(\mathbf{X}^T=\left[x_1|\cdots|x_N\right]\) 샘플 데이터로 채워진 행렬이다.

그래서 \(RSS\)가 뭘까? 간단히 말하면 y값과 fitted value의 차이. 조금 더 얘기해보자면 이미 측정한 y값과, 선형 모델이라고 가정해버렸을 시에 측정된 평면과의 거리라고 말할 수 있다. 그리고 이 거리를 최대한 줄일 수 있는 평면을 찾는 것이 least squares 방법이다. 이게 이차-quadratic 함수에 오목(convex)하기 때문에 최소값이 존재하고, 그 최소값을 찾기 위해서 미분을 해서 계산하는 짓은 하지 않겠다. 결론적으로 추정치 \(\hat{\beta}\)는, 만약 \(\mathbf{X}^T\mathbf{X}\)의 역행렬이 존재한다면, 다음과 같다.

\[\hat{\beta}=\arg\min_{\beta}RSS(\beta)=\left(\mathbf{X}^T\mathbf{X}\right)^{-1}\mathbf{X}^Ty\]

이제 \(\hat{\beta}\)을 알았으니 fitted values도 계산할 수 있다.

\[\hat{y}_k=x_k^T\hat{\beta}=\mathbf{H}\hat{\beta}, \text{ 여기서 } \mathbf{H}=\mathbf{X}\left(\mathbf{X}^T\mathbf{X}\right)^{-1}\mathbf{X}^T\]

\(y\)에 모자를 씌워준다는 hat matrix라는 의미에서 H라는 알파벳을 사용한단다. 이렇게 계산된 모든 fitted surface는 p개의 파라미터 \beta로 특정 지어진다. 따라서 선형 모델을 맞추기 위해서는 엄청나게 많은 데이터가 필요하진 않다고 생각할 수 있다. (왜?)

Linear Model in a Classification Context

다음과 같은 데이터가 있다.

input: \(X\in\mathbb{R}^2\)

output: \(Y\in \lbrace 0,1 \rbrace\)

선형 모델을 통해 Y가 0인지 1인지를 구분지어보려고 한다. 데이터만 있으면 우리는 위의 계산을 통해서 fitted value \(\hat{Y}\)를 얻을 수 있을 것이다. 그리고 최종적으로 결정하고 싶어하는 결론을 \(\hat{G}\)라고 하자. 즉, 우리가 가지고 있는 데이터 바깥에서 새로운 \(x\)가 들어왔을 때, 선형 모델을 통해 계산된 \(\hat{Y}\)를 바탕으로 \(\hat{G}=1\)이라고 판단하고 싶은 것이다. 그럼 자연스럽게 떠오르는 규칙은 다음과 같다.

\[\hat{G}=0\text{ if }\hat{Y}<0.5,\text{ or }\hat{G}=1\text{ if }\hat{Y}\geq0.5\]

이 규칙을 통해 (linear) decision boundary \(\lbrace x:x^T\hat{\beta}=0.5\rbrace\)가 정해졌고 두 그룹의 영역이 생긴다.

linear-model-classification-example좌표평면이 input, 색깔 정보가 output을 나타낸다. 선형 모델을 통한 decision boundary 부근에 잘못 분류된 점들이 꽤 보인다.

여기서 decision boundary 부근에서 잘못 분류된 점들에 대해 얘기해보겠다. 우리가 적용한 선형 모델이 잘못된 것일까, 아니면 선형 모델이 옳은 판단이었다 하더라도 애초에 피할 수 없는 오류인 것일까? 당장 왜 잘못 분류되었을까에 대해 생각하기 전에, 주어진 데이터가 어떤 분포에서 나온 것일 지에 대해 생각해보려 한다. 다음 두 시나리오를 보자.

distribution-scenario1시나리오1distribution-scenario2시나리오2

시나리오1에서 우리의 데이터가 나온 것이라면, 선형 모델을 통해 정한 decision boundary는 최선의 선택인 것 같다. (최선의 선택이라는 근거는 추후에 더욱 자세히 설명하겠다) 두 그룹의 분포 상 겹치는 부분은 우리가 어찌할 수 없는 영역이기 때문에, decision boundary 부근에서의 오판은 앞으로의 예측에서도 종종 일어날 것이다.

시나리오2에서는 얘기가 많이 달라진다. 상식적으로 생각해봐도 이 상황에서 linear decision boundary를 긋는다는 것은 적합하지 않다고 생각할 수 있을 것이다. 이럴 때 우리에게 필요한 것이 kNN이다. 다음 글에서는 kNN에 대해 알아볼 것이다.

시나리오에 따라 우리가 무엇을 잘했고 무엇을 잘못했는지가 달라진다. 물론 애초에 저걸 모르기 때문에 machine learning이니 뭐시기니 공부를 하는 것이기에 모순된 느낌이 있긴 하지만, 공부하는 입장에서 내가 쓰는 방법이 어느 상황에서 적합한 선택이 될련지에 대한 좋은 직관을 받을 수 있기에 데이터의 분포에 대한 가정과 함께 분석하는 것이다.

다음 글