ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Ensemble methods
    기계학습이론과실습 2022. 5. 11. 17:14

    지금까지 Decision Tree에 대해 알아보았다. Decision Tree의 장단점은 다음과 같다.

    • Decision Tree는 결과 해석이 직관적으로 가능해 비교적 쉽다.
    • Decision Tree는 일반적으로 모형의 성능이 떨어진다. (=weak learner)

     

    Decision Tree의 단점을 보완하기 위해서 Ensemble methods를 사용한다.

    앙상블(Ensemble)은 합주단이라는 의미를 갖고 있다. 다양한 악기가 어우러져 아름다운 소리를 낼 수 있다.

    • Definition: To combine several (weak) learners into a stronger learner
    • Approaches: 1) Bagging 2) Boosting

    먼저 Bagging 방법에 대해 알아보겠다.

    • Bagging은 Bootstrap Aggregating의 약자이다.
    • 즉, 우리가 갖고 있는 학습 데이터를 이용하여 여러 개의 subsample data를 만들고 (Bootstrap), 각 subsample에서 예측값을 계산하고, 그 값들을 이용하여 최종 예측을 하는 방법이다. (Aggregating)
    • 회귀문제의 경우 예측값들의 평균이 최종 예측치가 되고, 분류문제의 경우 예측값들의 최빈값을 최종 예측치로 사용하거나 예측 확률값들을 합산하여 최종 예측치를 결정한다.
    • Bootstrapping의 경우 randon sampling with replacement 방법을 채택한다. (표본추출시 중복을 허용한다.)
    • subsample size = hyper-parameter = usually original sample size
    • 보통 원데이터의 2/3 정도가 뽑히고 1/3 정도가 중복되어 뽑힌다.

     

    from sklearn.ensemble import BaggingClassifier
    from sklearn.tree import DecisionTreeClassifier

    bag_clf = BaggingClassifier(DecisionTreeClassifier(max_depth=2), n_estimators=1000)
    bag_clf.fit(X_train, y_train)

     

    • Bagging 방법을 사용할 경우 모형의 일반화 가능성을 증가시킬 수 있다고 알려져 있다.
    • 그러나 각 decision node에서 모든 feature를 고려해서 data를 split하게 되는데, 여러 개의 tree를 사용할지라도 매번 비슷한 feature를 사용하게 됨으로 subsample 간의 차이가 미미해진다. 따라서 비슷한 데이터를 여러 번 학습하게 됨으로 과적합 문제가 발생할 수 있다.
    • 해당 문제를 보완하기 위해 Random Forest 방법에서는 각 decision node에서 데이터를 split하기 위해 모든 feature를 사용하는 것이 아니라 random하게 선택된 일부의 features만 사용한다.
    • 사용되는 feature의 수 = hyper-parameter = usually root(p)

     

    from sklearn.ensemble import RandomForestClassifier

    rnd_clf = RandomForestClassifier(n_estimators = 100)
    rnd_clf.fit(X_train, y_train)

     

    • 더 많은 데이터를 학습에 사용하기 위해 OOB(out of box) 데이터를 평가 데이터로 활용할 수 있다.
    • OOB는 random sampling with replacement에서 추출되지 않은 데이터이다.

     

    rnd_clf1 = RandomForestClassifier(n_estimators = 100, oob_score=True)

    rnd_clf1.fit(X, y)


    다음으로 Boosting 방법에 대해 알아보겠다.

    • Boosting 방법은 학습 데이터에 대해서 tree(or learner)를 순차적으로(sequentially) 적용하는 것이다.
    • 각 단계의 tree(or learner)는 이전 tree(or learner)가 잘 설명하지 못한 부분을 보완하는 것이다.
    • 1) Adaptive Boosting 2) Gradient Boosting

     

    Adaboosting은 예측이 제대로 되지 않은 관측치들에 가중치를 주어서 그 다음 learner가 해당 관측치들을 더 많이 고려하게 하는 방법으로 보통 분류문제에 적용한다.

    1. 학습데이터에 있는 모든 관측치의 weight를 동일하게 설정: weight = 1/n
    2. subsampling with replacement using weights: 가중치가 높을수록 subsample에 뽑힐 확률이 큼
    3. subsamples를 사용하여 학습 진행
    4. 학습 결과를 orginal dataset에 적용하여 error 정도를 계산
    5. 전체에러 TE = misclassfied cases / total cases
      모형의 성능 a(t) = 1/2 ln {(1-TE)/TE}
      misclassfied instances의 가중치 w(t) = w(t-1) * e^a(t-1)
      correctly classified instances의 가중치 w(t) = w(t-1) * e^-a(t-1)
      * a(t-1)은 양수이기 때문에 e^a(t-1) > 1, e^-a(t-1) < 1이 되므로
      w(t) of misclassfied instances는 증가하고 w(t) of correctly classified instances는 감소한다.
    6. 2-5단계를 반복한다.
    7. 새로운 관측치에 대한 종속변수 값은 sign(sigma(t=1 to T) a(t) * M(t)(x)) while M(t)(x) = 각 DT가 출력하는 값
      * 즉 1번 모형부터 T번 모형이 출력한 예측값을 모형의 정확도에 비례한만큼 고려하여 최종결정

     

    Gradientboosting은 각 단계에서 tree(or learner)가 이전 단계의 tree(or learner)가 설명하지 못한 부분, 즉 잔차(residual)를 추가적으로 설명하는 방법이다. 회귀문제와 분류문제 모두 적용 가능하다.

    1. Fit the model into the data
    2. Obtain predicted values for data points: yhat(1,i)
    3. Caculate residuals: r(1,i) = y(i) - yhat(1,i)
    4. Calculate predicted values using r(1,i) as a dependent variable: rhat(1,i)
    5. yhat(2,i) = yhat(1,i) + rhat(1,i)
    6. 해당 과정을 반복하면 최종 예측치 yhat(i) = yhat(1,i) + [eta]sigma(t=1 to T)rhat(t,i)
      where eta = learning rate, eta 값은 0-1 사이로 eta 값이 작을 수록 일반화 가능성이 증가하지만 충분한 학습이 이루어지지 않을 수 있으므로 T 값이 커질 필요가 있음

    * subsamples 값(0-1)이 작을 수록 일반화 가능성이 올라간다: hyper-parameter

    * gradient의 값이 크다 = 잔차가 크다 = 해당 관측치가 종속변수를 잘 설명하지 못한다

     

    Create decision trees to predict residual (observed value – predicted value) of ** output value / probability of output class ** with limitation of maximum number of leaves.


    다음으로 세 가지 부스팅 방법에 대해 알아보겠다.

    • XGBoosting(eXtreme Gradient Boosting)
      - 기본적인 Gradient Boosting 방법에 규제화(Regularization) 방법을 추가함
      - 전체 모형의 수(T)와 leaf node의 기여 정도를 규제화 방법을 통해 조절함
      - pip install xgboost
    • Light GBM(Light Gradient Boosting Model)
      - 기존에 사용하던 level-wise growth 방법을 사용하지 않고 leaf-wise growth 방법을 사용함
      - GOSS(Gradient-based One-Side Sampling) 방법을 통해 관측치 추출
        <gradient의 값이 크면 클수록 다음 subsample에 포함될 확률이 높아짐>
        <gradient: 잔차, 모형이 설명하지 못하는 정도>
      - pip install lightgbm
    • CatBoost(Category Boost)
      - 기존 더미변수를 지정 작업이 불필요함
      - pip install catboost

     

    VotingClassifier / VotingRegressor를 통해 Base learners의 결과를 함께 활용할 수도 있다.

    hard = majority voting / soft = sum of probability

     

    '기계학습이론과실습' 카테고리의 다른 글

    SVM (Support Vector Machines)  (0) 2022.05.30
    차원축소(Dimension Reduction)  (0) 2022.05.16
    Decision Tree  (0) 2022.05.04
    Clustering  (0) 2022.05.04
    Course Intro  (0) 2022.05.04

    댓글

Designed by Tistory.