Ch 5-3에서는 앙상블(Ensemble) 학습에 대해 배웁니다.
앙상블 학습은 우리가 공부한 다양한 알고리즘을 이용합니다.
여러개의 분류기를 만든 후 그 예측을 결합하여 결과를 도출하는 방법입니다.
앙상블 학습에는 대표적으로 Voting, Bagging, Boosting 이 있습니다.
Voting은 말그대로 투표를 통해 가장 좋은 예측을 결과로 삼는 방식입니다.
서로 다른 여러 알고리즘으로 결과를 내고 좋은 성능인걸 선택하는 간단한 방식입니다.
Bagging은 부트스트랩 샘플링으로 훈련한 뒤 결과로 삼는 방식입니다.
부트스트랩 샘플링이란 훈련세트에서 중복을 허락하여 무작위로 만드는 방법입니다.
이러한 데이터로 학습하는데 Voting과 달리 한 알고리즘으로만 훈련합니다.
이후 평균치를 결과로 삼는 방식입니다. Bagging은 과적합 방지에 좋은 효과가 있습니다.
대표적으로 Random Forest 알고리즘이 Bagging을 이용합니다.
Boosting은 순차적으로 학습을 진행하는 방식입니다.
Voting과 Bagging은 훈련들이 병렬적으로 진행되고 합계를 내는 반면, Boosting은
한 훈련을 마치고 결과를 보고 오차가 더 많은 부분에 가중치를 높여서 다음 학습에서
MSE를 줄이는 방향으로 진행됩니다. 분류시 계속 가중치를 붙여나가기에 부스팅이라는 이름이 붙습니다.
효과가 뛰어나 자주 쓰지만 시간이 느리다는 단점이 있습니다.
이번 실습은 Random Forest 와 Boosting 방식을 사용해보겠습니다.
우선 Random Forest 모델입니다.
from sklearn.model_selection import cross_validate # 교차검증
from sklearn.ensemble import RandomForestClassifier # 랜덤포레스트 모델
rfc=RandomForestClassifier(n_jobs=-1) # job=-1 전부 사용
# random forest fit by k-flod 교차검증
scores=cross_validate(rfc, X_train, y_train, return_train_score=True, n_jobs=-1)
print(np.mean(scores['train_score']))
print(np.mean(scores['test_score']))
랜덤 포레스트 모델을 만들고 k-fold 교차검증으로 성능을 검증합니다.
0.9974022965603432
0.8916709854149699
훈련성능과 테스트 성능 모두 뛰어납니다.
이번엔 Gradient Boosting 방식을 사용해봅니다. 그래디언트 부스팅은 깊이가 얕은 결정트리를
부스팅해주는 방식입니다.
from sklearn.ensemble import GradientBoostingClassifier
gb=GradientBoostingClassifier(n_estimators=500, learning_rate=0.2) #learn: default 0.1
scores=cross_validate(gb, X_train, y_train, return_train_score=True, n_jobs=-1)
print(np.mean(scores['train_score']))
print(np.mean(scores['test_score']))
gb.fit(X_train, y_train)
print(gb.feature_importances_)
0.9464595437171814
0.8780082549788999
[0.15833642 0.68028419 0.16137939]
Boosting 방식도 성능이 좋네요.
이번엔 가장 인기있는 히스토그램 기반 그래디언트 부스팅을 써보겠습니다.
from sklearn.ensemble import HistGradientBoostingClassifier
hgb=HistGradientBoostingClassifier()
scores=cross_validate(hgb, X_train, y_train, return_train_score=True, n_jobs=-1)
print(np.mean(scores['train_score']))
print(np.mean(scores['test_score']))
0.9321723946453317
0.8801241948619236
기존 그래디언트 부스팅보다 과적합은 낮아지고 테스트 성능은 올라갔습니다.
이들 말고도 앙상블 학습에는 다양한 방식이 사용되고 있습니다.
다음부터는 Ch 7의 딥러닝부터 공부를 한 후 Ch 6 비지도 학습을 공부하겠습니다.
전체 실습코드는 여기 에서 확인할 수 있습니다.
'CS > 머신러닝' 카테고리의 다른 글
머신러닝 자주 쓰이는 함수 정리 (1) | 2023.02.05 |
---|---|
Feature Engineering 정리 1 (1) | 2023.01.27 |
혼자 공부하는 머신러닝 + 딥러닝 - Ch 5-1 (0) | 2023.01.13 |
혼자 공부하는 머신러닝 + 딥러닝 - Ch 4-1 (0) | 2023.01.12 |
혼자 공부하는 머신러닝 + 딥러닝 - Ch 3-3 (0) | 2023.01.11 |
댓글