본문 바로가기
Learning-driven Methodology/ML (Machine Learning)

13. 랜덤 포레스트 (Random Forest) / 에이다부스트 (AdaBoost)

by goatlab 2021. 12. 22.
728x90
반응형
SMALL

부스팅 (Boosting)

 

여러 개의 분류기가 순차적으로 학습 수행, 다음 분류기에게는 가중치 (weight)를 부여하면서 학습, 예측 진행한다. 예측 성능이 뛰어나 앙상블 학습을 주도한다. 학습 라운드를 차례로 진행하면서 각 예측이 틀린 데이터에 점점 가중치를 주는 방식이다. 라운드별로 잘못 분류된 데이터를 좀 더 잘 분류하는 모델로 만들어 최종 적으로 모델들의 앙상블을 만드는 방식으로 배깅 알고리즘이 처음 성능을 측정하기 위한 기준 (baseline) 알고리즘으로 많이 사용 된다면, 부스팅 알고리즘은 높은 성능을 내야 하는 상황에서 가장 좋은 선택지이다.

 

https://datascience.eu/machine-learning/gradient-boosting-what-you-need-to-know/

 

첫 번째 라운드 결과 모델에서 어떤 점은 오차가 큰 부분이다. 두 번째 라운드에서 오답으로 분류된 어떤 점에 가중치를 줘 학습한다. 다시 오류가 큰 다른 영역에 가중치를 둬 모델을 개발한다. 결과적으로, 틀린 부분만 집중해서 모델들을 순차적으로 만들고, 해당 모델들은 최종적으로 앙상블한다.

 

배깅과 부스팅의 차이점

 

1. 병렬화 가능 여부
  • 배깅은 데이터가 n개라면 n개의 CPU로 한번에 처리하도록 구조를 설계 할 수 있다. 배깅은 데이터를 나눠 데이터마다 조금씩 다른 모델을 생성한다.
  • 부스팅은 단계적으로 모델들을 생성하고 해당 모델들의 성능을 측정한 후 다음 단계로 넘어가 병렬화를 지원하지 않는다. 부스팅은 배깅에 비해 속도가 매우 떨어진다.
2. 기준 추정치
  • 배깅 개별 모델들은 높은 과대적합으로 모델의 분산이 높다.
  • 부스팅은 각각의 모델에 편향이 높은 기준 추정치를 사용하여 개별 모델 들은 과소적합이 발생하지만 전체적으로 높은 성능을 낼 수 있는 방향으로 학습한다. 부스팅 모델의 이러한 특징을 약한 학습자 (weak learner)라고 부른다.
3. 성능 차이
  • 부스팅은 기본적으로 비용이 높은 알고리즘이다. 비용은 속도나 시간을 말한다.
  • 배깅은 데이터의 부분 집합에 대해 학습을 수행하기 때문에 부스팅보다 좋은 성능을 내기는 어렵다.
  • 초기 성능을 측정할 때는 배깅, 이후의 성능 측정은 부스팅으로 하는 것이 가장 일반적인 접근이다.

 

랜덤 포레스트 (Random Forest)

 

https://www.tibco.com/ko/reference-center/what-is-a-random-forest

 

랜덤 포레스트는 지도 머신 러닝 알고리즘이다. 정확성, 단순성 및 유연성으로 인해 가장 많이 사용되는 알고리즘 중 하나이다. 분류 및 회귀 작업에 사용할 수 있다는 사실과 비선형 특성을 결합하면 다양한 데이터 및 상황에 매우 적합하다.

 

분류, 회귀 분석 등에 사용되는 앙상블 학습 방법의 일종으로, 훈련 과정에서 구성한 다수의 결정 트리로부터 부류 (분류) 또는 평균 예측치 (회귀 분석)를 출력함으로써 동작한다.

 

에이다부스트 (AdaBoost)

 

부스팅 알고리즘 중 대표적인 알고리즘이다. 약한 학습기가 순차적으로 오류 값에 대해 가중치를 부여한 예측 결정 기준을 모두 결합해 예측 수행한다. 매 라운드마다 인스턴스, 즉 개별 데이터의 가중치를 계산하는 방식이다. 매 라운드마다 틀린 값이 존재하고 해당 인스턴스에 가중치를 추가로 주어 가중치를 기준으로 재샘플링 (resampling)한다.

 

알고리즘

 

모든 샘플의 가중치 값을 데이터 개수를 기준으로 1/ N으로 초기화한 다음,

 

 

데이터의 가중치를 사용해 모델을 학습시킨다.  그 다음 해당 분류기의 오류를 계산한다.

 

 

해당 분류기의 가중치를 생성한다.

 

 

모델의 가중치를 사용하여 각 데이터의 가중치를 업데이트한다.

 

 

최종 결과물은 각 모델 가중치와 모델 결과값의 가중합을 연산하여 계산한다.

 

 

스텀프 (Stump)

 

https://www.mygreatlearning.com/blog/adaboost-algorithm/

 

스텀프 (stump)는 ‘그루터기’라는 뜻으로 나무의 윗부분을 자르고 아랫부 분만 남은 상태를 말한다. 에이다부스트에서 스텀프는 학습할 때 큰 나무를 사용하여 학습하는 것이 아니라 나무의 그루터기만을 사용하여 학습한다는 개념이다. 깊이 1 (depth) 또는 2 정도의 매우 간단한 모델을 여러 개 만들어 학습한 후, 해당 모델들의 성능을 에이다부스트 알고리즘을 적용하여 학습하는 형태이다.

 

example

 

titanic_x_train.npy
0.18MB
titanic_y_train.npy
0.01MB

import numpy as np
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score

X = np.load("./titanic_x_train.npy")
y = np.load("./titanic_y_train.npy")

eclf = AdaBoostClassifier(base_estimator=DecisionTreeClassifier(max_depth=2), n_estimators=500)

cross_val_score(eclf, X, y, cv=5).mean()
0.786320066019171
# 비교군으로 RandomForestClassifier를 생성
from sklearn.ensemble import RandomForestClassifier

eclf = RandomForestClassifier(n_estimators=500)
cross_val_score(eclf, X, y, cv=5).mean()
0.8031993905922683
# GridSearchCV를 사용하여 가장 좋은 모델을 찾아 모델의 성능을 향상
eclf = AdaBoostClassifier(base_estimator=DecisionTreeClassifier(max_depth=2),n_estimators=500)

params = {"base_estimator__criterion" : ["gini", "entropy"],
          "base_estimator__max_features" : [7,8,],
          "base_estimator__max_depth" : [1,2],
          "n_estimators": [23,24, 25, 26, 27],
          "learning_rate": [0.4, 0.45, 0.5, 0.55, 0.6]
          }

from sklearn.model_selection import GridSearchCV
grid = GridSearchCV(estimator=eclf, param_grid=params, cv=5, n_jobs=7)
grid = grid.fit(X, y)

grid.best_score_
0.8358027042468101
grid.best_params_
{'base_estimator__criterion': 'gini',
 'base_estimator__max_depth': 2,
 'base_estimator__max_features': 7,
 'learning_rate': 0.6,
 'n_estimators': 26}
grid.best_estimator_.feature_importances_
array([0.15647766, 0.19060085, 0.09387801, 0.03365668, 0.0732818 ,
       0.13875425, 0.03198129, 0.00819229, 0.        , 0.02576316,
       0.        , 0.        , 0.        , 0.03949369, 0.        ,
       0.03247514, 0.02004646, 0.00972156, 0.0410272 , 0.00802741,
       0.03259608, 0.02722659, 0.        , 0.        , 0.00572565,
       0.01027984, 0.02079439])
728x90
반응형
LIST