-
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 DecisionTreeClassifierbag_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가 해당 관측치들을 더 많이 고려하게 하는 방법으로 보통 분류문제에 적용한다.
- 학습데이터에 있는 모든 관측치의 weight를 동일하게 설정: weight = 1/n
- subsampling with replacement using weights: 가중치가 높을수록 subsample에 뽑힐 확률이 큼
- subsamples를 사용하여 학습 진행
- 학습 결과를 orginal dataset에 적용하여 error 정도를 계산
- 전체에러 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는 감소한다. - 2-5단계를 반복한다.
- 새로운 관측치에 대한 종속변수 값은 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)를 추가적으로 설명하는 방법이다. 회귀문제와 분류문제 모두 적용 가능하다.
- Fit the model into the data
- Obtain predicted values for data points: yhat(1,i)
- Caculate residuals: r(1,i) = y(i) - yhat(1,i)
- Calculate predicted values using r(1,i) as a dependent variable: rhat(1,i)
- yhat(2,i) = yhat(1,i) + rhat(1,i)
- 해당 과정을 반복하면 최종 예측치 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