728x90
반응형
SMALL
XGBoost
XGBoost (Extreme Gradient Boost)는 2014년 Tianqi Chen에 의해 처음 개발되었으며 그레디언트 부스트보다 훨씬 빠르기 때문에 선호되는 부스팅 방법이다. XGBoost는 확장 가능하고 매우 정확한 그레디언트 부스팅 구현으로 트리 알고리듬을 강화하기 위한 컴퓨팅 성능의 한계를 푸시하며 주로 기계 학습 모델 성능 및 계산 속도를 활성화하기 위해 구축된다. XGBoost를 사용하면 GBDT와 같이 순차적으로 트리가 아닌 병렬로 구축된다. 그것은 그레디언트 값을 스캔하고 이러한 부분 합계를 사용하여 훈련 세트에서 가능한 모든 분할에서 분할의 품질을 평가하는 level-wise (수준별) 전략을 따른다.
포함된 하이퍼파라미터 덕분에 정규화 하이퍼파라미터가 과적합을 방지와 같이 많은 것을 조정할 수 있다.
learning_rate&eta | 가중치 값을 곱하여 사용한다. 이 방법의 목적은 피쳐 가중치를 배열하여 프로세스를 보다 보수적으로 만드는 것이다. default=0.3 (대부분 0.01–0.3) |
max_depth | 트리의 최대 깊이이다. 값이 증가하면 모형이 과적합되기 쉽다. 기본값=6이며 growing_policy=lossguide, max_value=0인 경우에만 해당된다. |
n_estimators | 앙상블 나무의 수 |
alpha | 가중치에 대한 L1 정규화이며 작은 가중치를 권장한다. 기본값 = 1 |
gamma | 복잡성의 정규화를 위한 하이퍼 파라미터 중 하나, 잎에서 분할이 발생하는 데 필요한 최소 손실이다. 기본값 = 0, 감마가 클수록 모형이 더 보수적이다. |
lambda | 가중치에 대한 L2 정규화이며 작은 가중치를 권장한다. 기본값 = 1 |
subsample | 얼마나 많은 데이터 샘플을 훈련할지 결정한다. 기본값=1은 100% 백분율을 의미하며, 0.5로 설정된 경우 데이터의 50%가 랜덤하게 선택된다. |
colsample_bytree | 각 트리를 구성할 때 열의 하위 샘플 비율이다. 기본값은 1이며 하위 샘플링은 구성된 모든 트리에 대해 한 번씩 수행된다. |
colsample_bylevel | 각 수준에 대한 열의 부분표본 비율이다. 기본값은 1이며 트리에서 새 깊이 레벨에 도달할 때마다 서브샘플링이 한 번씩 발생한다. 열은 현재 트리에 대해 선택된 열 집합에서 하위 샘플링된다. |
colsample_node | 각 노드에 대한 열의 하위 샘플 비율이다. 새 분할을 평가할 때마다 하위 샘플링이 한 번씩 수행된다. 열은 현재 수준에 대해 선택된 열 집합에서 하위 샘플링된다. |
min_child_weight | 과적합을 제어하는 데 사용된다. 값이 너무 높으면 적합도가 낮아질 수 있다. 기본값 = 1 |
grow_policy | 트리에 새 노드를 추가하는 방법을 제어한다. LGBM 출시 후 XGBoost에 추가되었다 (wise-leaf로 인해) LGBM의 빠른 속도 때문에 wise-leaf가 XGBoost 작업에 추가된다. 활성화하려면 grow_policy=lossguide, default=depthwise |
objective | 학습 과제를 지정한다 ('regsquarederror' : 손실 제곱을 갖는 회귀 분석, 'reglogistic' : 로지스틱 회귀 분석 등) |
eval_metric | test_data (validation_data)에 대한 평가 메트릭이다 ('rmse': 루트 평균 제곱 오차; 'mae' : 평균 절대 오차, 'mape' : 평균 절대 백분율 오차) |
import numpy as np
from time import time
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score,train_test_split
from sklearn.model_selection import KFold
from xgboost import XGBClassifier
x,y = make_classification(n_samples=100000, n_features=30, n_informative=10,
n_redundant=5, random_state=2023)
xgb = XGBClassifier()
start_xgb = time()
kf = KFold(n_splits=5, shuffle=True, random_state = 2023)
xgb_score = cross_val_score(xgb, x, y, cv=kf, n_jobs=-1)
print("xgboost", np.round(time() - start_xgb, 5))
print("acc", np.mean(xgb_score).round(3))
xgboost 318.45566
acc 0.968
Histogram-Based Gradient Boost
데이터를 데이터 전처리 방법인 binning (분리)으로 그룹화하는 방법으로 예를 들어, '연령' 열이 주어졌을 때, 이러한 데이터를 30–40, 40–50, 50–60으로 세 그룹으로 나눈 다음 수치 데이터로 변환하는 것이 매우 효과적인 방법이다. 이 binning 방법을 의사 결정 트리에 적용하면 피쳐 수를 줄임으로써 알고리즘 속도를 높인다. 이 방법은 히스토그램으로 그룹화하여 각 트리를 구성할 때 앙상블로 사용할 수도 있다.
from sklearn.experimental import enable_hist_gradient_boosting
from sklearn.ensemble import HistGradientBoostingClassifier
HGB = HistGradientBoostingClassifier()
start_hgb = time()
kf = KFold(n_splits=5, shuffle=True, random_state=2023)
HGB_score = cross_val_score(HGB, x, y, cv=kf, n_jobs=-1)
print("hist", np.round(time() - start_hgb, 5), "sec")
print("acc", np.mean(HGB_score).round(3))
print("***************************")
hist 32.87899 sec
acc 0.964
728x90
반응형
LIST
'Learning-driven Methodology > ML (Machine Learning)' 카테고리의 다른 글
CatBoost (0) | 2023.07.12 |
---|---|
[Machine Learning] Boosting Methods (3) (0) | 2023.07.11 |
[Machine Learning] Boosting Methods (1) (0) | 2023.07.11 |
[Machine Learning] 무작위 탐색 (RandomizedSearchCV) (0) | 2023.07.10 |
[Machine Learning] 그리드 탐색 (GridSearchCV) (0) | 2023.07.10 |