Saturday, April 29, 2017

ISLR 2.2 - An Introduction to Statistical Learning (with applications in R)



pdf 다운로드 링크
구매 링크 (네이버 책)

2. 통계 학습 Statistical Learning

2.2 모델 정확도 평가 Assessing model accuracy


이 책에서는 선형 모델보다 복잡한 다양한 모델을 소개할 예정입니다. 왜 이렇게 많은 모델이 존재하고 이걸 다 공부해야 할까요? 그냥 제일 좋은거 하나를 쓰면 되지 않을까요? (아님) 안타깝게도 모든 경우에 제일 적합한 최고의 모델같은건 없습니다. 데이터 셋에 따라 다른 모델의 성능이 더 좋을 수 있고 문제에 따라, 목적에 따라 다 다를 수 있습니다.

제일 좋은 모델을 고르려면 어떤 모델이 좋은지를 평가할 수 있어야합니다. 이 부분을 알아봅시다.

2.1.1. 학습 성능 평가 Measuring the quality of fit

데이터 셋이 주어져있을 때 여기에 제일 잘 맞는 모델을 고르려면 모델의 성능을 수치화해야합니다. 회귀 regression 문제에서는 흔히 평균 제곱 오차 (MSE, Mean square error)를 많이 사용합니다. 말 그대로 오차의 제곱을 평균낸 것이죠.

$MSE = \frac{1}{N} \sum_{i=1}^n (y_i - \hat{f}(x_i))^2$

$y_i$가 정답, $\hat{f}(x_i)$가 우리의 예측 값이구요. 예측값이 정답에 가까울수록 MSE는 작아지게 됩니다.

학습 셋에서 구한 MSE를 '학습MSE' (training MSE)라고 하죠. 그런데 우리가 진짜로 신경쓰는건 학습MSE가 아니라, 생전 처음 보는, 새로운 데이터에서 모델의 MSE - 즉 시험MSE (test MSE)입니다. 예를 들어 주가 예측 모델을 짰다고 하면, 과거의 주가 패턴을 분석해서 모델을 만들고 학습시키겠죠. 그런데 이 모델의 학습MSE가 완벽해서 과거의 주가를 100% 맞추는건 아무 의미가 없습니다. 시험 셋에서의 성능 -- 즉 내일 주가를 맞추느냐! 가 중요하겠죠. 그래야 돈을 버니까!

때론 시험 셋이 있어서, 시험셋에서 성능이 제일 잘 나오는 모델을 고르면 되기도 합니다. 그런데 아닐때도 있죠. 그럼 어떻게 해야할까요? 흔한 오해는 학습MSE를 보고 판단하는겁니다.



그림 2.9를 보시죠. 우측 회색 선이 학습MSE, 빨간 선이 시험MSE입니다. 모델의 복잡도가 올라갈수록 학습 MSE는 계속 감사합니다. 왜냐면, 복잡한 모델일수록 어떻게든 학습 데이터에 모델을 "끼워 맞추는" 식으로 학습할 여지가 많기 때문입니다. 왼쪽 그림의 녹색 그래프가 바로 그런거죠. 복잡한 데이터에 막 그래프가 쭈글쭈글거리면서 끼워맞춘거죠.

이런 경우에 빨간 선, 즉 시험 셋의 MSE가 제일 적은 점(파랑 네모)로 골라야 최적의 선택이 됩니다.

2.2.2. 바이어스-베리언스 트레이드 오프 The bias-variance trade-off


시험MSE(의 제곱)는 아래와 같이 세 항으로 나눌 수 있습니다.

$E(y_0 - \hat{f}(x_0))^2 = Var(\hat{f}(x_0)) + [Bias(\hat{f}(x_0))]^2 + Var(\epsilon)$

여기에서, 역시 $\epsilon$은 우리가 어떻게 할 수가 없습니다. 따라서 여기에 있는 Variance와 Bias를 최소화하는것이 좋겠죠.

그런데 대체 여기에서 말하는 Variance와 Bias가 뭘까요?

Variance는 데이터셋을 바꾸면 일어날 수 있는 $\hat{f}$의 변화입니다. 만일 Variance가 크다면, 같은 모델을 학습 데이터만 바꿔도 오차가 확 증가합니다.

Bias는 실제로 일어나는, 훨씬 복잡한 상황을 이보다 단순한 함수 $\hat{f}$를 사용함으로써 생기는 오차입니다. 예를 들어 실제로 일어나는 상황엔 입력-출력 사이에 비선형성이 작용하는데 이걸 선형으로 모델링한다면 어쩔 수 없이 오차가 생기게됩니다.

일반적으로, 복잡하고 유연한 모델을 쓸수록 Variance가 증가하고 Bias는 감소합니다. 당연히 그렇겠죠. 그러나 이는 실제 문제가 어떤지, 그리고 우리가 어떤 데이터를 가지고 있는지에 따라 달라집니다.

2.2.3. 분류기 설정 The classification setting

그동안은 MSE를 쓰면서 회귀 모델을 가정했습니다. 이번엔 분류의 경우에 어떻게 되나 보도록 합시다. 우선 평가 방법으로 흔히 오차율 error rate을 계산합니다.

$\frac{1}{n}\sum_{i=1}^n I(y_i \neq \hat{y}_i)$

이 식에서 $\hat{y}_i$는 i번째 입력 데이터로 모델이 예측한 값입니다. 그리고 $I()$는 indicator 함수라고 흔히 부르는데, $I(true)=1$, $I(false)=0$ 으로 정의됩니다. 즉, 예측 값이 맞다면 -- 예를 들어 숫자 인식기라면 0-9중에 3을 예측했고, 실제로 정답이 3이면 $I()$가 1이 되는 것이죠. 따라서 최종적으로 100개를 테스트했는데 정답이 95개면 오차율은 $5/100=0.05$가 나오는 간단한 방식입니다.

베이즈 분류기 The Bayes Classifier
베이즈 분류기는 아래의 식을 (Bayes rule) 최대화하는 클래스 $j$를 고르는 분류기입니다.

$Pr(Y=j | X=x_0)$

쉬운 예를 들면, 만일 클래스가 두개인 이진분류 binary classification이면, $Pr(Y=1
 X=x_0 > 0.5 $이면 $Y=1$로 예측을 하는 방식입니다.

베이즈 분류기는 테스트 오차율을 최소화하는 규칙입니다. 이 오차율을 베이즈 오차율 Bayes error rate이라고 부릅니다.

KNN; K-nearest neighbors
그럼 베이즈 분류기를 쓰면 참 좋겠죠? 그러나 실제로는 조건부확률 $Pr(Y=j | X=x_0$를 모르기 때문에 불가능합니다. 즉 베이즈 분류기는 영원히 도달할 수 없는 궁극의 목표같은거죠. 이 조건부 확률을 추정하는 방법이 여러가지가 있는데 그 중 하나가 KNN입니다.




KNN은, 학습 데이터의 $X$를 보고, 테스트 데이터 $x$가 들어왔을 때, $x$ 근처의 가장 가까운 값 $K$개의 클래스를 살펴보고 다수결로 여기에 쫓아가는 방식입니다. 즉 자기 주변의 값을 보고 비슷한걸로 가는, 매우 직관적인 방법입니다.

$K$가 1이면 무조건 제일 가까운걸 쫓아갑니다. 반대 극단으로, 학습 셋이 100개의 데이터인데 $K$가 100이라면 무조건 전체 학습 셋에서 제일 많은 라벨을 쫓아가는거죠. $K$가 작을수록 decision boundary - 클래스를 결정짓는 경계선이 울퉁불퉁 꼬불꼬불해집니다.


여기에서도 적당한 $K$를 고르는것이 중요합니다. 아래 그림을 보면 $1/K$가 증가할수록 -- 즉 $K$가 감소할수록 -- 학습 오차는 줄어들지만 테스트 셋 오차는 어느순간 오히려 증가합니다.


2.3 Lab: Introduction to R


PDF파일을 보고 직접 해보시길 바랍니다.


No comments:

Post a Comment