앙상블 부스팅
부스팅(Boosting)은 여러 개의 약한 학습기(weak learner)를 순차적으로 학습시켜 예측하면서 잘 못 예측한 데이터에 가중치를 부여하여 오류를 개선해 나가며 학습하는 앙상블 모델이다. (배깅은 한 번에 여러 개의 데이터셋에서 학습한 결과를 종합하는 병렬식 앙상블, 부스팅은 직렬식이라고 볼 수 있다.)
scikit-learn
부스팅은 ensemble 안에 있다.
사이킷런에서는 AdaBoosting과 GradientBoosting을 지원하고 있다.
AdaBoosting
AdaBoosting은 AdaBoostingClassifier(분류)와 AdaBoostingRegressor(회귀) 알고리즘이 있다.
두 방식의 기본 옵션은 동일하며, base_estimator와 n_estimator가 핵심 하이퍼파라미터다.
(실습에선 base_estimator는 건드리지 않았다.)
GradientBoosting
GradientBoosting 역시 분류와 회귀의 기본 옵션이 동일하다.
다만 GradientBoosting의 알고리즘 방식은 학습률(learning_rate)을 설정하여 오차(loss)를 줄이는 방향으로 찾아나가는 방식을 취하기 때문에 옵션 설정이 다소 복잡하다.
Part1. 분류(Classification)
AdaBoosting 앙상블 모델 적용
#Part1. 분류(Classification)
#AdaBoosting 앙상블 모델 적용
from sklearn.ensemble import AdaBoostClassifier
model = AdaBoostClassifier(n_estimators=100, random_state = 0)
model.fit(X_scaled_train, y_train)
pred_train=model.predict(X_scaled_train)
model.score(X_scaled_train, y_train)
실습 예제와 같이 나도 데이터셋 분리, 정규화 작업은 생략하였다.
AdaBoostClassifier 라이브러리를 사용했고, base_estimator는 설정하지 않았다.
모델 수행횟수(n_estimators)는 100번으로 설정했더니 정확도가 100%가 나왔다. (과대적합 가능성 큼)
오차행렬과 분류예측 레포트
from sklearn.metrics import confusion_matrix
confusion_train = confusion_matrix(y_train, pred_train)
print("훈련데이터 오차행렬:\n", confusion_train)
from sklearn.metrics import classification_report
cfreport_train = classification_report(y_train, pred_train)
print("분류예측 레포트:\n", cfreport_train)
오차행렬은 모두 정분류로 나타났으며, 분류예측 레포트에선 95%의 정확도를 보였다.
테스트데이터 오차행렬은 정상 5, 환자 3명이 오분류 되었으며, 훈련데이터와 비슷하게 95% 정확도를 보였다.
GradientBoosting 앙상블 모델 적용
#GradientBoosting 앙상블 모델 적용
from sklearn.ensemble import GradientBoostingClassifier
model = GradientBoostingClassifier(n_estimators = 100, learning_rate = 0.1, max_depth=1, random_state=0)
model.fit(X_scaled_train, y_train)
pred_train=model.predict(X_scaled_train)
model.score(X_scaled_train, y_train)
GradientBoosting에서도 base_estimator는 설정하지 않고 모델 수행횟수는 100번으로 설정했다.
학습률(learning_rate=0.1, max_depth=1)을 설정한 후 결과를 실행했더니 98% 정확도를 보였다.
오차행렬
from sklearn.metrics import confusion_matrix
confusion_train = confusion_matrix(y_train, pred_train)
print("훈련데이터 혼동행렬:\n", confusion_train)
pred_test = model.predict(X_scaled_test)
model.score(X_scaled_test, y_test)
혼동행렬을 확인해보니 교재와 다르게 오분류된 데이터 몇 개를 확인할 수 있었다.
Part2. 회귀(Regression)
AdaBoosting 앙상블 모델 적용
#Part2. 회귀(Regression)
#AdaBoosting 앙상블 모델 적용
from sklearn.ensemble import AdaBoostRegressor
model = AdaBoostRegressor(random_state=0, n_estimators=100)
model.fit(X_scaled_train, y_train)
pred_train = model.predict(X_scaled_train)
model.score(X_scaled_train, y_train)
pred_test = model.predict(X_scaled_test)
model.score(X_scaled_test, y_test)
AdaBoostingRegressor로 100회 모델 개선 과정을 거치는 실습을 해보았다.
훈련데이터 정확도 43.5%, 테스트 데이터 정확도 43.6% 정도 나타내었다.
RMSE 오차 확인
#RMSE (Root Mean Squared Error)
import numpy as np
from sklearn.metrics import mean_squared_error
MSE_train = mean_squared_error(y_train, pred_train)
MSE_test = mean_squared_error(y_test, pred_test)
print("훈련데이터 RMSE: ", np.sqrt(MSE_train))
print("테스트데이터 RMSE: ", np.sqrt(MSE_test))
GradientBoosting 앙상블 모델 적용
#GradientBoosting 앙상블 모델 적용
from sklearn.ensemble import GradientBoostingRegressor
model = GradientBoostingRegressor(random_state=0)
model.fit(X_scaled_train, y_train)
pred_train = model.predict(X_scaled_train)
model.score(X_scaled_train, y_train)
주택가격 회귀 예측 진행 결과 61.8%의 높은 정확도를 보였다.
테스트데이터 역시 59.7%로 다른 개별 알고리즘보다 좋은 편이다.
RMSE 오차 확인
#RMSE(Root Mean Squared Error)
import numpy as np
from sklearn.metrics import mean_squared_error
MSE_train = mean_squared_error(y_train,pred_train)
MSE_test = mean_squared_error(y_test, pred_test)
print(np.sqrt(MSE_train))
print(np.sqrt(MSE_test))
'자기계발 > Python' 카테고리의 다른 글
[빅데이터분석기사] 24 선형회귀모델 (0) | 2022.06.24 |
---|---|
[빅데이터분석기사] 23 앙상블 스태킹 (0) | 2022.06.24 |
[빅데이터분석기사] 21 앙상블 배깅 (0) | 2022.06.23 |
[빅데이터분석기사] 20 투표기반 앙상블 (0) | 2022.06.23 |
[빅데이터분석기사] 19 랜덤포레스트 (0) | 2022.06.22 |