์๋ ํ์ธ์, ๋ชจ๋ธ ๊ต์ก์ ๋ํ xgboost ์ ๊ทผ ๋ฐฉ์์ ์ดํดํ๋ ค๊ณ ํฉ๋๋ค. ๊ทธ ๋ง์ ๋ค์์ ์๋ฏธํฉ๋๋ค. Booster๋ฅผ ์ฌ์ฉํ๊ณ xgb.train์ ํธ์ถํ๊ฑฐ๋ sklearn API๋ฅผ ์ฌ์ฉํ์ฌ Classifier/Regressor๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด์ ์ ๊ทผ ๋ฐฉ์(xgboost ๋ฌธ์์ ๋ฐ๋ฆ)์์ ๋ถ์คํ ๋ฐ๋ณต ํ์๋ฅผ ์ง์ ํด์ผ ํ๊ณ ํธ๋ฆฌ ์๋ฅผ ์ง์ ํ์ง ์์์ผ ํ๋ ๋ฌธ์ ๋ถ์คํธ ๋ฐ๋ณต ํ์๋ฅผ ์ง์ ํฉ๋๋ค. ๋ถ์คํ ๋ฐ๋ณต ํ์๋ ์ถ์ ๊ธฐ์ ์์ ๋๊น? ๋๊ตฐ๊ฐ ์ด๊ฒ์ ๋ช ํํ ํ ์ ์์ต๋๊น?
์ฝ๋๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฝ์ผ๋ฉด sklearn API๊ฐ ๋ด๋ถ ๋ถ์คํฐ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก clf._Booster๋ฅผ ๋ด xgb.train์ ํ ๋นํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ n_estimators๋ ๋ถ์คํธ ๋ผ์ด๋ ์์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฌํ ํ ๋น์ด ์ด๋ฃจ์ด์ง ๊ฒฝ์ฐ์๋ clf.fit์ ํธ์ถํ ํ์๊ฐ ์์ต๋๋ค. ๋ด๊ฐ ๋ง์? ๊ทธ๋ ๋ค๋ฉด ๋ฌธ์๋ฅผ ์กฐ์ ํ์ฌ n_estimators๊ฐ xgb.train์ ์ฌ์ฉ๋ num_rounds์์ ๋ช ์์ ์ผ๋ก ๋งํ ์ ์์ต๋๋ค.
์ ์์ค ๋ถ์คํฐ ์ ๊ทผ ๋ฐฉ์๊ณผ sklearn API ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ํํ ์ค๋ช ํ๋ ๋ฌธ์๊ฐ ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ๋์ค์ ์ ์๋ฅผ ํธ์ถํ ๊ฒ์ด๋ผ๋ ์ ์ ์ดํดํ์ง๋ง ํผ๋์ ํผํ๊ธฐ ์ํด ๋ฌธ์์์ ์ํ ๋ฐฉ๋ฒ์ ์ดํดํ๊ณ ์ด๋ฅผ ๋ช ํํ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. - ์ฌ์ฉ์.
์๋ ๋ธ๋ผ๋๋ฏธ๋ฅด
์ผ๋ฐ์ ์ผ๋ก ๋ถ์คํ ์ ์ ์ฒด ์กฐํฉ์ด ๋ ์ ์ํ๋๋๋ก ๋ฐ๋ณต์ ์ผ๋ก(๋๋ "๋ผ์ด๋"์์) ๋จ์/์ฝํ ํ์ต์(๋๋ ์ถ์ ๊ธฐ) ์ํ์ค๋ฅผ ํ๋ จํ๋ ๋ฉํ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ๋๋ฌด๋ฟ๋ง ์๋๋ผ ๋ค์ํ ์ข ๋ฅ์ ์ฝํ ํ์ต์๊ฐ์์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, xgboost์๋ ํธ๋ฆฌ์ (์ผ๋ฐํ๋) ์ ํ ๋ชจ๋ธ ์ต์ ์ด ์์ต๋๋ค. ํฅ๋ฏธ๋กญ๊ฒ๋ xgboost์์ ์ด๋ฌํ ์ฝํ ํ์ต์๋ฅผ "๋ถ์คํฐ"๋ผ๊ณ ํ๊ณ ์ ์ฒด ์กฐํฉ ๋ชจ๋ธ์ "ํ์ต์"๋ผ๊ณ ํฉ๋๋ค. ์ฒ์์ xgboost์ ๋ฌธ์์ ์ฝ๋๋ฅผ ์ฝ์์ ๋ ์ฝ๊ฐ ๋นํน์ค๋ฌ์ ์ต๋๋ค. ๊ทธ ์ฉ์ด๋ ์ ์์ ์ ์ ์ ์ ๊ฐ์ธ๊ณผ ๋ฐ๋์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋์ผํ ์ฃผ์ ์ ๊ด๋ จ๋ ์๋ก ๋ค๋ฅธ ํ๋ก์ ํธ ๊ฐ์ ์ผ๊ด๋ ๋ช ๋ช ๋ฒ์ ์ฌ์ฉํ๊ณ ์ผ๊ด๋ ๊ณ ํ์ง ์ํธ ๋งํฌ ๋ฌธ์๋ฅผ ๊ฐ๋ ๊ฒ์ด ์ข์ง๋ง, ํนํ ์คํ ์์ค ํ๋ก์ ํธ์์ ํญ์ ์คํ ๊ฐ๋ฅํ๊ฑฐ๋ ์ฝ๊ฒ ์ ์ง ๊ด๋ฆฌํ ์ ์๋ ๊ฒ์ ์๋๋๋ค. ์ด๋ณด ์ฌ์ฉ์๋ ๋๋ถ๋ถ ๋จ์ผ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ์ฃผ์ ์ ๋ํด ์ ์๊ณ ์๋ ์ฌ์ฉ์๋ ๊ณตํต์ ์ ์ฝ๊ฒ ๋งคํํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฎ์ ์์ค์ ์ธ๋ถ ์ฌํญ์ ๊ด์ฌ์ด ์๋ ์ฌ๋์ ์ผ๋ฐ์ ์ผ๋ก ์ฝ๋๋ฅผ ์ฝ์ ๋งํผ ์ถฉ๋ถํ ๊ด์ฌ์ ๊ฐ์ต๋๋ค.
๊ทํ์ ํน์ ์ง๋ฌธ์ ๊ดํด์๋ sklearn ๋ํผ ์ฝ๋ [1]์ n_estimators ๋งค๊ฐ๋ณ์๊ฐ ๊ธฐ์ฐจ [2] ๋ด์ num_boost_round์ ๋งคํ๋๋ค๋ ๊ฒ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฝ๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ์ต์ข ์ฌ์ฉ์๋ก์ sklearn ๋ํผ ๊ฐ์ฒด๋ฅผ ๊ทธ๋ฐ ์์ผ๋ก ํดํนํ๊ณ ์ถ์ต๋๊น? ์ ์ด ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก ์ํํ๋ ค๋ฉด ๋ํผ ์ฝ๋๋ฅผ ์ ์์์ผ ํฉ๋๋ค.
[1] https://github.com/dmlc/xgboost/blob/2859c190cd0d168df25e2a7ea2b1fd5211ce94f0/python-package/xgboost/sklearn.py#L185
[2] https://github.com/dmlc/xgboost/blob/83e61bf99ec7d01607867b4e281da283230883b1/python-package/xgboost/training.py#L12
R์ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๊น?
2015๋
11์ 26์ผ ๋ชฉ์์ผ ์ค์ 11์ 39๋ถ, Vadim Khotilovich <
[email protected]>์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
์๋ ๋ธ๋ผ๋๋ฏธ๋ฅด
์ผ๋ฐ์ ์ผ๋ก ๋ถ์คํ ์ ๋ฐ๋ณต์ ์ผ๋ก(๋๋
"rounds")๋ ๋ค์๊ณผ ๊ฐ์ ๋จ์/์ฝํ ํ์ต์(๋๋ ์ถ์ ๊ธฐ)์ ์ํ์ค๋ฅผ ํ๋ จํฉ๋๋ค.
์ ์ฒด ์กฐํฉ์ด ๋ ์ ์ํ๋๋ ๋ฐฉ์์ ๋๋ค. ๋ค์ํ ์ ์๋ค
๋๋ฌด๋ฟ๋ง ์๋๋ผ ์ฝํ ํ์ต์์ ์ข ๋ฅ. ์๋ฅผ ๋ค์ด xgboost์๋ ํธ๋ฆฌ๊ฐ ์๊ณ
(์ผ๋ฐํ๋) ์ ํ ๋ชจ๋ธ ์ต์ . ํฅ๋ฏธ๋กญ๊ฒ๋ ์ด๋ฌํ ์ฝํ ํ์ต์๋
xgboost๋ "๋ถ์คํฐ"๋ผ๊ณ ํ๋ฉฐ ์ ์ฒด ์กฐํฉ ๋ชจ๋ธ์
"ํ์ต์"๋ผ๊ณ ํฉ๋๋ค. ์ฒ์์ ๊ทธ ๋ถ๋ถ์ด ์ข ๋นํฉ์ค๋ฌ์ ์ด์
xgboost์ ๋ฌธ์์ ์ฝ๋ ์ฝ๊ธฐ
์ฉ์ด์ ๊ฐ์ธ.์๋ก ๋ค๋ฅธ ์ด๋ฆ ์ฌ์ด์ ์ผ๊ด๋ ๋ช ๋ช ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ง๋ง
๋์ผํ ์ฃผ์ ์ ๊ด๋ จ๋ ํ๋ก์ ํธ ๋ฐ ์ผ๊ด๋ ๋์
์์ง์ ๊ต์ฐจ ๋งํฌ ๋ฌธ์ํ, ํญ์ ์คํ ๊ฐ๋ฅํ๊ฑฐ๋ ์ฌ์ด ๊ฒ์ ์๋๋๋ค.
ํนํ ์คํ ์์ค ํ๋ก์ ํธ์์ ์ ์ง ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ณด ์ฌ์ฉ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝํฅ์ด ์์ต๋๋ค.
๋๋ถ๋ถ ๋จ์ผ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฃผ์ ์ ๋ํด ์ ์๊ณ ์๋ ์ฌ์ฉ์
๋ฌธ์ ๋ ๊ณตํต์ ์ ์ฝ๊ฒ ๋งคํํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๊ฐ ์ ๊ฒฝ์ฐ๋
๋ฎ์ ์์ค์ ์ธ๋ถ ์ฌํญ์ ๋ํด์๋ ์ผ๋ฐ์ ์ผ๋ก ์ฝ๋๋ฅผ ์ฝ์ ๋งํผ ์ถฉ๋ถํ ๊ด์ฌ์ ๊ฐ์ต๋๋ค.๊ทํ์ ํน์ ์ง๋ฌธ์ ๊ดํด์๋ n_estimators๊ฐ
sklearn ๋ํผ ์ฝ๋ [1]์ ๋งค๊ฐ๋ณ์๋ num_boost_round์ ๋งคํ๋ฉ๋๋ค.
๊ธฐ์ฐจ[2]. ๊ทธ๋ฌ๋ ์ต์ข ์ฌ์ฉ์๋ก์ ์ sklearn์ ํดํนํ๊ณ ์ถ์ต๋๊น?
๊ทธ๋ฐ ์์ผ๋ก ๋ํผ ๊ฐ์ฒด? ์ ์ด ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก ์ํํ๋ ค๋ฉด ๋ค์์ ์ํํด์ผ ํฉ๋๋ค.
๋ํผ ์ฝ๋๋ฅผ ์ข ๋ ์ ์ ์ ์์ต๋๋ค.[1]
https://github.com/dmlc/xgboost/blob/2859c190cd0d168df25e2a7ea2b1fd5211ce94f0/python-package/xgboost/sklearn.py#L185
[2]
https://github.com/dmlc/xgboost/blob/83e61bf99ec7d01607867b4e281da283230883b1/python-package/xgboost/training.py#L12โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/dmlc/xgboost/issues/651#issuecomment -159956213.
@khotilov , ์ค๋ช ๊ฐ์ฌํฉ๋๋ค. ๊ทธ๊ฒ์ ๋ด ํ์์ ์ถฉ๋ถํ๋ฉฐ ํฐ์ผ์ ๋ซ์ ๊ฒ์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ ๋ธ๋ผ๋๋ฏธ๋ฅด
์ผ๋ฐ์ ์ผ๋ก ๋ถ์คํ ์ ์ ์ฒด ์กฐํฉ์ด ๋ ์ ์ํ๋๋๋ก ๋ฐ๋ณต์ ์ผ๋ก(๋๋ "๋ผ์ด๋"์์) ๋จ์/์ฝํ ํ์ต์(๋๋ ์ถ์ ๊ธฐ) ์ํ์ค๋ฅผ ํ๋ จํ๋ ๋ฉํ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ๋๋ฌด๋ฟ๋ง ์๋๋ผ ๋ค์ํ ์ข ๋ฅ์ ์ฝํ ํ์ต์๊ฐ์์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, xgboost์๋ ํธ๋ฆฌ์ (์ผ๋ฐํ๋) ์ ํ ๋ชจ๋ธ ์ต์ ์ด ์์ต๋๋ค. ํฅ๋ฏธ๋กญ๊ฒ๋ xgboost์์ ์ด๋ฌํ ์ฝํ ํ์ต์๋ฅผ "๋ถ์คํฐ"๋ผ๊ณ ํ๊ณ ์ ์ฒด ์กฐํฉ ๋ชจ๋ธ์ "ํ์ต์"๋ผ๊ณ ํฉ๋๋ค. ์ฒ์์ xgboost์ ๋ฌธ์์ ์ฝ๋๋ฅผ ์ฝ์์ ๋ ์ฝ๊ฐ ๋นํน์ค๋ฌ์ ์ต๋๋ค. ๊ทธ ์ฉ์ด๋ ์ ์์ ์ ์ ์ ์ ๊ฐ์ธ๊ณผ ๋ฐ๋์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋์ผํ ์ฃผ์ ์ ๊ด๋ จ๋ ์๋ก ๋ค๋ฅธ ํ๋ก์ ํธ ๊ฐ์ ์ผ๊ด๋ ๋ช ๋ช ๋ฒ์ ์ฌ์ฉํ๊ณ ์ผ๊ด๋ ๊ณ ํ์ง ์ํธ ๋งํฌ ๋ฌธ์๋ฅผ ๊ฐ๋ ๊ฒ์ด ์ข์ง๋ง, ํนํ ์คํ ์์ค ํ๋ก์ ํธ์์ ํญ์ ์คํ ๊ฐ๋ฅํ๊ฑฐ๋ ์ฝ๊ฒ ์ ์ง ๊ด๋ฆฌํ ์ ์๋ ๊ฒ์ ์๋๋๋ค. ์ด๋ณด ์ฌ์ฉ์๋ ๋๋ถ๋ถ ๋จ์ผ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ์ฃผ์ ์ ๋ํด ์ ์๊ณ ์๋ ์ฌ์ฉ์๋ ๊ณตํต์ ์ ์ฝ๊ฒ ๋งคํํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฎ์ ์์ค์ ์ธ๋ถ ์ฌํญ์ ๊ด์ฌ์ด ์๋ ์ฌ๋์ ์ผ๋ฐ์ ์ผ๋ก ์ฝ๋๋ฅผ ์ฝ์ ๋งํผ ์ถฉ๋ถํ ๊ด์ฌ์ ๊ฐ์ต๋๋ค.
๊ทํ์ ํน์ ์ง๋ฌธ์ ๊ดํด์๋ sklearn ๋ํผ ์ฝ๋ [1]์ n_estimators ๋งค๊ฐ๋ณ์๊ฐ ๊ธฐ์ฐจ [2] ๋ด์ num_boost_round์ ๋งคํ๋๋ค๋ ๊ฒ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฝ๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ์ต์ข ์ฌ์ฉ์๋ก์ sklearn ๋ํผ ๊ฐ์ฒด๋ฅผ ๊ทธ๋ฐ ์์ผ๋ก ํดํนํ๊ณ ์ถ์ต๋๊น? ์ ์ด ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก ์ํํ๋ ค๋ฉด ๋ํผ ์ฝ๋๋ฅผ ์ ์์์ผ ํฉ๋๋ค.
[1] https://github.com/dmlc/xgboost/blob/2859c190cd0d168df25e2a7ea2b1fd5211ce94f0/python-package/xgboost/sklearn.py#L185
[2] https://github.com/dmlc/xgboost/blob/83e61bf99ec7d01607867b4e281da283230883b1/python-package/xgboost/training.py#L12