Xgboost: ์ถ”๋ก ์—์„œ ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์–ป๊ธฐ ์œ„ํ•ด XGBoost ๋ชจ๋ธ์„ Weka ๋ชจ๋ธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2016๋…„ 07์›” 01์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: dmlc/xgboost

์•ˆ๋…•ํ•˜์„ธ์š”,
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 ์†Œ์Šค ์ฝ”๋“œ์—์„œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์„ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌ ํ•ด์š”.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ฃผ๋กœ ํ˜„์žฌ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์˜จ๋ผ์ธ ์ฑ„์ (์ธ์Šคํ„ด์Šค๋‹น)์ด ์•„๋‹ˆ๋ผ ์ผ๊ด„ ์ฑ„์ ์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. DMatrix๋ฅผ ๋งŒ๋“œ๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๋Š” ์˜จ๋ผ์ธ ์ฑ„์ ์„ ๋Œ€์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ „์šฉ ์˜จ๋ผ์ธ ์ฑ„์  ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

https://github.com/komiya-atsushi/xgboost-predictor-java
์ด๊ฒƒ์€ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

https://github.com/komiya-atsushi/xgboost-predictor-java ์˜ ๋ฒค์น˜๋งˆํฌ ํ…Œ์ด๋ธ”์—์„œ: ์ˆœ์ˆ˜ Java ์˜ˆ์ธก์ด ์ตœ๋Œ€ 4๋ฐฐ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค! xgboost Java ์ธํ„ฐํŽ˜์ด์Šค ์–ด๋”˜๊ฐ€์— ์—„์ฒญ๋‚˜๊ฒŒ ๋น„ํšจ์œจ์ ์ธ ๊ฒƒ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค... ์–ธ์  ๊ฐ€๋Š” Java ๊ธฐ๋ฐ˜ ์Šค์ฝ”์–ด๋ง์˜ ์‚ฌ์šฉ์„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ์˜คํ”„์ƒท ํ”„๋กœ์ ํŠธ์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์ฃผ๋กœ ํ˜„์žฌ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์˜จ๋ผ์ธ ์ฑ„์ (์ธ์Šคํ„ด์Šค๋‹น)์ด ์•„๋‹ˆ๋ผ ์ผ๊ด„ ์ฑ„์ ์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. DMatrix๋ฅผ ๋งŒ๋“œ๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๋Š” ์˜จ๋ผ์ธ ์ฑ„์ ์„ ๋Œ€์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ „์šฉ ์˜จ๋ผ์ธ ์ฑ„์  ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰