Xgboost: Gibt es überhaupt XGBoost-Modelle in Weka-Modelle zu übersetzen, um eine bessere Leistung bei der Inferenz zu erzielen?

Erstellt am 1. Juli 2016  ·  3Kommentare  ·  Quelle: dmlc/xgboost

Hi,
Gibt es überhaupt eine Möglichkeit, XGBoost-Modelle in Weka-Modelle zu übersetzen?

Ich habe ein seltsames Problem mit der Effizienz von xgboost-Modellen zur Inferenzzeit.

Ich setze die Anzahl der Runden/Bäume auf 1, die Tiefe der Bäume auf 108 und verwende das jvm-Paket für ein Klassifizierungsproblem mit mehreren Klassen.

Die Vorhersage von 6000 Instanzen mit XGBoost-Bäumen, wenn ich Instanzen einzeln erstelle, einschließlich der Erstellung von DMatrix und Inferenz/Vorhersage, dauert 380 ms.
(außer DMatrix-Erstellung dauert es 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;

Wenn ich sie jedoch mit Weka-Random Forests vorhersage / folgerte, dauert es nur 30 ms.

Für die Anzahl der Runden (Bäume) = 50 sagen WEKA Random Forests 6000 Instanzen in 922 ms voraus und XGBoost-Bäume sagen sie in 3429 ms voraus.

Das Problem ist, dass die Genauigkeit von XGBoost-Bäumen weitaus besser ist als die von Random Forests. Aber auch die Inferenzzeit ist in meinem Fall sehr wichtig.

Gibt es also überhaupt eine Möglichkeit, XGBoost-Modelle in WEKA-Modelle umzuwandeln?!
Oder haben Sie eine Idee, wie ich die Vorhersage schneller machen kann?! Liegt das Effizienzproblem daran, dass native Bibliotheken aus Java-Quellcode aufgerufen werden?

Vielen Dank.

Hilfreichster Kommentar

Dies lag hauptsächlich daran, dass die aktuelle Schnittstelle nicht für das Online-Scoring (pro Instanz) ausgelegt war, sondern eher für das Batch-Scoring. Der Aufwand für die Erstellung von DMatrix wird für das Online-Scoring übernommen. Für diesen Fall benötigen wir eine eigene Online-Scoring-Schnittstelle.

Alle 3 Kommentare

Aus der Benchmark-Tabelle unter https://github.com/komiya-atsushi/xgboost-predictor-java : reine Java-Vorhersage ist bis zu 4 Größenordnungen schneller! Irgendwo in der Java-Schnittstelle von xgboost muss etwas furchtbar ineffizient sein... Ich überlege irgendwann, Java-basiertes Scoring zu verwenden, aber ich würde es vorziehen, dafür nicht von einem anderen Offshot-Projekt abhängig zu sein.

Dies lag hauptsächlich daran, dass die aktuelle Schnittstelle nicht für das Online-Scoring (pro Instanz) ausgelegt war, sondern eher für das Batch-Scoring. Der Aufwand für die Erstellung von DMatrix wird für das Online-Scoring übernommen. Für diesen Fall benötigen wir eine eigene Online-Scoring-Schnittstelle.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

ivannz picture ivannz  ·  3Kommentare

frankzhangrui picture frankzhangrui  ·  3Kommentare

choushishi picture choushishi  ·  3Kommentare

uasthana15 picture uasthana15  ·  4Kommentare

wenbo5565 picture wenbo5565  ·  3Kommentare