์๋
ํ์ธ์,
XGBoost ๋ชจ๋ธ์ Weka ๋ชจ๋ธ๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
์ถ๋ก ์๊ฐ์ xgboost ๋ชจ๋ธ์ ํจ์จ์ฑ์ ์ด์ํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋ผ์ด๋/ํธ๋ฆฌ ์๋ฅผ 1๋ก ์ค์ ํ๊ณ ํธ๋ฆฌ ๊น์ด๋ฅผ 108๋ก ์ค์ ํ์ผ๋ฉฐ ๋ค์ค ํด๋์ค ๋ถ๋ฅ ๋ฌธ์ ์ jvm-package๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
DMatrix ์์ฑ ๋ฐ ์ถ๋ก /์์ธก์ ํฌํจํ์ฌ ์ธ์คํด์ค๋ฅผ ํ๋์ฉ ์์ฑํ ๋ XGBoost ํธ๋ฆฌ๋ก 6000๊ฐ์ ์ธ์คํด์ค๋ฅผ ์์ธกํ๋ ๋ฐ 380ms๊ฐ ๊ฑธ๋ฆฝ๋๋ค.
(DMatrix ์์ฑ์ ์ ์ธํ๊ณ 180ms๊ฐ ๊ฑธ๋ฆฝ๋๋ค).
// creating a DMatrix with one row and the numberOfFeatures
// columns
double startTime = System.nanoTime();
DMatrix testInstance = new DMatrix(testingInstance, 1, numberOfFeatures, 9999F);
// predict just one instance
float[][] predicts = booster.predict(testInstance);
predictionTime += (System.nanoTime() - startTime) / 1e6;
๊ทธ๋ฌ๋ Weka ๋๋ค ํฌ๋ ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ์์ธก/์ถ๋ก ํ ๋ 30ms๋ฐ์ ๊ฑธ๋ฆฌ์ง ์์ต๋๋ค.
๋ผ์ด๋ ์(ํธ๋ฆฌ) = 50์ผ ๋ WEKA ๋๋ค ํฌ๋ ์คํธ๋ 922ms์์ 6000๊ฐ์ ์ธ์คํด์ค๋ฅผ ์์ธกํ๊ณ XGBoost ํธ๋ฆฌ๋ 3429ms์์ ์ธ์คํด์ค๋ฅผ ์์ธกํฉ๋๋ค.
๋ฌธ์ ๋ XGBoost ํธ๋ฆฌ์ ์ ํ๋๊ฐ ๋๋ค ํฌ๋ ์คํธ๋ณด๋ค ํจ์ฌ ์ฐ์ํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ด ๊ฒฝ์ฐ์๋ ์ถ๋ก ์๊ฐ๋ ๋งค์ฐ ์ค์ํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด XGBoost ๋ชจ๋ธ์ WEKA ๋ชจ๋ธ๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?!
์๋๋ฉด ์ด๋ป๊ฒ ํ๋ฉด ๋ ๋น ๋ฅด๊ฒ ์์ธกํ ์ ์๋์ง ์๊ณ ๊ณ์ ๊ฐ์?! Java ์์ค ์ฝ๋์์ ๋ค์ดํฐ๋ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํธ์ถํ๊ธฐ ๋๋ฌธ์ ํจ์จ์ฑ ๋ฌธ์ ๊ฐ ์์ต๋๊น?
๊ฐ์ฌ ํด์.
https://github.com/komiya-atsushi/xgboost-predictor-java
์ด๊ฒ์ ๋์์ด ๋ ์ ์์ต๋๋ค
https://github.com/komiya-atsushi/xgboost-predictor-java ์ ๋ฒค์น๋งํฌ ํ ์ด๋ธ์์: ์์ Java ์์ธก์ด ์ต๋ 4๋ฐฐ ๋ ๋น ๋ฆ ๋๋ค! xgboost Java ์ธํฐํ์ด์ค ์ด๋๊ฐ์ ์์ฒญ๋๊ฒ ๋นํจ์จ์ ์ธ ๊ฒ์ด ์์ ๊ฒ์ ๋๋ค... ์ธ์ ๊ฐ๋ Java ๊ธฐ๋ฐ ์ค์ฝ์ด๋ง์ ์ฌ์ฉ์ ๊ณ ๋ คํ๊ณ ์์ง๋ง ๋ค๋ฅธ ์คํ์ท ํ๋ก์ ํธ์ ์์กดํ์ง ์๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
์ฃผ๋ก ํ์ฌ ์ธํฐํ์ด์ค๊ฐ ์จ๋ผ์ธ ์ฑ์ (์ธ์คํด์ค๋น)์ด ์๋๋ผ ์ผ๊ด ์ฑ์ ์ ์ํด ์ค๊ณ๋์๊ธฐ ๋๋ฌธ์ ๋๋ค. DMatrix๋ฅผ ๋ง๋๋ ์ค๋ฒํค๋๋ ์จ๋ผ์ธ ์ฑ์ ์ ๋์ ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์ ์ฉ ์จ๋ผ์ธ ์ฑ์ ์ธํฐํ์ด์ค๊ฐ ํ์ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ฃผ๋ก ํ์ฌ ์ธํฐํ์ด์ค๊ฐ ์จ๋ผ์ธ ์ฑ์ (์ธ์คํด์ค๋น)์ด ์๋๋ผ ์ผ๊ด ์ฑ์ ์ ์ํด ์ค๊ณ๋์๊ธฐ ๋๋ฌธ์ ๋๋ค. DMatrix๋ฅผ ๋ง๋๋ ์ค๋ฒํค๋๋ ์จ๋ผ์ธ ์ฑ์ ์ ๋์ ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์ ์ฉ ์จ๋ผ์ธ ์ฑ์ ์ธํฐํ์ด์ค๊ฐ ํ์ํฉ๋๋ค.