본문 바로가기
데이터 분석

Ensemble(앙상블)(RandomForest, GB, HGB, XGB, LGBM)

by JoinInNoetic 2023. 12. 13.

◆ 랜덤포레스트

- 전체 샘플에서 랜덤샘플을 선택하는 방식

- 그레이언트 디센트의 샘플링과 동일

- 선택된 샘플이 다시 셋트로 돌아오며 이 방법을 부트스트랩 샘플링이라고 함

- 깊이가 얕고 트리를 많이 생성하는게 목적이다보니, 루트를 씌운 갯수만큼의 특성만 사용하여 최선의 분할을 선택해서 가지치기를 함

- 그 다음, 각 트리의 클래스별 확률을 평균내어 가장 높은 확률을 가진 클래스를 예측값으로 사용

 

● 데이터 준비

 

● 랜덤포레스트 모델

from sklearn.ensemble import RandomForestClassifier

 

● 훈련값 확인

rf.feature_importances_   # 컬럼별 중요도

 

OutOfBag 샘플 테스트

rf.oob_score_    # OutOfBag : 붓트스트랩(일정 개수 랜덤축출 후 학습) 후 남는 샘플 -> 검증시 사용

rf = RandomForestClassifier(oob_score=True)

rf.fit()

rf.oob_score_   # 검증 점수

 

◆ 엑스트라 트리 - 잘 사용 안함

- 아무 질문으로 트리를 만듬

from sklearn.ensemble import ExtraTreesClassifier

et = ExtraTreesClassifier()

 

◆ 그레디언트 부스팅

- 그레디언트 부스팅은 경사 하강 알고리즘에서 학습법을 트리 모델을 사용하여 손실을 줄이는 알고리즘

- 깊이가 3인 트리를 100개 만드는 디폴트값을 가지고 있음

- 분류기 중에서 손실함수의 최적화된 SGD와 분류 성능이 강력한 트리를 앙상블하여 오버피팅에도 강하고 성능도 매우 강력함

- HGB, XGB, LightGBM 등 속함

from sklearn.ensemble import GradientBoostingClassifier

gb = GradientBoostingClassifier(n_estimators= , learning_rate= )   

# n_estimators : 트리 개수 / learning_rate : 경사하강 정도

 

◆ 히스토그램 기반 부스팅(HGB)

- 각 특성의 히스토그램(빈도)에서 구간별로 학습 - 빈도까지 고려(빈도에 대한 질문으로 데이터를 나눔)

- NULL값 처리가 쉬움 - 한 구간이 Null값에 대한 빈도 표시

- 히스토그램 기반 부스팅은 특성 중요도 못뽑음 -> 퍼뮤테이션 임포턴스 추출

from sklearn.ensemble import HistGradientBoostingClassifier

hgb = HistGradientBoostingClassifier()

 

● 퍼뮤테이션 임포턴스

- 첫번째 특성을 무작위로 섞고, 그 외의 특성을 무작위로 섞은 뒤 기존의 데이터셋의 점수와 얼만큼의 차이가 나는지 확인하는 방법론( 특성을 하나씩 인덱스를 섞은 후 정확도를 원래 데이터의 정확도의 차이를 각각 비교)

- 차이가 클수록 해당 특성이 모델에 미치는 영향이 크다는 것을 증명함

- HGB외에도 중요도를 뽑을 수 없는 모델에서 특성 중요도를 뽑을때 유용하게 사용됨

from sklearn.inspection import permutation_importance

hgb.fit()

result = permutation_importance(hgb, train, target, n_repeats=  )    # n_repeats : 반복횟수

result.importances_mean

 

◆ XGB

from xgboost import XGBClassifier

xgb = XGBClassifier(tree_method='hist')    # tree_method='hist' : 트리를 형성할때 빈도도 고려(HGB의 특징)

 

◆ LightGBM

from lightgbm import LGBMClassifier

lgb = LGBMClassifier()