Scikit-Learn(sklearn)에서는 BaggingClassifier, BaggingRegressor를 이용하여 Bagging 예측 모형을 학습할 수 있다 알아보려고 한다. 이번 포스팅에서는 Bagging 예측 모형을 분류 문제와 회귀 문제로 나누어 학습 방법을 알아본다.
- 목차 -
배깅에 대한 개념은 아래 포스팅에 소개했다. 읽어 보면 좋은 내용이 많다.
23. 배깅(Bagging)에 대해서 알아보자
이번 포스팅에서는 앙상블 기법의 하나인 배깅(Bagging)에 대해서 알아보고자 한다. 여기서 다루는 내용은 다음과 같다. - 목차 - 1. 배깅(Bagging)이란 무엇인가? 2. 배깅(Bagging) 알고리즘 3. 예제 본 포
zephyrus1111.tistory.com
1. 분류 문제(BaggingClassifier)
붓꽃 데이터를 이용하여 배깅을 분류 문제에 적용해보자. Scikit-Learn에서는 BaggingClassifier 클래스를 이용하여 분류 모형을 학습할 수 있다.
BaggingClassifier 클래스는 base_estimator를 통해 기본 학습기(Base Learner)의 모형 클래스를 설정한다. 그리고 n_estimators는 붓스트랩 샘플 개수(또는 기본 학습기 개수), max_samples는 붓스트랩 샘플 비율, bootstrap은 복원, 비복원 추출 여부, oob_score는 Out-of-bag 데이터를 이용한 검증 여부 등을 설정할 수 있다. 그 외 나머지 인자에 대한 설명은 Scikit-Learning 개발 문서를 참고하기 바란다.
아래 코드는 배깅 모형을 학습하는 코드이다.
import pandas as pd import numpy as np import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') from sklearn.datasets import load_iris, load_boston from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor from sklearn.ensemble import BaggingClassifier, BaggingRegressor iris = load_iris() df = pd.DataFrame(iris.data, columns=iris.feature_names) df['species'] = [iris.target_names[x] for x in iris.target] X = df.drop('species', axis=1) y = df['species'] clf = BaggingClassifier( base_estimator = DecisionTreeClassifier(max_depth=5), ## base learner n_estimators=50, ## 붓스트랩 샘플 개수 또는 base_estimator 개수 max_samples=1, ## 붓스트랩 샘플 비율 => 1이면 학습데이터를 모두 샘플링한다. bootstrap=True, ## 복원 추출, False이면 비복원 추출 oob_score=True, ## Out-of-bag 데이터를 이용한 성능 계산 random_state=100 ).fit(X,y)
모형을 학습했다면 결과를 보아야 한다. predict를 통해 예측할 수 있고 oob_score_, score를 이용하여 모형 성능을 평가할 수 있다.
## 예측 print(clf.predict(X)[:3]) ## 성능 평가 print(clf.oob_score_) ## Out-of-bag 성능 평가 점수 print('정확도 : ', clf.score(X,y)) ## 테스트 성능 평가 점수(Accuracy)

2. 회귀 문제(BaggingRegressor)
보스턴 집값 데이터를 이용하여 배깅을 회귀 문제에 적용해보자. Scikit-Learn에서는 BaggingRegressor를 이용하면 된다. 사용방법은 BaggingClassifier와 거의 동일하다. 다른 점은 base_estimator에 회귀 모형을 위한 클래스를 넣어야 한다는 것이다. BaggingRegressor에 대한 자세한 설명은 Scikit-Learning 개발 문서를 참고하기 바란다.
아래 코드는 배깅 모형을 학습한 것이다.
boston = load_boston() df = pd.DataFrame(boston.data, columns=boston.feature_names) df['MEDV'] = boston.target X = df.drop('MEDV', axis=1) y = df['MEDV'] reg = BaggingRegressor( base_estimator = DecisionTreeRegressor(max_depth=3), ## base learner n_estimators=50, ## 붓스트랩 샘플 개수 또는 base_estimator 개수 max_samples=1, ## 붓스트랩 샘플 비율 => 1이면 학습데이터를 모두 샘플링한다. bootstrap=True, ## 복원 추출, False이면 비복원 추출 oob_score=True, ## Out-of-bag 데이터를 이용한 성능 계산 random_state=100 ).fit(X,y)
마찬가지로 각종 결과를 출력해보자.
## 예측 print(reg.predict(X)[:3]) ## 성능 평가 print(reg.oob_score_) ## Out-of-bag 성능 평가 점수 print('R2 : ', reg.score(X,y)) ## 테스트 성능 평가 점수(Accuracy)

댓글