본문 바로가기
개발 Tools/파이썬_Deep learning & ML

머신러닝 앙상블 배깅(Bagging), 랜덤 포레스트(random forest)

by 전컴반 2021. 8. 30.
반응형
배깅(Bagging)

 

배깅이란, 보팅과 다르게 서로 같은 알고리즘의 분류기 조합으로 이루어진다. 간단히 예를 들어보면 결정 트리 알고리즘으로만 이루어진 분류기를 사용한다는 말이다.

 

이때 데이터의 중첩을 허용한다.

무슨 말이냐면, 예를 들어 0부터 5까지 데이터가 있는데 3개의 분류기를 만든다고 가정하자. 그럼 우린 [0,1,2,3,4,5] 중에 6개의 데이터를 가진 분류기를 3개 만들어야 되는데.

분류기 1의 데이터는 [0,0,3,4,5,5] 분류기 2의 데이터는 [0,1,2,3,4,5] 분류기 3의 데이터는 [0,1,1,2,4,5] 이런 식으로 개별 데이터의 중첩을 허락한다는 의미다. 

 

대표적인 배깅 방식은 랜덤 포레스트이다. 따라서 랜덤 포레스트를 예로 들어보겠다

 

파라미터

 

n_estimators

-결정 트리의 개수를 정한다. 디폴트는 10개이며 많을수록 시간이 오래 걸린다는 단점이 있다.


max_features

-전체 피처 개수만큼 고려하여 분류한다. 분류할 때 기준이 있어야 하는데 그때 기준이 된다.


max_depth

-과적합을 개선하기 위해 사용되는 파라미터이다.

 

라이브러리

 

from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
import numpy as np
from sklearn.model_selection import GridSearchCV

 

 

유방암 데이터를 사용할 것이다.

 

모델 생성

 

cancer = load_breast_cancer()
np.random.seed(9)
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, stratify=cancer.target)

params = {'n_estimators': [100], 'max_depth': [6, 8, 10, 12], 'min_samples_leaf': [8, 12, 18],
          'min_samples_split': [8, 16, 20]}

clf = RandomForestClassifier(n_estimators=100)
grid_clf = GridSearchCV(clf, param_grid=params, cv=2, n_jobs=-1)  # -1 은 cpu를 다 쓴다는 의미
grid_clf.fit(X_train, y_train)

print(f"최적의 파라미터\n{grid_clf.best_params_}")
print(f"최고 예측 정확도: {grid_clf.best_score_}")

출력
최적의 파라미터
{'max_depth': 12, 'min_samples_leaf': 8, 'min_samples_split': 8, 'n_estimators': 100}
최고 예측 정확도: 0.9483568075117371

 

최적의 파라미터를 알아보기 위해 GridSearch를 사용했다. 

이렇게 간단히 모델을 생성하여 예측했다. 이번 포스팅은 랜덤 포레스트가 목적이 아니라 배깅의 방식을 알아보는데 초점을 맞췄다.

 

랜덤 포레스트는 따로 올릴 예정이다. 

 

정리하면 배깅은 하나의 알고리즘을 사용하여 분류기를 만들어 내는 방식이다

반응형

댓글