Xgboost: Existe-t-il de toute façon de traduire les modèles XGBoost en modèles Weka pour obtenir de meilleures performances d'inférence

Créé le 1 juil. 2016  ·  3Commentaires  ·  Source: dmlc/xgboost

Salut,
Existe-t-il de toute façon une traduction des modèles XGBoost en modèles Weka ?

J'ai un problème étrange avec l'efficacité des modèles xgboost au moment de l'inférence.

J'ai défini le nombre de tours/arbres à 1, la profondeur des arbres à 108 et j'utilise jvm-package pour un problème de classification multi-classes.

Prédire 6000 instances avec des arbres XGBoost lorsque je crée des instances une par une, y compris la création de DMatrix et l'inférence/prédiction, prend 380 ms.
(hors création DMatrix, cela prend 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;

Cependant, lorsque je les prédis/inférence en utilisant les forêts aléatoires Weka, cela ne prend que 30 ms.

Pour le nombre de tours (arbres) = 50, les forêts aléatoires WEKA prédisent 6000 instances en 922 ms et les arbres XGBoost les prédisent en 3429 ms.

Le problème est que la précision des arbres XGBoost est bien meilleure que celle des forêts aléatoires. Cependant, le temps d'inférence est également très important dans mon cas.

Alors, est-il possible de convertir les modèles XGBoost en modèles WEKA ?!
Ou avez-vous une idée de comment je peux faire des prédictions plus rapidement ?! Le problème d'efficacité est-il dû à l'appel de bibliothèques natives à partir du code source Java ?

Merci.

Commentaire le plus utile

C'était principalement parce que l'interface actuelle n'était pas conçue pour la notation en ligne (par instance) mais plutôt pour la notation par lots. Les frais généraux liés à la création de DMatrix prendront le relais pour la notation en ligne. Nous avons besoin d'une interface de notation en ligne dédiée pour ce cas.

Tous les 3 commentaires

À partir du tableau de référence sur https://github.com/komiya-atsushi/xgboost-predictor-java : la prédiction Java pure est jusqu'à 4 ordres de grandeur plus rapide ! Il doit y avoir quelque chose de terriblement inefficace quelque part dans l'interface Java de xgboost... J'envisage d'utiliser un score basé sur Java à un moment donné, mais je préférerais ne pas dépendre d'un autre projet dérivé pour cela.

C'était principalement parce que l'interface actuelle n'était pas conçue pour la notation en ligne (par instance) mais plutôt pour la notation par lots. Les frais généraux liés à la création de DMatrix prendront le relais pour la notation en ligne. Nous avons besoin d'une interface de notation en ligne dédiée pour ce cas.

Cette page vous a été utile?
0 / 5 - 0 notes