ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Chapter 7 Ensemble Learning and Random Forests
    ML/딥러닝 2020. 4. 13. 19:19
    반응형
    • 실생활
      • 한 명의 전문가의 의견 < 다수의 일반인의 의견 일 때도 있다.
    • 딥러닝
      • 하나의 best predicter < 다수의 적당한 predicter 인 경우가 존재.
      • Ensemble - predicter들의 그룹
      • Ensemble learning - 여러 개의 predicter를 사용하는 방법
      • Ensemble method - ensemble learning에 사용되는 알고리즘
    • 예시
      • Random Forests
        • training set에서 서로 다른 subset을 만들어 decision tree classifier를 학습시키는 경우
        • 다양하게 학습된 dicision tree classifier로 투표를 해 최종 predict
      • Machine Learning competition
        • 최종 성능을 끌어 올리기 위해 여러가지 모델들을 사용한다.

     

    Voting Classifiers

    • hard voting classifier
      • 가장 간단한 방법
      • 여러가지 모델로 학습을 시킨 후 predict할 때 voting해서 최종 결과를 출력함.
      • Best classifier의 단독 성능 보다 높은 성능을 가짐.
    • 왜 될까?
      • 51%로 앞면, 49%로 뒷면이 나오는 동전뒤집기 상황에서
      • 1000번 던져서 510번 앞면, 490번 뒷면이 나온다면
      • 앞면이 나올 확률은 75%에 가까워진다.
      • 이항 분포의 누적확률분포

    • 같은 데이터로 3가지 classifier를 만들어 학습한다.

    • 각각의 성능보다 ensemble하면 성능이 더 좋다.

     

    • soft voting classifier
      • 각 모델이 class 별로 확률을 추정할 수 있는 상황에서
      • class별 확률을 더해서 가장 높은 class를 결과로 출력
      • hard voting보다 더 성능이 좋다!

     

    Bagging and Pasting

    • training set에서 random하게 sampling하여 subset을 만든다.
    • 이렇게 만들어진 여러가지 subset으로 각각 다른 predicter를 만든다. (모델은 같다)
    • replacement가 있으면 bagging 없으면 pasting
    • 즉, bagging은 중복을 허용.
    • 각각의 predicter는 data set에 대해 bias를 가진다. 하지만 voting을 하면 bias와 variance를 감소시킨다.
    • 그러므로 하나의 predicter보다 ensemble predicter는 더 낮은 variance를 가진다.

     

    Bagging and Pasting in Scikit-Learn

    • pasting을 하고 싶으면 bootstrap=False로 바꿔주면 된다.
    • n_jobs는 학습에 사용할 CPU cores를 뜻한다. -1은 전부를 말한다.

    • Bagging을 했을 때 더 generalized된 결과를 볼 수 있다.
    • ensemble은 더 합리적인 bias와 더 작은 variance를 가지기 때문이다.

     

    • Bootstrapping은 더 다양한 subset으로 학습되기 때문에 bagging은 pasting보다 약간 더 높은 bias를 가지게 된다.
    • 그러나 높은 다양성은 predictor들이 덜 correlated한 것을 의미한다. 그래서 variance가 낮아진다.
    • 전반적으로 bagging이 성능이 좋다.

     

    Out-of-Bag Evaluation

    • bagging에서 어떠한 데이터는 predicter의 training set으로 사용되고 어떤 데이터는 사용되지 않는다.
    • 사용되지 않는 데이터를 out-of-bag라 한다.
    • oob는 모델을 학습할 때 사용되지 않으므로 validation set 대신 evaluation에 사용된다.
    • 최종 성능은 oob의 성능을 평균낸다.

    • oob_score_는 자동으로 oob 성능의 평균을 구해준다.

    • test set의 성능도 올랐다.

     

    Random Patched and Random Subspaces

    • 이전에 bagging이 training set을 sampling한것 처럼 이번에는 input features를 sampling한다.
    • 고차원 features를 이용할 때 유리
    • training set과 input features를 모두 sampling하는 것을 Random Patches method라고 한다.
    • input features만 sampling하는 것을 Random Subspaces method라고 한다.
    • sampling한 features는 더 다양성을 가진다. 낮은 variance를 위해 약간 더 bias를 가지면서

     

    Random Forests

    • Random Forests는 bagging + ensemble of Desicion trees

    • Decision tree를 500개 만들고, leaf node를 16개로 제한하고, 모든 코어를 사용
    • 이 알고리즘은 tree의 다양성을 더 증가시킨다. subset

     

    Extra-Trees

    • 원래 Decision tree처럼 학습을 통해 best possible thresholds를 찾는게 아니라 random thresholds를 사용한다.
    • 이렇게 극단적으로 random인 방법을 Extremely Randomized Trees ensemble(or Extra-Trees) 이라고 한다.
    • 역시나 높은 bias와 낮은 variance를 가진다.
    • 기존 random forest에서 best possible threshold를 찾는데 대부분의 시간을 소요하므로 extra-trees는 보다 빠르게 학습된다.

     

    Feature Importance

    • Random Forests의 더 좋은 버전은 각 feature의 상대적인 중요도를 측정하는 방법이다.
    • 얼마나 많이 feature가 impurity를 감소시키는 노드를 사용하는지

    • MNIST 데이터에 대해 가운데가 중요한 것을 알 수 있다.

     

    Boosting

    • Boosting은 성능 좋은 모델에 성능이 좋지 않은 모델을 결합시키는 ensemble 방법이다.
    • 이전 모델을 올바르게 하는 시도하면서, 모델들을 sequential하게 학습시키는 방법.

     

    AdaBoost

    • 먼저 약한 모델에 데이터셋을 prediction한다.
    • 이때 잘못 분류된 데이터들에 대해 상대적인 weights를 증가시킨다.
    • 다시 학습하고 prediction해 잘못 분류된 데이터들에 대한 weights 증가.
    • AdaBoost는 Gradient Descent와 비슷하다.

    • weights는 처음에 1/m으로 초기화된다.

    • Randomly하게 predict하면 r_j는 0.5가 되고 a_j는 0이 된다.
    • 만약 random보단 성능이 낮으면 r_j는 0.6,  a_j는 음수가 된다.

    • 실제 y와 예측한 y가
      • 같으면 weight는 변하지 않는다.
      • 다르면 이미 계산된 predicter weight에 exponential을 취한 후 곱해진다.
    • 그 다음 weight의 합으로 나눠진다. (nomalize)
    • 다시 새로운 predicter가 위에서 구해진 weight로 학습된다. 그리고 이 동작들이 반복된다.
    • 이 알고리즘은 predicter의 수가 다 만들어지든가 아님 완벽한 predicter가 만들어지면 끝난다.

    • 최종적으로 AdaBoost가 prediction할 때는 predicter weight를 곱해 prediction 한다.

    • Mulitclass AdaBoost Classifier를 사용할 때는 SAMME 알고리즘을 사용한다. 모델의 출력으로 확률이 나올  때는 SAMME.R

     

    Gradient Boosting

    • Gradient Boosting은 AdaBoost에서 모든 iteration에서 instance weight를 수정하는 것에 비해 이전 모델에서 만들어진 남은 에러만 수정한다.

    • 먼저 학습 시킨후

    • 첫번째에서 생긴 에러만 다시 학습

    • 계속 반복한다.

    • Prediction할 때는 모두 더한다.

    • 왼쪽은 각각의 tree를 보여주고 오른쪽은 ensemble된 결과를 보여준다.
    • 남은 에러만 계속 학습함으로써 모두 ensemble한 결과에서 나은 결과를 볼 수 있다.

    • 너무 많은 트리와 낮은 learning rate는 overfitting을 유발한다.
    • 이를 방지하는 것을 shrinkage라한다. 

    • Early stopping도 사용할 수 있다.

     

    • GradientBoostingRegressor class에는 subsample이라는 hyperparameter가 존재한다.
    • 이는 학습되는 training set을 sampling하는 비율을 뜻한다.
    • Bagging때 처럼 낮은 variance를 위한 높은 bias를 가지게 한다.
    • 속도도 빨라진다.
    • 이를 Stochastic Gradient Boosting이라고 한다.

     

    Stacking

    • Stacking은 ensemble로부터 나온 prediction들을 다시 입력으로 받는 blending predictor를 가진다.

    • Hold-out set이란 2개의 subset으로 나누고 하나의 set으로만 학습하는 것을 말한다.
    • 마치 train, test처럼 이 모델은 test set으로는 학습되지 않는 것을 의미한다.

    • 두 개의 subset중 하나는 첫번째 layer를 학습하고 다른 subset으로는 첫번째 layer를 통과하고 나온 prediction을 만들고 이로부터 두번째 layer를 학습시킨다.

     

    • 이번에는 데이터셋을 3개로 나누어서 각각 layer를 학습시킨다.

     

    반응형
Designed by Tistory.