Привет,
Есть ли способ перевести модели XGBoost в модели Weka?
У меня странная проблема с эффективностью моделей xgboost во время вывода.
Я установил количество раундов / деревьев на 1, глубину деревьев на 108, и я использую jvm-package для задачи классификации нескольких классов.
Прогнозирование 6000 экземпляров с помощью деревьев XGBoost, когда я создаю экземпляры один за другим, включая создание DMatrix и вывод / прогнозирование, занимает 380 мс.
(без создания DMatrix требуется 180 мс).
// 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, это занимает всего 30 мс.
Для числа раундов (деревьев) = 50 случайные леса WEKA предсказывают 6000 экземпляров за 922 мс, а деревья XGBoost предсказывают их за 3429 мс.
Проблема в том, что точность деревьев XGBoost намного лучше, чем случайных лесов. Однако время вывода также очень важно в моем случае.
Итак, есть ли способ конвертировать модели XGBoost в модели WEKA ?!
Или ты хоть представляешь, как я могу делать прогнозы быстрее ?! Проблема эффективности из-за вызова собственных библиотек из исходного кода Java?
Спасибо.
https://github.com/komiya-atsushi/xgboost-predictor-java
это может помочь
Из таблицы тестов на https://github.com/komiya-atsushi/xgboost-predictor-java : чистое предсказание Java на 4 порядка быстрее! Где-то в Java-интерфейсе xgboost должно быть что-то ужасно неэффективное ... В какой-то момент я подумываю об использовании оценки на основе Java, но я бы предпочел не зависеть в этом от другого побочного проекта.
Это произошло главным образом потому, что текущий интерфейс был разработан не для онлайн-скоринга (для каждого экземпляра), а для пакетного скоринга. Накладные расходы по созданию DMatrix возьмут на себя онлайн-скоринг. В этом случае нам понадобится специальный онлайн-интерфейс для подсчета очков.
Самый полезный комментарий
Это произошло главным образом потому, что текущий интерфейс был разработан не для онлайн-скоринга (для каждого экземпляра), а для пакетного скоринга. Накладные расходы по созданию DMatrix возьмут на себя онлайн-скоринг. В этом случае нам понадобится специальный онлайн-интерфейс для подсчета очков.