๋จธ์‹ ๋Ÿฌ๋‹

๋ถ€์ŠคํŒ… AdaBoost, gradient boosting, XGBoost

์ฃผ์˜ ๐Ÿฑ 2022. 12. 9. 12:41
728x90
๋ฐ˜์‘ํ˜•

๋ถ€์ŠคํŒ…์€ ์•ฝํ•œ ํ•™์Šต๊ธฐ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์—ฐ๊ฒฐํ•˜์—ฌ ๊ฐ•ํ•œ ํ•™์Šต๊ธฐ๋ฅผ ๋งŒ๋“œ๋Š” ์•™์ƒ๋ธ” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋ถ€์ŠคํŒ… ๋ฐฉ๋ฒ• ์ค‘ ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ๊ฒƒ์€ ์—์ด๋‹ค๋ถ€์ŠคํŒ…๊ณผ ๊ทธ๋ž˜๋””์–ธํŠธ ๋ถ€์ŠคํŒ…(XGBoost, LightGBM)์ด๋‹ค. 

์—์ด๋‹ค๋ถ€์ŠคํŠธ

์ด์ „ ์˜ˆ์ธก๊ธฐ๋ฅผ ๋ณด์™„ํ•˜๋Š” ๋ฐฉ์‹์€ ์ด์  ๋ชจ๋ธ์ด ๊ณผ์†Œ์ ํ•ฉํ–ˆ๋˜ ํ›ˆ๋ จ์ƒ˜ํ”Œ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ๋” ๋†’์ด๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ƒˆ๋กœ์šด ์˜ˆ์ธก๊ธฐ๋Š” ์ด์ „์— ํ•™์Šต์ด ์ž˜ ์•ˆ๋๋˜ ์ƒ˜ํ”Œ์— ๋” ๋งž์ถฐ์ง€๊ฒŒ ๋œ๋‹ค. ์—์ด๋‹ค๋ถ€์ŠคํŠธ๋Š” ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค. 

์˜ˆ๋ฅผ ๋“ค์–ด ์—์ด๋‹ค๋ถ€์ŠคํŠธ ๋ถ„๋ฅ˜๊ธฐ๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” ๋จผ์ € ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋ถ„๋ฅ˜๊ธฐ(์˜ˆ; ๊ฒฐ์ • ํŠธ๋ฆฌ)๋ฅผ ํ›ˆ๋ จ์„ธํŠธ์—์„œ ํ›ˆ๋ จ์‹œํ‚ค๊ณ  ์˜ˆ์ธก์„ ๋งŒ๋“ ๋‹ค. ๊ทธ ๋‹ค์Œ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žฅ๋ชป ๋ถ„๋ฅ˜ํ•œ ํ›ˆ๋ จ์ƒ˜ํ”Œ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ์ƒ๋Œ€์ ์œผ๋กœ ๋†’์ธ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋ถ„๋ฅ˜๊ธฐ๋Š” ์—…๋ฐ์ดํŠธ๋จ ๊ฐ€์ค‘์น˜๋กœ ํ›ˆ๋ จ์„ธํŠธ์—์„œ ํ›ˆ๋ จํ•˜๊ณ  ๋‹ค์‹œ ์˜ˆ์ธกํ•œ๋‹ค. ๋˜ ๊ฐ€์ค‘์น˜๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค...๋ฐ˜๋ณต...

์ง€์ •๋œ ์˜ˆ์ธก๊ธฐ ์ˆ˜์— ๋„๋‹ฌํ•˜๊ฑฐ๋‚˜ ์™„๋ฒฝํ•œ ์˜ˆ์ธก๊ธฐ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉด ์ค‘์ง€๋œ๋‹ค. 

์‚ฌ์ดํ‚ท๋Ÿฐ์˜ AdaBoostRegressor, AdaBoostClassifier๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 

 

๊ทธ๋ž˜๋””์–ธํŠธ ๋ถ€์ŠคํŒ…

์—์ด๋‹ค๋ถ€์ŠคํŠธ์ฒ˜๋Ÿผ ์•™์ƒ๋ธ”์— ์ด์ „๊นŒ์ง€ ์˜ค์ฐจ๋ฅผ ๋ณด์ •ํ•˜๋„๋ก ๋ก€์ธก๊ธฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ถ”๊ฐ€ํ•˜์ง€๋งŒ, ์ƒ˜ํ”Œ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์—์ด๋‹ค๋ถ€์ŠคํŠธ์™€ ๋‹ฌ๋ฆฌ ์ด์ „ ์˜ˆ์ธก๊ธฐ๊ฐ€ ๋งŒ๋“  ์ž”์—ฌ ์˜ค์ฐจ(residual error)์— ์ƒˆ๋กœ์šด ์˜ˆ์ธก๊ธฐ๋ฅผ ํ•™์Šต์‹œํ‚จ๋‹ค. 

์‚ฌ์ดํ‚ท๋Ÿฐ์˜ GradientboostingRegressor, GradientboostingClassifier

 

XGBoost

์ตœ์ ํ™”๋œ ๊ทธ๋ž˜๋””์–ธํŠธ ๋ถ€์ŠคํŒ…, ์ž๋™ ์กฐ๊ธฐ ์ข…๋ฃŒ ์˜ต์…˜๋„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 

import xgboost

xg_reg=xgboost.XGBRegressor()
xg_reg.fit(X_train, y_train, eval_set=[(X_val, y_val)], early_stopping_rounds=2)
y_pred = xg_reg.predict(X_val)

 

๋ฐ˜์‘ํ˜•