Xgboost: ¿Hay alguna forma de traducir los modelos XGBoost a los de Weka para obtener un mejor rendimiento en la inferencia?

Creado en 1 jul. 2016  ·  3Comentarios  ·  Fuente: dmlc/xgboost

Hola,
¿Existe alguna forma de traducir los modelos XGBoost a modelos Weka?

Tengo un problema extraño con la eficiencia de los modelos xgboost en el momento de la inferencia.

Establecí el número de rondas / árboles en 1, la profundidad de los árboles en 108 y estoy usando jvm-package para un problema de clasificación de varias clases.

La predicción de 6000 instancias con árboles XGBoost cuando creo instancias una por una, incluida la creación de DMatrix y la inferencia / predicción, toma 380ms.
(excluyendo la creación de DMatrix, tarda 180 ms).

// 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;

Sin embargo, cuando los predigo / deduzco usando bosques aleatorios de Weka, solo toma 30 ms.

Para el número de rondas (árboles) = 50, los bosques aleatorios de WEKA predicen 6000 instancias en 922 ms y los árboles XGBoost las predicen en 3429 ms.

El problema es que la precisión de los árboles XGBoost es mucho mejor que los bosques aleatorios. Sin embargo, el tiempo de inferencia también es muy importante en mi caso.

Entonces, ¿hay alguna forma de convertir los modelos XGBoost a modelos WEKA?
¿O tienes alguna idea de cómo puedo hacer predicciones más rápido? ¿El problema de la eficiencia se debe a la llamada a bibliotecas nativas desde el código fuente de Java?

Gracias.

Comentario más útil

Se debió principalmente a que la interfaz actual no se diseñó para la puntuación en línea (por instancia), sino para la puntuación por lotes. La sobrecarga de crear DMatrix se hará cargo de la puntuación en línea. Necesitamos una interfaz de puntuación en línea dedicada para ese caso.

Todos 3 comentarios

De la tabla de referencia en https://github.com/komiya-atsushi/xgboost-predictor-java : ¡la predicción de Java puro es hasta 4 órdenes de magnitud más rápida! Debe haber algo terriblemente ineficiente en algún lugar de la interfaz de xgboost Java ... Estoy considerando el uso de la puntuación basada en Java en algún momento, pero preferiría no depender de otro proyecto secundario para eso.

Se debió principalmente a que la interfaz actual no se diseñó para la puntuación en línea (por instancia), sino para la puntuación por lotes. La sobrecarga de crear DMatrix se hará cargo de la puntuación en línea. Necesitamos una interfaz de puntuación en línea dedicada para ese caso.

¿Fue útil esta página
0 / 5 - 0 calificaciones