Scikit-Learn(sklearn)에서는 BaggingClassifier, BaggingRegressor를 이용하여 Bagging 예측 모형을 학습할 수 있다 알아보려고 한다. 이번 포스팅에서는 Bagging 예측 모형을 분류 문제와 회귀 문제로 나누어 학습 방법을 알아본다.
- 목차 -
배깅에 대한 개념은 아래 포스팅에 소개했다. 읽어 보면 좋은 내용이 많다.
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)
댓글