안내 사항
이 시리즈는 더 이상 업데이트 되지 않습니다. 대신 새롭게 제 github 레포에 jupyter notebook을 기반으로 다시 정리하고 있습니다. 이 작업이 다 끝나고 스스로 이해한 것을 한글로 정리하게 될 때가 오기를 바랍니다.
우리는 지금까지 supervised learning의 대표적인 방법인 least squares와 kNN을 알아보았다. 다시 두 방법이 만들어내는 decision boundary를 흘끗 보자.
least squares를 이용한 선형 모델은 매우 매끄러운 decision boundary를 만들어내며, 데이터에 맞추기에 일관적인 면모를 드러낸다. 딱 봐도 좋아보인다. 다만 우리는 least squares가 적합한 방법이라는 믿음을 가지고 있기 때문에 사용을 했다는 점을 잊으면 안된다. 이미 선형 decision boundary가 맞다는 가정이 있기 때문에 least squares의 사용이 정당화될 수 있다. 나중에 설명할 것이지만, 이러한 점을 "low variance and high bias"라고 말한다. "편향"이라는 의미를 가진 단어 bias를 통해 least squares는 데이터에 대한 편견이 많다고 생각하면 될 것이다.
kNN은 least squares의 정반대의 방법이었다. 데이터에 대한 가정을 최대한 두지 않으려고 노력하기 때문에, 어떤 상황에서도 믿음직스럽게 사용할 수 있는 방법이 된다. 하지만 kNN을 사용한 decision boundary는 매우 못생겼다는 점을 기억하자. 우리가 가진 데이터에 따라 decision boundary의 모양이 바뀌게 될 것이고, 이는 매우 일관적이지 못한 분류를 할 수 있다. 어려운 말로 얘기하자면 이러한 점을 "high variance and low bias"라고 말한다.
이 두 가지 방법이 힘을 쓸 수 있는 상황은 각자 따로 있음을 알 수 있다. (시나리오 1, 2를 기억해보자.) 이제 "oracle"을 불러볼 때가 왔다. oracle은 "신탁"이라는 사전적 의미를 가지고 있다. 실제 데이터 분석을 하는 상황에서 그 데이터가 어떠한 분포에서 온 것인지는 아무도 모를 일이다. 다시 말하자면 신만이 알 수 있을 것이다. 이러한 의미에서 데이터의 근원에 대한 의미로 oracle이란 단어를 사용한다.
그동안 사용해왔던 데이터는 사실 다음과 같은 논리에 의해서 생성한 것이다. 우선 10개의 평균값 \(m_k\)를 2차원 정규분포 \(N_2\left((1,0)^T,\mathbf{I}\right)\)또는\(N_2\left((0,1)^T,\mathbf{I}\right)\)에서 각 클래스(BLUE, ORANGE)에 맞게 뽑는다. 각 클래스의 100개의 데이터를 각각 생성할 때마다 10개의 평균 중 하나 \(m_k\)를 골라서 (\(1/10\)의 확률로) \(\mathit{N}_2\left(m_k, \mathbf{I}/5\right)\)의 난수를 생성한다. 이렇게 함으로써 우리는 시나리오2에 가까운 Gaussian cluster의 mixture를 얻게 된다. 이렇게 생성한 데이터를 통해 우리는 두 가지 decision boundary를 갖고 있다. 이제 기존에 썼던 데이터는 잊어버리고 10000개의 새로운 데이터를 같은 방법으로 생성해서 decision boundary를 테스트해볼 것이다. 그 결과로 아래 도표를 보자.
least squares (사각형), kNN(선 차트)를 이용한 classifier의 오판별율을 나타냈다. 청녹색은 처음에 fit하는데 사용한 200개의 training data, 주황색은 새로 생성한 10000개의 test data에 대한 오판별율을 나타낸다. 당연히 k=1일 때 training data의 오판율은 0이 됨을 확인하자. 하지만 test data에서는 어느 정도 k값이 되어야 더 나은 오판별율을 보임을 알 수 있다. Least squares 방법은 여러 kNN 결과들의 중간 정도 하는 것 같다.
실제로 쓰이는 방법들 중에서 least squares와 kNN 이 두 가지 간단한 방법을 응용해서 쓰이는 것들이 많이 있다. 저차원 문제들은 실제로 1NN이 꽤나 힘을 발휘한다는 것을 알아두자. 이 간단한 방법들을 발전시킬 수 있는 예로 다음과 같은 기술을 들 수 있다.
- kernel method는 kNN보다 유연하게 weight을 주는 방법이다.
- 고차원 상황에서 특정 변수를 강조하기 위해 distance kernel을 조절할 수 있다.
- locally weighted least squares는 지역적으로 fit을 하고자 할 때, least squares를 일일이 구역을 나눠서 맞추는 대신 사용할 수 있는 방법이다.
- basis expansion을 이용한 선형 모델은 복잡한 모델에 다가갈 수 있다.
- projection pursuit, neural network: 내가 잘 모르므로 자세한 설명은 생략한다
소개는 여기까지만 하고 추후에 자세히 다루는 시간이 있길 바란다. 다음 글에서는 전통적인 통계학 이론을 조금 이용해서 왜 우리가 위와 같은 어려운 기술들을 사용해야 하는지에 대해 얘기해보려고 한다.
'Machine Learning' 카테고리의 다른 글
PyTorch를 이용한 NLP 튜토리얼, Part 1: 기초 개념 (0) | 2018.03.22 |
---|---|
Neural Network의 원리를 알기 위한 짧은 견문록 (0) | 2018.03.18 |
Logistic Regression은 왜 Linear Method라고 불리는가? (1) | 2018.02.25 |
2-2. k Nearest Neighbor (DEPRECATED) (2) | 2016.09.05 |
2-1. Least Squares (DEPRECATED) (5) | 2016.09.02 |