Bagging(배깅)
ㄴ Bootstrap Aggregation의 약자
ㄴ 배깅은 샘플을 여러 번 뽑아(Bootstrap) 각 모델을 학습시켜 결과물을 집계 (Aggregration) 하는 방법
ㄴ 데이터로부터 부트스트랩 한 데이터로 모델을 학습시키고 학습된모델의 결과를 집계하여 최종 결과값을 도출
from sklearn.ensemble import BaggingRegressor
from xgboost import XGBRegressor
model = BaggingRegressor(XGBRegressor(),
n_estimators=100,
n_jobs=-1,
random_state=72
)
ml16_bagging_iris.py
import numpy as np
from sklearn.model_selection import train_test_split, StratifiedKFold # Stratified : 일반적으로 분류모델에서 사용(분류 문제에서는 클래스별로 데이터가 골고루 분포되지 않을 수 있음)
from sklearn.model_selection import GridSearchCV
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import BaggingClassifier
from sklearn.datasets import load_iris
from sklearn.preprocessing import MinMaxScaler
import time
# 1. 데이터
datasets = load_iris()
x = datasets.data
y = datasets.target
x_train, x_test, y_train, y_test = train_test_split(
x, y, test_size=0.2, shuffle=True, random_state=42
)
# Scaler
scaler = MinMaxScaler()
x_train = scaler.fit_transform(x_train)
x_test = scaler.transform(x_test)
# KFold
n_splits = 5
kfold = StratifiedKFold(n_splits=n_splits, shuffle=True, random_state=42)
# param
param = {
'n_estimators' : [100],
'random_state' : [42, 62, 72],
'max_features' : [3, 4, 7]
}
# 2. 모델 (Bagging)
bagging = BaggingClassifier(DecisionTreeClassifier(),
n_estimators=100, # 100개의 복제된 결정 트리 분류기가 생성되며, 각각의 분류기는 부트스트래핑된 샘플 데이터에 대해 독립적으로 학습
n_jobs=-1, # 모든 CPU 코어를 사용하여 작업을 병렬화 --> 훈련 속도 향상
random_state=42)
model = GridSearchCV(bagging, param, cv=kfold, refit=True, n_jobs=-1)
# refit=True: 최적의 매개변수로 모델을 재학습 시킴
# 3. 훈련
start_time = time.time()
model.fit(x_train, y_train)
end_time = time.time() - start_time
# 4. 평가, 예측
result = model.score(x_test, y_test)
print('최적의 매개변수 : ', model.best_estimator_)
print('최적의 파라미터 : ', model.best_params_)
print('걸린 시간 : ', end_time, '초')
print('Bagging 결과 : ', result)
# 최적의 파라미터 찾기 전 배깅 --> model = BaggingClassifier(DecisionTreeClassifier()
# 걸린 시간 : 1.3898603916168213 초
# Bagging 결과 : 1.0
# 최적의 파라미터 찾은 후 배깅
# 최적의 매개변수 : BaggingClassifier(estimator=DecisionTreeClassifier(), max_features=4,
# n_estimators=100, n_jobs=-1, random_state=42)
# 최적의 파라미터 : {'max_features': 4, 'n_estimators': 100, 'random_state': 42}
# 걸린 시간 : 2.2870166301727295 초
# Bagging 결과 : 1.0
ㄴ model.best_estimator_ : 최적의 매개변수
ㄴ model.best_params_ : 최적의 파라미터 --> 최적의 모델에 대한 최적의 하이퍼파라미터를 딕셔너리 형태로 반환
= > scikit-learn의 그리드 서치(GridSearchCV)나 랜덤 서치(RandomizedSearchCV) 등의 하이퍼파라미터 튜닝을 수행한 후, 최적의 모델과 그에 대한 최적의 하이퍼파라미터를 확인
ml16_bagging_cancer.py
import numpy as np
from sklearn.model_selection import train_test_split, StratifiedKFold
from sklearn.model_selection import GridSearchCV
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import BaggingClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import MinMaxScaler
import time
# 1. 데이터
datasets = load_breast_cancer()
x = datasets.data
y = datasets.target
x_train, x_test, y_train, y_test = train_test_split(
x, y, test_size=0.2, shuffle=True, random_state=42
)
# Scaler
scaler = MinMaxScaler()
x_train = scaler.fit_transform(x_train)
x_test = scaler.transform(x_test)
# KFold
n_splits = 5
kfold = StratifiedKFold(n_splits=n_splits, shuffle=True, random_state=42)
# param
param = {
'n_estimators' : [100],
'random_state' : [42, 62, 72],
'max_features' : [3, 4, 7]
}
# 2. 모델 (Bagging)
bagging = BaggingClassifier(DecisionTreeClassifier(),
n_estimators=100,
n_jobs=-1,
random_state=42)
model = GridSearchCV(bagging, param, cv=kfold, refit=True, n_jobs=-1)
# refit=False 일 경우, 적용은 안 되고 최적의 파라미터만 찾아짐
# refit=True 일 경우, 적용하여 훈련 시킴
# 3. 훈련
start_time = time.time()
model.fit(x_train, y_train)
end_time = time.time() - start_time
# 4. 평가, 예측
result = model.score(x_test, y_test)
print('최적의 매개변수 : ', model.best_estimator_)
print('최적의 파라미터 : ', model.best_params_)
print('걸린 시간 : ', end_time, '초')
print('Bagging 결과 : ', result)
# 최적의 파라미터 찾기 전 배깅 --> model = BaggingClassifier(DecisionTreeClassifier()
# 걸린 시간 : 1.883936882019043 초
# Bagging 결과 : 0.956140350877193
# 최적의 파라미터 찾은 후 배깅
# 최적의 매개변수 : BaggingClassifier(estimator=DecisionTreeClassifier(), max_features=7,
# n_estimators=100, n_jobs=-1, random_state=42)
# 최적의 파라미터 : {'max_features': 7, 'n_estimators': 100, 'random_state': 42}
# 걸린 시간 : 3.334315776824951 초
# Bagging 결과 : 0.9649122807017544
ml16_bagging_wine.py
import numpy as np
from sklearn.model_selection import train_test_split, StratifiedKFold
from sklearn.model_selection import GridSearchCV
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import BaggingClassifier
from sklearn.datasets import load_wine
from sklearn.preprocessing import MinMaxScaler
import time
# 1. 데이터
datasets = load_wine()
x = datasets.data
y = datasets.target
x_train, x_test, y_train, y_test = train_test_split(
x, y, test_size=0.2, shuffle=True, random_state=42
)
# Scaler
scaler = MinMaxScaler()
x_train = scaler.fit_transform(x_train)
x_test = scaler.transform(x_test)
# KFold
n_splits = 5
kfold = StratifiedKFold(n_splits=n_splits, shuffle=True, random_state=42)
# param
param = {
'n_estimators' : [100],
'random_state' : [42, 62, 72],
'max_features' : [3, 4, 7]
}
# 2. 모델 (Bagging)
bagging = BaggingClassifier(DecisionTreeClassifier(),
n_estimators=100,
n_jobs=-1,
random_state=42)
model = GridSearchCV(bagging, param, cv=kfold, refit=True, n_jobs=-1)
# 3. 훈련
start_time = time.time()
model.fit(x_train, y_train)
end_time = time.time() - start_time
# 4. 평가, 예측
result = model.score(x_test, y_test)
print('최적의 매개변수 : ', model.best_estimator_)
print('최적의 파라미터 : ', model.best_params_)
print('걸린 시간 : ', end_time, '초')
print('Bagging 결과 : ', result)
# 최적의 파라미터 찾기 전 배깅 --> model = BaggingClassifier(DecisionTreeClassifier()
# 걸린 시간 : 1.7651467323303223 초
# Bagging 결과 : 0.9722222222222222
# 최적의 파라미터 찾은 후 배깅
# 최적의 매개변수 : BaggingClassifier(estimator=DecisionTreeClassifier(), max_features=3,
# n_estimators=100, n_jobs=-1, random_state=42)
# 최적의 파라미터 : {'max_features': 3, 'n_estimators': 100, 'random_state': 42}
# 걸린 시간 : 2.6730213165283203 초
# Bagging 결과 : 1.0
ml16_bagging_california.py
import numpy as np
from sklearn.model_selection import train_test_split, KFold
from sklearn.model_selection import GridSearchCV
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import BaggingRegressor
from sklearn.datasets import fetch_california_housing
from sklearn.preprocessing import MinMaxScaler
import time
# 1. 데이터
datasets = fetch_california_housing()
x = datasets.data
y = datasets.target
x_train, x_test, y_train, y_test = train_test_split(
x, y, test_size=0.2, shuffle=True, random_state=42
)
# Scaler
scaler = MinMaxScaler()
x_train = scaler.fit_transform(x_train)
x_test = scaler.transform(x_test)
# KFold
n_splits = 5
kfold = KFold(n_splits=n_splits, shuffle=True, random_state=42)
# param
param = {
'n_estimators' : [100],
'random_state' : [42, 62, 72],
'max_features' : [3, 4, 7]
}
# 2. 모델 (Bagging)
bagging = BaggingRegressor(DecisionTreeRegressor(),
n_estimators=100,
n_jobs=-1,
random_state=42)
model = GridSearchCV(bagging, param, cv=kfold, refit=True, n_jobs=-1)
# 3. 훈련
start_time = time.time()
model.fit(x_train, y_train)
end_time = time.time() - start_time
# 4. 평가, 예측
result = model.score(x_test, y_test)
print('최적의 매개변수 : ', model.best_estimator_)
print('최적의 파라미터 : ', model.best_params_)
print('걸린 시간 : ', end_time, '초')
print('Bagging 결과 : ', result)
# 최적의 파라미터 찾기 전 배깅 --> model = BaggingRegressor(DecisionTreeRegressor()
# 걸린 시간 : 3.9007744789123535 초
# Bagging 결과 : 0.8042348744721923
# 최적의 파라미터 찾은 후 배깅
# 최적의 매개변수 : BaggingRegressor(estimator=DecisionTreeRegressor(), max_features=7,
# n_estimators=100, n_jobs=-1, random_state=42)
# 최적의 파라미터 : {'max_features': 7, 'n_estimators': 100, 'random_state': 42}
# 걸린 시간 : 49.98332118988037 초
# Bagging 결과 : 0.822087951242456
'네이버클라우드 > AI' 카테고리의 다른 글
AI 7일차 (2023-05-16) 인공지능 기초 _머신러닝 - outliers (아웃라이어) (0) | 2023.05.16 |
---|---|
AI 7일차 (2023-05-16) 인공지능 기초 _머신러닝 - Voting(보팅) (0) | 2023.05.16 |
AI 7일차 (2023-05-16) 인공지능 기초 _머신러닝 - 하이퍼파라미터 튜닝_GridSearchCV (그리드서치) (0) | 2023.05.16 |
AI 6일차 (2023-05-15) 인공지능 기초 _머신러닝 - Boosting 계열의 모델 (0) | 2023.05.16 |
AI 6일차 (2023-05-15) 인공지능 기초 _머신러닝 - Feature Importances (0) | 2023.05.15 |