Study 2014/02/23

이번주는 주로 MLDSS 의 AdaBoost 를 이해하고 구현해보는 데에 시간을 썼다. TSG 에서는 새로운 것을 공부하기보단 정리와 문서작성에 집중했고, 코세라 강의 중 절반-6장-은 머신러닝쪽에서 이미 다루고 있는 Linear model 과 연관된 것이라 대강 보고 넘겼다.

MLDSS: AdaBoost-Machine Learning in Action 7장

앙상블은 더 나은 예측 결과를 얻기 위하여 여러 개의 모델을 사용하는 기법이다. 크게 Supervised learning 에 속하며, 모델을 통한 예측에 사용된다. 책에는 앙상블 학습의 두 분류로 BaggingBoosting 을 설명하고 있다.

상세한 내용은 더 깊게 공부를 해야 알겠지만, 책의 설명과 위키피디아를 바탕으로 내가 이해한 내용을 정리하자면 이렇다:

Bagging

  • Resampling with replacement
  • D 개의 학습셋에서 중복을 허용하여 D 개의 샘플을 추출하는 시행을 K 번
  • K 개의 서로 다른 학습셋으로 모델을 K 개 생성하여 Majority vote

Boosting

  • Weak learner 는 랜덤보다 살짝 좋은 정도의 분류기
  • 여러개의 Weak learner 를 순서대로 학습시켜 Strong learner 를 만든다
  • 결과는 각 Weak learner 결과의 가중치합으로 결정

이 중에서 Boosting의 한 방법인 AdaBoost 가 이번 장의 주요 내용이다.

AdaBoost

Background
  • AdaBoost: Adaptive Boosting
  • Decision stump: 깊이 1짜리 Decision Tree. 구현 방법에는 여러 가지가 있을 수 있다.
  • Training set: M 개의 피처벡터의 벡터 (그러니까, 행렬)
  • D: 길이 M 의 가중치 벡터로, 총 합은 1.0 이다. 초기값은 모든 값이 1/M 이다.
  • $\alpha$: Weak learner 의 가중치.
  • N: 사용할 Weak learner 의 개수
Training

간단하게 단계만 짚어보자면,

  1. D 벡터 초기화
  2. WeightedError 게산에 D를 사용하여 Weak learner(Decision stump) 를 학습
  3. $\alpha$ 를 계산
  4. D 벡터를 갱신: 올바르게 분류한 데이터->감소, 잘못 분류한 데이터->증가
  5. (Weak learner, $\alpha$) 를 저장

이상을 N 번 반복

적당히 말로 설명하자면, 이전 모델이 잘못 분류한 데이터에 가중치를 높인 후 다음 모델을 학습한다. 각 모델의 가중치는 올바르게 분류한 데이터가 많을수록 높다.

$\alpha$, D 갱신하는 식은 위키피디아나 책을 찾아보면 있다.

Classify

학습에서 우리가 얻은 것은 길이 N 의 (Model, $\alpha$) 리스트-learners-이다. 분류는 쉽다. 각 모델 예측값의 weighted sum 을 구하면 된다.

sum([alpha*model.predict(x) for (model, alpha) in learners])

이 값이 0보다 큰가 작은가-binary classifier라면-를 보면 된다.

Number of estimators

Estimator(weak-learner) 수는 얼마가 적당할까? 많을수록 좋을까? Estimator 개수에 따른 Training error, Test error 변화(책의 Table 7.1)을 그래프로 그려보면 아래와 같다. 너무 많아지면 overfitting 이 발생하는 것을 알 수 있다. 적정 개수는 알아서 잘 찾아야 한다. 아래에선 대충 $10^1$~$10^2$ 사이 50 정도로 보인다.

png

Classification Imbalance

Precision/Recall

분류기의 성능을 단순히 CorrectlyClassified/Total 로만 측정하는 것이 부적절한 경우가 있다.

png

분류기의 결과는 True value, Predicted value 에 따라서 위의 4개 경우로 나뉘는데 똑같이 올바르게 분류된 경우라도 True positive, True negative 의 중요도가 다른 경우가 있다. 똑같이 False positive, False negative 의 경우도 마찬가지이다. 여기서 두 가지 값을 정의하는데, 각각

  • Precision: $\frac{T P}{T P + F P}$, 답한 것 중에 얼마나 맞았는가
  • Recall: $\frac{T P}{T P + F N}$, 진짜 답 중에 몇개나 맞추었는가

이다. 각각을 최대화하는 것은 어렵지 않지만 둘 모두를 높게 유지하는 것은 쉽지 않다. 적절한 trade off 포인트를 찾아야 한다. 이를 위해서 F1Score나 아래에서 설명할 ROC 와 같은 개념들을 사용한다.

ROC: Receiver Operating Characteristic

분류기의 성능을 나타내는 지표 중 하나이다. X 축을 False Positive Rate, Y 축을 True Positive Rate 로 놓고 Threshold 를 변화시켜가며 그리는 그래프이다.

png

  • Not a scalar value! 단일 값이 아니라 그래프 이다.
  • 분류기의 결과가 아니라 중간 계산값이 임계값(Threshold)에 따라 어떤 결과를 만드는가를 평가한다.
  • 이 그래프를 적분한 값-그러니까 넓이-을 AUC 라고 한다. 0.5~1.0 사이의 값이며, 1.0 에 가까울수록 좋다.
Scikit-learn

Scikit-learn 에서는 역시 AdaBoost를 import, fit, predict 3단 콤보로 쓸 수 있다.
아래는 참조 링크와 예제 코드이다. ROC, AUC 까지 해 준다.

TSG: TAOCP Vol. 1 MMIX(2014/1Q)

이번주에는 진도를 나가지는 않고 책의 find maximum 코드에 대한 설명을 작성했다. 아직 정리가 더 필요해서 초안을 손보는 중이다.

아직은 비어 있지만 곧 여기에 정리될 예정이다.

Coursera Model Thinking

Ch 5. Thinking Electrons: Modeling people

사람의 선택을 모델링하는 데에 3가지 방법이 있다.

  1. Rational model: People optimiza.
  2. Behavior model: Just observe what they do.
    • Prospect theory: 이득의 경우 위험을 회피, 손해의 경우 위험을 받아들이는 경향
    • Hyperbolic Discouting: 근미래를 할인함
    • Status Quo Bias: 현상유지를 더 많이 선택한다.
    • [Base Rate Bias]: 숫자 두개를 골라봐 -> 왠지 두번째 숫자에 첫번째가 나올 확률이 높다고 한다
  3. Rule based model: People follow rules.

Ch 6. Categorical and Linear model

ML 에서 다루던 Linear regression 쪽의 단순화 버전 정도 … ? 그냥 스킵해도 될듯

Comments