본문 바로가기
프로그래밍/Scikit-Learn

[Scikit-Learn] 10. 배깅(Bagging) 모형 학습하기 (feat. BaggingClassifier, BaggingRegressor)

by 부자 꽁냥이 2022. 8. 7.

Scikit-Learn(sklearn)에서는 BaggingClassifier, BaggingRegressor를 이용하여 Bagging 예측 모형을 학습할 수 있다 알아보려고 한다. 이번 포스팅에서는 Bagging 예측 모형을 분류 문제와 회귀 문제로 나누어 학습 방법을 알아본다.

 

- 목차 -

1. 분류 문제(BaggingClassifier)

2. 회귀 문제(BaggingRegressor)

 

배깅에 대한 개념은 아래 포스팅에 소개했다. 읽어 보면 좋은 내용이 많다.

 

23. 배깅(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)

 


댓글


맨 위로