안내 사항

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



우리는 지금까지 supervised learning의 대표적인 방법인 least squares와 kNN을 알아보았다. 다시 두 방법이 만들어내는 decision boundary를 흘끗 보자.


linear model classifier via least squares

kNN classifier for k=1



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를 테스트해볼 것이다. 그 결과로 아래 도표를 보자.

comparision of least squares and kNN classifierleast 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: 내가 잘 모르므로 자세한 설명은 생략한다

소개는 여기까지만 하고 추후에 자세히 다루는 시간이 있길 바란다. 다음 글에서는 전통적인 통계학 이론을 조금 이용해서 왜 우리가 위와 같은 어려운 기술들을 사용해야 하는지에 대해 얘기해보려고 한다.

  • 초보자 2017.11.22 21:23

    안녕하세요.. 수학초보자입니다.
    N((1,0)^T, I)
    여기서 I는 그냥 분산을 임의의 기호로 나타낸건가요..?
    그리고 (1,0)^T는 평균의 자리를 나타낸 것 맞나요?

    BlogIcon 동건 2017.11.25 12:05 신고

    안녕하세요, column vector (1, 0)^T 는 평균 벡터이므로, 말씀하신 대로 평균의 자리를 나타내는 것이 맞다고 생각됩니다. 다만 I 는 항등 행렬 (identity matrix)를 나타냅니다.

    표기에 관해 조금 수다를 떨어보자면, 보통 기초 통계 과목에서 표준정규분포를 N(0, 1)로 표시할 겁니다. 이 표준정규분포는 1차원 확률 변수의 분포라고 할 수 있겠죠. 이거를 다차원으로 확장하면 확률 변수는 확률 벡터라고 불립니다. 확률 벡터의 분포, 그 중 특히 정규분포는 평균 벡터와 분산 매트릭스로 특징이 지어지므로 N(평균벡터, 분산 매트릭스)로 표시합니다. 표준정규분포 N(0, 1)에 대응되는 다차원 표준정규분포는 N_n(0, I)인데, 여기서 0은 n-차원 0 벡터, I는 n-차원 항등행렬입니다.