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.
https://github.com/komiya-atsushi/xgboost-predictor-java
das könnte helfen
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.
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.