ML

DAY 4 ( Ensemble model [ Voting, Bagging, Boosting ], 유방암 예측 모델 실습, AdaBoost, GBM, XGBoost, early Stopping )

도키마 2024. 7. 4. 15:36

 

 

 

 

 

 

오늘의 노래 추천 🦁

 

 
Zoo
아티스트
Red Velvet (레드벨벳)
앨범
The Red Summer - Summer Mini Album
발매일
1970.01.01

 

정말 동물원 or safari 느낌이 나는 첫 귀에도 듣기 좋은 곡

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

DAY 4



 

 

 

 

 

 

 

 

 

 

 

 

 

 

[  Ensemble model ]

앙상블

 

 

 

 

여러 개의 ML model 을 연결해 더 강력한 model 을 만드는 기법

* 분류와 회귀에 모두 사용 가능

 

 

3가지 Ensemble 기법 ㅡ>  " Voting, Bagging, Boosting "

 

 

 

 

 

 

 

 

[ Voting ]

 Ensemble Voting 방식

 

 

 

서로 다른 모델을 결합해 투표를 통해 최종 예측 결과를 결정

 

Voting 방식

 

 

Hard Voting VS Soft Voting

voting의 종류

 

 

harad voting

 

soft voting

 

ㅡ> 더 학습률이 높고 최적화됨

 

 

 

 

 

 

 

 

[ Bagging ]

 Ensemble Bagging 방식

 

 

 

'같은 알고리즘' 으로 여러개의 모델을 만들어 투표를 통해 최종 예측 결과를 결정

ex ) random forest

 

Bagging 방식

 

 

 

 

 

 

 

 

[ Boosting ]

 Ensemble Boosting 방식

 

 

 

성능이 낮은 여러 모델 이용

1. 첫 모델이 예측하면 결과에 따라 오차 데이터에 '가중치' 부여

2. 가중치가 다음 모델에 영향을 주고 오차 데이터에 집중해

ㅡ> 개선된 분류 규칙을 만드는 것 반복, 성능 향상된 모델을 만듬

ex ) AdaBoost, GradientBoost, XGBoost

 

 

Bagging vs Boosting

 

voting과 Bagging은 병렬 구조로 독립적인 반면

Boosting은 이전 모델의 오차를 고려해 순차 처리하는 연속 앙상블임

 

 

 

 

 

 

 

 


[ RandomForest 유방암 데이터 실습 ]

 

유방암 데이터를 이용해 100개의 트리로 구성된 RandomForest 모델로 학습,

특징 중요도를 구하고 bar 차트로 표현

 

 

 

 

 

ㅡ RandomForest ㅡ

 

 

 

여러 개의 결정 트리 분류 모델이 각자의 데이터를 샘플링 해 개별적으로 학습

ㅡ> 모든 분류기가 soft voting 을 통해 예측 수행

 

서로 다른 방향의 과대적합 모델들을 만들어 평균을 내고 일반화

* 분류와 회귀 모두 사용 가능

 

RandomForest hyper parameter

 

RandomForestClassifier ( n_estimators, random_state )

* random_state = 100 으로 설정

 

 



 

 

ㅡ 드라이브 마운팅 후 data 불러오기 ㅡ

pd.read_csv

 

pd.read_csv

 

info ()

 

 

 

 

ㅡ 불필요한 column 삭제 ㅡ

drop ( axis=1 )

 

drop ()

 

 

 

 

ㅡ 답지 데이터 mapping ㅡ

map ()

 

map ()

 



 

ㅡ 답지 데이터 시각화 ㅡ

plt.hist ()

 

그래프 plt.hist




 

ㅡ Decision Tree model 생성 ㅡ

DecisionTreeClassifier

 

Decision Tree 모델 생성



 

 

ㅡ knn, LR, voting 모델 import ㅡ

VotingClassifier, KNeighborsClassifier, LogisticRegression

 

import

 

VotingClassifier 은 분류/회귀에서 분류 모델 사용



 

 

ㅡ knn, lr 개별 모델 생성 ㅡ

KNeighborsClassifier, LogisticRegression

 

KNeighborsClassifier, LogisticRegression

 

max_iter ㅡ> 학습 과정에서 사용할 최대 반복 횟수 ( 기본 100 )

각각 n_neighbors, max_iter 값 설정

 



 

ㅡ Voting 앙상블 모델 생성 ㅡ

VotingClassifier

 

VotingClassifier

 

estimators : 사용할 개별 모델들을 리스트 형식으로 정의

Voting 방식은 soft 로 지정




 

ㅡ 앙상블/개별 모델 학습, 예측 ㅡ

fit (), predict ()

 

fit ()
predict ()

 

 

 

 

ㅡ 각 모델 별 score 출력 ㅡ

accuracy_score ()

 

accuracy_score ()

 

 

 

 


ㅡ RandomForest  parameter ㅡ

 

RandomForest

 

n_estimators : tree 개수 ( 기본 100 )

max_features : DT 최종 결과 개수

그 외 max_depth, min_samples_split, min_samples_leaf 등

 

 

 

 

 

ㅡ RandomForest 모델 생성 및 학습 ㅡ

RandomForestClassifier

 

RandomForestClassifier, fit ()

 

 

 

 

ㅡ RandomForest 정확도 출력 ㅡ

accuracy_score ()

 

accuracy_score ()

 

 

 

 

 

GridSearchCV

ㅡ RandomForest hyper parameter tuning ㅡ

파라미터 튜닝

 

hyper parameter tuning



 

 

ㅡ params 파라미터 설정 ㅡ

GridSearCV, params

 

params

 

n_estimators 기본값 100, n_jobs=-1 모든 cpu 코어를 통해 학습

 

 

 

 

ㅡ 모델 생성, 학습, 평가 ㅡ

GridSearCV, fit

 

best_score_
best_estimator_



 

 

ㅡ 결과 출력 ㅡ

cv_results_

 

cv_results_

 

cv_results_를 DataFrame 형태로 저장하고 정보를 정렬해 필요한 값 출력

 

 

 

 

 

 

 


[ Adaboost 유방암 데이터 실습 ]

 

유방암 데이터를 이용해 100개의 트리로 구성된 Adaboost 모델로 학습,

특징 중요도를 구하고 bar 차트로 표현



 

 

ㅡ AdaBoost ㅡ

 

 

Decision Tree 기반 모델로 각 트리들이 독립적으로 존재함

ㅡ> 제 해결

 

들어 평일반화

* 분류와 회귀 모두 사용 가능

 

 

AdaBoost

 

Decision Tree 기반의 모델 ㅡ> 각 트리들이 독립적으로 존재

 

AdaBoost hyper parameter

 

 

 

 

 

 

ㅡ AdaBoosting ㅡ

Ensemble Boosting

 

Boosting



 

 

ㅡ library import, AdaBoost model 생성 ㅡ

AdaBoostClassifier

 

import, AdaBoostClassifier

 

learning_rate ( 학습률 ) 은 보통 0.1, 0.2 n_estimators 는 기본값 50

 

 

 

 

ㅡ Cross Validadtion 교차 검증 ㅡ

cross_val_score

 

cross_val_score ()

 

 

 

 

ㅡ 모델 학습, 예측, 평가 ㅡ

fit, predict, accuracy_score

 

accuracy_score

 



 

ㅡ AdaBoost 특성 중요도 출력 ㅡ

feature_importances_

 

feature_importances_
barplot

 

feature_importances_ 를 이용해 특성 중요도를 구하고 DataFrame 형태로 변환 후 정렬해 출력

 

그래프 결과

 

 

 

 

 

 

 


[ GBM 유방암 데이터 실습 ]

 

유방암 데이터를 이용해 100개의 트리로 구성된 GBM 모델로 학습,

특징 중요도를 구하고 bar 차트로 표현

 

 

 

 

ㅡ GBM ㅡ

 

 

여러개의 Decision Tree 를 묶어 강력한 모델을 만드는 Ensemble 기법

ㅡ> AdaBoost 와 유사하지만 AdaBoost 와 달리 강력한 사전 가지치기 사용

 

RandomForest 보다 성능이 뛰어난 경우가 많지만,

학습시간이 오래걸리고 parameter tuning 에 많은 노력 필요

* 분류와 회귀 모두 사용 가능

 

 

GBM 사용법

 

library import 이후 GBM  분류 모델 생성 함수를 호출해 객체를 생성하고

소괄호에 매개변수와 hyper parameter를 설정

 

GBM hyper parameter

 

n_estimators 트리 model의 개수, learning_rate 학습률 ( 가중치 갱신의 변동폭 조정 )

 

 



 

ㅡ GBM ㅡ

Ensemble Boosting

 

GBM Boosting

 

 



ㅡ GBM 모델 import 후 생성 ㅡ

GradientBoostingClassifier

 

GradientBoostingClassifier

 



 

ㅡ Cross Validation 교차 검증 ㅡ

cross_val_score ()

 

cross_val_score ()



 

 

ㅡ 모델 학습, 예측, 평가 ㅡ

fit, predict, accuracy_score

 

accuracy_score




 

ㅡ GBM 특성 중요도 출력 ㅡ

feature_importances_

 

feature_importances_

 

barplot ()


feature_importances_ 를 이용해 특성 중요도를 구하고 DataFrame 형태로 변환 후 정렬해 출력

 

그래프 결과

 

 

 

 

 

 

 


[ XGBoost 유방암 데이터 실습 ]

 

유방암 데이터를 이용해 100개의 트리로 구성된 XGBoost모델로 학습,

특징 중요도를 구하고 bar 차트로 표현



 

 

ㅡ XGBoost ㅡ

가장 각광받는 앙상블 모델 알고리즘 중 하나

 

 

GBM 을 기반으로 하지만 GBM 에서 제공하지 않는

"Early Stopping" 기능과 과대적합 방지를 위한 규제가 포함

ㅡ> GBM 의 단점인 느린 학습 시간과 과대적합 문제 해결

 

서로 다른 방향의 과대적합 모델들을 만들어 평균을 내고 일반화

* 분류와 회귀 모두 사용 가능

** sklearn 에서 제공하지 않음




 

ㅡ XGBoost ㅡ

Ensemble Boosting

 

XGBoost



 

 

XGBoost 모델 import 후 생성 ㅡ

XGBClassifier

 

XGBClassifier

 

sklearn 에서 제공하지 않기 때문에

!pip install xgboost 를 이용해 설치 필요

 

XGBClassifier



 

 

ㅡ Cross Validation 교차 검증 ㅡ

cross_val_score ()

 

cross_val_score ()



 

 

ㅡ 모델 학습, 예측, 평가 ㅡ

fit, predict, accuracy_score

 

accuracy_score

 

 

 

 

 

 

 


[ XGBoost Early Stopping 조기중단 ]

 

유방암 데이터를 이용해 100개의 트리로 구성된 XGBoost모델로 학습,

특징 중요도를 구하고 bar 차트로 표현

 

 

 

 

ㅡ XGBoost early Stoppingㅡ

Ensemble Boosting

 

XGBoost early Stopping

 

train 데이터를 split 해서 validation data 생성

ex) X_train ㅡ> X_tra, X_val

 



 

ㅡ train 데이터 split ㅡ

train_test_split

 

train_test_split
shape

 

train 데이터를 split 해서 validation 데이터를 만듬

 

 

 

 

ㅡ xgb 모델 생성 ㅡ

XGBClassifier

 

XGBClassifier

 

 



ㅡ 평가를 수행할 data set 만들기 ㅡ

eval_set

 

data set


[ ( train 문제, train 답지 ), ( val 문제, val 답지 ) ]

 

 

 

 

ㅡ early stopping 모델 학습 ㅡ

fit, parameter

 

parameter
평가지표

 

조기 종료 parameter ㅡ> early_stopping_rounds, early_metric, early_set

분류 모델의 평가 지표 ㅡ> logloss, error, auc, aucpr

 

 

fit ( x, y, 데이터 셋, early stopping parameter )

소괄호에 파라미터값을 지정해줘야함

 

logloss

 

logloss, 손실값이 감소하다 어느순간 증가하는 것을 볼 수 있음

 

 

 

 

ㅡ 모델 예측 ㅡ

predict_proba ()

 

predict_proba ()

 

 

 

 

 

 

 

 

[ 최종 accuracy 결과 ]

Ensemble Boosting

 

accuracy

 

 

 




 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 



 

 

 

 

 

BYE