๋ฐ์ํ
Gradient Boosting (๊ทธ๋ ์ด์ธํธ ๋ถ์คํ )
๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ (Gradient Boosting)์ ์์ ๊ฒฐ์ ํธ๋ฆฌ๋ค์ ์ฌ์ฉํ์ฌ ์ด์ ํธ๋ฆฌ์ ์ค์ฐจ๋ฅผ ๋ณด์ํ๋ ๋ฐฉ์์ผ๋ก ์์๋ธ์ ๊ตฌ์ฑํ๋ ๊ธฐ๋ฒ์ ๋๋ค.
- ์ฌ์ดํท๋ฐ์ GradientBoostingClassifier๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊น์ด๊ฐ 3์ธ ๊ฒฐ์ ํธ๋ฆฌ๋ฅผ 100๊ฐ ์ฌ์ฉํฉ๋๋ค. ์์ ๊ฒฐ์ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ณผ๋์ ํฉ์ ๊ฐํ๊ณ , ์ผ๋ฐ์ ์ผ๋ก ๋์ ์ผ๋ฐํ ์ฑ๋ฅ์ ๊ธฐ๋ํ ์ ์์ต๋๋ค.
- '๊ทธ๋ ์ด๋์ธํธ'๋ผ๋ ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด, ์ด ๋ฐฉ๋ฒ์ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ๋ฅผ ์์๋ธ์ ์ถ๊ฐํฉ๋๋ค. ๋ถ๋ฅ ๋ฌธ์ ์์๋ ๋ก์ง์คํฑ ์์ค ํจ์๋ฅผ ์ฌ์ฉํ๊ณ , ํ๊ท ๋ฌธ์ ์์๋ ํ๊ท ์ ๊ณฑ ์ค์ฐจ ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ์๋ฆฌ์ฒ๋ผ, ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ ์ ์์ค ํจ์์ ์ต์์ ์ ์ฐพ๊ธฐ ์ํด ๋ชจ๋ธ์ ๊ฐ์ค์น์ ์ ํธ์ ์กฐ๊ธ์ฉ ์กฐ์ ํฉ๋๋ค. ์ด ๊ณผ์ ์์ ๊น์ด๊ฐ ์์ ํธ๋ฆฌ๋ฅผ ๊ณ์ ์ถ๊ฐํ๋ฉฐ ์ต์ ์ ๋ชจ๋ธ์ ํฅํด ๋์๊ฐ๋๋ค.
- ํ์ต๋ฅ (learning rate) ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ต ์๋๋ฅผ ์กฐ์ ํ ์ ์์ผ๋ฉฐ, ์ด๋ ๋ชจ๋ธ์ด ์์ค ํจ์์ ์ต์์ ์ ์ฒ์ฒํ ์ ๊ทผํ๋๋ก ํฉ๋๋ค.
- ์ด์ ์ฌ์ดํท๋ฐ์ GradientBoostingClassifier๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ์ ๊ต์ฐจ ๊ฒ์ฆ ์ ์๋ฅผ ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
from sklearn.ensemble import GradientBoostingClassifier
# GradientBoostingClassifier ๊ฐ์ฒด ์์ฑ. random_state๋ฅผ ์ค์ ํ์ฌ ๊ฒฐ๊ณผ์ ์ฌํ์ฑ์ ๋ณด์ฅ.
gb = GradientBoostingClassifier(random_state=42)
# cross_validate ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ต์ฐจ ๊ฒ์ฆ ์ํ.
# train_input๊ณผ train_target์ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ํ๊ฐํ๊ณ , ํ๋ จ ์ ์์ ๊ฒ์ฆ ์ ์๋ฅผ ๋ฐํ.
scores = cross_validate(gb, train_input, train_target, return_train_score=True, n_jobs=-1)
# ํ๋ จ ์ธํธ์ ๊ฒ์ฆ ์ธํธ์ ํ๊ท ์ ์๋ฅผ ๊ณ์ฐํ์ฌ ์ถ๋ ฅ
print(np.mean(scores['train_score']), np.mean(scores['test_score']))
# 0.8881086892152563 0.8720430147331015
- ๋ณด๋ฉด, Overfitting(๊ณผ๋์ ํฉ)์ด ๋์ง ์๋๋ค๋ ์ ์ ๋ณผ ์ ์์ต๋๋ค.
- ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ (Gradient Boosting)์ ๊ฒฐ์ ํธ๋ฆฌ์ ๊ฐ์๋ฅผ ๋๋ ค๋ ๊ณผ๋์ ํฉ์ ๊ฐํ ํน์ฑ์ ๋ณด์ ๋๋ค.
- ํ์ต๋ฅ ์ ์ฆ๊ฐ์ํค๊ณ ํธ๋ฆฌ์ ๊ฐ์๋ฅผ ๋๋ฆฌ๋ฉด ์ฑ๋ฅ์ด ๋์ฑ ํฅ์๋ ์ ์์ต๋๋ค.
gb = GradientBoostingClassifier(n_estimators=500, learning_rate=0.2, random_state=42)
scores = cross_validate(gb, train_input, train_target, return_train_score=True, n_jobs=-1)
print(np.mean(scores['train_score']), np.mean(scores['test_score']))
# 0.9464595437171814 0.8780082549788999
- ์๋ฅผ ๋ค์ด, ๊ฒฐ์ ํธ๋ฆฌ์ ๊ฐ์๋ฅผ 500๊ฐ๋ก ๋๋ ค๋ ๊ณผ๋์ ํฉ์ด ์ ์ต์ ๋ฉ๋๋ค.
- ์ด ๋ชจ๋ธ์ ํ์ต๋ฅ (learning_rate) ๊ธฐ๋ณธ๊ฐ์ 0.1์ ๋๋ค.
- Gradient Boosting(๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ ) ์ญ์ ํน์ฑ ์ค์๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด, ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ ์ ๋๋ค ํฌ๋ ์คํธ๋ณด๋ค ํน์ ํน์ฑ(์: ๋น๋)์ ๋ ์ง์คํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค.
gb.fit(train_input, train_target)
print(gb.feature_importances_)
# [0.15872278 0.68010884 0.16116839]
- subsample์ด๋ผ๋ ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค.
- ์ด๋ ํธ๋ฆฌ ํ๋ จ์ ์ฌ์ฉํ ํ๋ จ ์ธํธ์ ๋น์จ์ ์ ํ๋ ๋งค๊ฐ๋ณ์๋ก, ๊ธฐ๋ณธ๊ฐ์ 1.0์ผ๋ก ์ ์ฒด ํ๋ จ ์ธํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๊ทธ๋ฌ๋ subsample ๊ฐ์ด 1๋ณด๋ค ์์ผ๋ฉด ํ๋ จ ์ธํธ์ ์ผ๋ถ๋ง ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
- ์ด๋ ๋ง์น ํ๋ฅ ์ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ด๋ ๋ฏธ๋๋ฐฐ์น ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์์ ์ผ๋ถ ์ํ์ ๋ฌด์์๋ก ์ ํํด ํ์ตํ๋ ๊ฒ๊ณผ ์ ์ฌํฉ๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ ์ ๋๋ค ํฌ๋ ์คํธ๋ณด๋ค ์ฝ๊ฐ ๋ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ํ์ง๋ง ์์ฐจ์ ์ผ๋ก ํธ๋ฆฌ๋ฅผ ์ถ๊ฐํ๊ธฐ ๋๋ฌธ์ ํ๋ จ ์๋๊ฐ ๋๋ฆฝ๋๋ค.
- ๋ฐ๋ผ์ GradientBoostingClassifier์๋ n_jobs ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ ์ ํ๊ท ๋ฒ์ ์ GradientBoostingRegressor์ ๋๋ค.
- ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ ์ ์๋์ ์ฑ๋ฅ์ ๋์ฑ ๊ฐ์ ํ ๋ชจ๋ธ์ด ๋ฐ๋ก ํ์คํ ๊ทธ๋จ ๊ธฐ๋ฐ ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ ์ ๋๋ค.
Histogram-Based Gradient Boosting (ํ์คํ ๊ทธ๋จ ๊ธฐ๋ฐ ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ )
ํ์คํ ๊ทธ๋จ ๊ธฐ๋ฐ ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ (Histogram-based Gradient Boosting)์ ์ ํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ ์ค์์
๋งค์ฐ ์ธ๊ธฐ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
- ์ด ๋ฐฉ๋ฒ์ ๋จผ์ ์ ๋ ฅ ํน์ฑ์ 256๊ฐ์ ๊ตฌ๊ฐ์ผ๋ก ๋๋์ด, ๋ ธ๋๋ฅผ ๋ถํ ํ ๋ ์ต์ ์ ๋ถํ ์ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๊ฒ ํฉ๋๋ค.
- ๋ํ, ํ์คํ ๊ทธ๋จ ๊ธฐ๋ฐ ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ ์ 256๊ฐ์ ๊ตฌ๊ฐ ์ค ํ๋๋ฅผ ๋ผ์ด๋์ ๋๋ฝ๋ ๊ฐ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ๋ ฅ ๋ฐ์ดํฐ์ ๋๋ฝ๋ ๊ฐ์ด ์์ด๋ ์ด๋ฅผ ๋ณ๋๋ก ์ ์ฒ๋ฆฌํ ํ์๊ฐ ์์ต๋๋ค.
- ์ฌ์ดํท๋ฐ์์๋ HistGradientBoostingClassifier ํด๋์ค๋ฅผ ํตํด ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์ ์ค์ ์์ ์์ ์ ์ธ ์ฑ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ์ฑ๋ฅ์ ๋์ฑ ํฅ์์ํค๋ ค๋ฉด max_iter ๋งค๊ฐ๋ณ์๋ฅผ ์กฐ์ ํ์ฌ ๋ถ์คํ ๋ฐ๋ณต ํ์๋ฅผ ๋๋ฆด ์ ์์ต๋๋ค.
# ์ฌ์ดํท๋ฐ 1.0 ๋ฒ์ ์๋์์๋ HistGradientBoostingClassifier๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด
# ๋ค์ ๋ผ์ธ์ ์ฃผ์์ ํด์ ํ๊ณ ์คํํด์ผ ํฉ๋๋ค.
# from sklearn.experimental import enable_hist_gradient_boosting
from sklearn.ensemble import HistGradientBoostingClassifier # HistGradientBoostingClassifier ๋ถ๋ฌ์ค๊ธฐ
# HistGradientBoostingClassifier ๊ฐ์ฒด ์์ฑ. random_state๋ฅผ ์ค์ ํ์ฌ ๊ฒฐ๊ณผ์ ์ฌํ์ฑ์ ๋ณด์ฅ.
hgb = HistGradientBoostingClassifier(random_state=42)
# cross_validate ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ต์ฐจ ๊ฒ์ฆ ์ํ.
# train_input๊ณผ train_target์ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ํ๊ฐํ๊ณ , ํ๋ จ ์ ์์ ๊ฒ์ฆ ์ ์๋ฅผ ๋ฐํ.
scores = cross_validate(hgb, train_input, train_target, return_train_score=True, n_jobs=-1)
# ํ๋ จ ์ธํธ์ ๊ฒ์ฆ ์ธํธ์ ํ๊ท ์ ์๋ฅผ ๊ณ์ฐํ์ฌ ์ถ๋ ฅ
print(np.mean(scores['train_score']), np.mean(scores['test_score']))
# 0.9321723946453317 0.8801241948619236
n_jobs=-1: ๋ชจ๋ CPU ์ฝ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- Overfitting(๊ณผ๋์ ํฉ)์ ์์ต์ ํ๋ฉด์ ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ ๋ณด๋ค ์กฐ๊ธ๋ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ํ๋ฒ ํน์ฑ์ค์๋๋ฅผ ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
# HistGradientBoostingClassifier ๋ชจ๋ธ์ ํ๋ จ ๋ฐ์ดํฐ์ ๋ง์ถ์ด ํ๋ จ
hgb.fit(train_input, train_target)
# ๋๋ค ํฌ๋ ์คํธ ๋ชจ๋ธ์ ํน์ฑ ์ค์๋๋ฅผ ์ถ๋ ฅ
print(rf.feature_importances_)
# [0.23167441 0.50039841 0.26792718]
- ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ ์ ๋น๋์ ์ข ๋ ์ง์คํ๋ ๊ฒฝํฅ์ด ์์์ง๋ง, ํ์คํ ๊ทธ๋จ ๊ธฐ๋ฐ ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ ์ ๋๋ค ํฌ๋ ์คํธ์ ๋น์ทํ๊ฒ ๋ค์ํ ํน์ฑ์ ๊ณ ๋ฅด๊ฒ ๊ด์ฌ์ ๋ณด์ ๋๋ค.
- ์ด๋ ํ์คํ ๊ทธ๋จ ๊ธฐ๋ฐ ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ ์ด ๋ค์ํ ํน์ฑ์ ๊ท ํ ์๊ฒ ํ๊ฐํ๋ ๊ฒฝํฅ์ด ์์์ ์์ฌํฉ๋๋ค.
- ์ด์ HistGradientBoostingClassifier๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ข ์ ์ผ๋ก ํ ์คํธ ์ธํธ์์์ ์ฑ๋ฅ์ ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
hgb.score(test_input, test_target)
# 0.8723076923076923
- ํ ์คํธ ์ธํธ์์ ์ฝ 87%์ ์ ํ๋๋ฅผ ์ป์์ต๋๋ค.
- ์ค์ ์ํฉ์์๋ ์ฑ๋ฅ์ด ์ด๋ณด๋ค ์ฝ๊ฐ ๋ฎ์ ์ ์์ต๋๋ค. ์์๋ธ ๋ชจ๋ธ์ด ๋จ์ผ ๊ฒฐ์ ํธ๋ฆฌ๋ณด๋ค ํจ์ฌ ์ฐ์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ํ์ธํ ์ ์์์ต๋๋ค. ์ฐธ๊ณ ๋ก, ์ด์ ์ ๋๋ค ์์น์์๋ ํ ์คํธ ์ ํ๋๊ฐ 86%์์ต๋๋ค.
- ํ์คํ ๊ทธ๋จ ๊ธฐ๋ฐ ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ ์ ํ๊ท ๋ฒ์ ์ HistGradientBoostingRegressor ํด๋์ค๋ก ๊ตฌํ๋์ด ์์ผ๋ฉฐ, ์ฌ์ดํท๋ฐ์ ๋น๊ต์ ์๋ก์ด ๊ธฐ๋ฅ์ ๋๋ค.
- ์ฌ์ดํท๋ฐ ์ธ์๋ ์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์คํ ๊ทธ๋จ ๊ธฐ๋ฐ ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๊ณ ์์ต๋๋ค. ๊ทธ ์ค ๋ํ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ XGBoost์ ๋๋ค.
XGBoost
XGBoost๋ ๋ค์ํ ๋ถ์คํ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ํ๋ฉฐ, tree_method ๋งค๊ฐ๋ณ์๋ฅผ 'hist'๋ก ์ค์ ํ๋ฉด ํ์คํ ๊ทธ๋จ ๊ธฐ๋ฐ ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
from xgboost import XGBClassifier # XGBoost ๋ถ๋ฅ๊ธฐ๋ฅผ ์ํฌํธ
# XGBClassifier ๊ฐ์ฒด ์์ฑ. tree_method๋ฅผ 'hist'๋ก ์ค์ ํ์ฌ ํ์คํ ๊ทธ๋จ ๊ธฐ๋ฐ์ ํธ๋ฆฌ ๋ฐฉ๋ฒ์ ์ฌ์ฉ.
# random_state๋ฅผ ์ค์ ํ์ฌ ๊ฒฐ๊ณผ์ ์ฌํ์ฑ์ ๋ณด์ฅ.
xgb = XGBClassifier(tree_method='hist', random_state=42)
# cross_validate ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ต์ฐจ ๊ฒ์ฆ ์ํ.
# train_input๊ณผ train_target์ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ํ๊ฐํ๊ณ , ํ๋ จ ์ ์์ ๊ฒ์ฆ ์ ์๋ฅผ ๋ฐํ.
scores = cross_validate(xgb, train_input, train_target, return_train_score=True, n_jobs=-1)
# ํ๋ จ ์ธํธ์ ๊ฒ์ฆ ์ธํธ์ ํ๊ท ์ ์๋ฅผ ๊ณ์ฐํ์ฌ ์ถ๋ ฅ
print(np.mean(scores['train_score']), np.mean(scores['test_score']))
# 0.9558403027491312 0.8782000074035686
LightGBM
LightGBM์ ๋ง์ดํฌ๋ก์ํํธ์์ ๊ฐ๋ฐํ ๋ ๋ค๋ฅธ ํ์คํ ๊ทธ๋จ ๊ธฐ๋ฐ ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ์ฑ๋ฅ ๋๋ถ์ ์ต๊ทผ ๋ง์ ์ธ๊ธฐ๋ฅผ ์ป๊ณ ์์ต๋๋ค. LightGBM์ ์ต์ ๊ธฐ์ ์ ์ ์ฉํ์ฌ ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์ ๋ํด ๋น ๋ฅธ ํ์ต ์๋์ ๋์ ์ฑ๋ฅ์ ์๋ํฉ๋๋ค.
- LightGBM์ ์ฝ๋ฉ์์ ์ด๋ฏธ ์ค์น๋์ด ์์ด ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ฌ์ดํท๋ฐ์ cross_validate() ํจ์์ ํจ๊ป ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
from lightgbm import LGBMClassifier # LightGBM ๋ถ๋ฅ๊ธฐ๋ฅผ ์ํฌํธ
# LGBMClassifier ๊ฐ์ฒด ์์ฑ. random_state๋ฅผ ์ค์ ํ์ฌ ๊ฒฐ๊ณผ์ ์ฌํ์ฑ์ ๋ณด์ฅ.
lgb = LGBMClassifier(random_state=42)
# cross_validate ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ต์ฐจ ๊ฒ์ฆ ์ํ.
# train_input๊ณผ train_target์ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ํ๊ฐํ๊ณ , ํ๋ จ ์ ์์ ๊ฒ์ฆ ์ ์๋ฅผ ๋ฐํ.
scores = cross_validate(lgb, train_input, train_target, return_train_score=True, n_jobs=-1)
# ํ๋ จ ์ธํธ์ ๊ฒ์ฆ ์ธํธ์ ํ๊ท ์ ์๋ฅผ ๊ณ์ฐํ์ฌ ์ถ๋ ฅ
print(np.mean(scores['train_score']), np.mean(scores['test_score']))
# 0.935828414851749 0.8801251203079884
- ๋ํ Scikit-learn์ ํ์คํ ๊ทธ๋จ ๊ธฐ๋ฐ ๊ทธ๋ ์ด๋์ธ ๋ถ์คํ ์ด LightGBM ์์ ์ํฅ์ ๋ง์ด ๋ฐ์์ต๋๋ค.
Summary
๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ (Gradient Boosting)
- ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ : ์์ค ํจ์๋ฅผ ์ต์ํํ๊ธฐ ์ํด ๊ฒฐ์ ์ ๋๋ฌด๋ฅผ ์ฐ์์ ์ผ๋ก ์ถ๊ฐํ์ฌ ์์๋ธํฉ๋๋ค. ํ์ต ์๋๊ฐ ๋ค์ ๋๋ฆด ์ ์์ง๋ง, ์ฑ๋ฅ์ด ์ฐ์ํฉ๋๋ค.
- ์ฃผ์ ๋งค๊ฐ๋ณ์:
- loss: ์์ค ํจ์ (deviance ๋๋ exponential)
- learning_rate: ํธ๋ฆฌ๊ฐ ์์๋ธ์ ๊ธฐ์ฌํ๋ ์ ๋ (๊ธฐ๋ณธ๊ฐ: 0.1)
- n_estimators: ๋ถ์คํ ๋จ๊ณ๋ฅผ ์ํํ๋ ํธ๋ฆฌ์ ๊ฐ์ (๊ธฐ๋ณธ๊ฐ: 100)
- subsample: ํ๋ จ ์ธํธ์ ์ํ ๋น์จ (๊ธฐ๋ณธ๊ฐ: 1.0)
- max_depth: ๊ฐ๋ณ ํธ๋ฆฌ์ ์ต๋ ๊น์ด (๊ธฐ๋ณธ๊ฐ: 3)
ํ์คํ ๊ทธ๋จ ๊ธฐ๋ฐ ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ (Histogram-based Gradient Boosting)
- ํ์คํ ๊ทธ๋จ ๊ธฐ๋ฐ ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ : ์ ๋ ฅ ํน์ฑ์ ๊ตฌ๊ฐ์ผ๋ก ๋๋์ด ๋ถํ ์ ๋น ๋ฅด๊ฒ ์ฐพ์ผ๋ฉฐ, ๋๋ฝ๋ ๊ฐ์ ๋ณ๋๋ก ์ฒ๋ฆฌํ ํ์๊ฐ ์์ต๋๋ค.
- ์ฃผ์ ๋งค๊ฐ๋ณ์:
- learning_rate: ํ์ต๋ฅ (๊ธฐ๋ณธ๊ฐ: 0.1)
- max_iter: ๋ถ์คํ ๋จ๊ณ๋ฅผ ์ํํ๋ ํธ๋ฆฌ์ ๊ฐ์ (๊ธฐ๋ณธ๊ฐ: 100)
- max_bins: ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋๋ ๊ตฌ๊ฐ์ ๊ฐ์ (๊ธฐ๋ณธ๊ฐ: 255)
๋ผ์ด๋ธ๋ฌ๋ฆฌ
- XGBoost: ๋ค์ํ ๋ถ์คํ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ํ๋ฉฐ, tree_method ๋งค๊ฐ๋ณ์๋ฅผ 'hist'๋ก ์ค์ ํ๋ฉด ํ์คํ ๊ทธ๋จ ๊ธฐ๋ฐ ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- LightGBM: ๋น ๋ฅด๊ณ ์ต์ ๊ธฐ์ ์ ์ ์ฉํ ํ์คํ ๊ทธ๋จ ๊ธฐ๋ฐ ๊ทธ๋ ์ด๋์ธํธ ๋ถ์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์ ๋ํด ๋์ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๋ฐ์ํ
'๐น๏ธ ํผ๊ณต๋จธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํผ๊ณต๋จธ์ ] Clustering Algoritm (๊ตฐ์ง ์๊ณ ๋ฆฌ์ฆ) (0) | 2024.08.06 |
---|---|
[ํผ๊ณต๋จธ์ ] Tree's Ensemble - Extra Tree (์์คํธ๋ผ ํธ๋ฆฌ) (0) | 2024.07.30 |
[ํผ๊ณต๋จธ์ ] Tree's Ensemble - Random Forest (๋๋ค ํฌ๋ ์คํธ) (0) | 2024.07.30 |
[ํผ๊ณต๋จธ์ ] Cross-Validation & Grid Search (0) | 2024.07.30 |
[ํผ๊ณต๋จธ์ ] Decision Tree (๊ฒฐ์ ํธ๋ฆฌ) (0) | 2023.11.06 |