Oi,
Existe alguma maneira de traduzir modelos XGBoost para modelos Weka?
Eu tenho um problema estranho com a eficiência dos modelos xgboost no momento da inferência.
Eu defino o número de rodadas / árvores em 1, a profundidade das árvores em 108 e estou usando o jvm-package para um problema de classificação de várias classes.
A previsão de 6.000 instâncias com árvores XGBoost ao criar instâncias uma a uma, incluindo a criação de DMatrix e inferência / predição, leva 380 ms.
(excluindo a criação de DMatrix, leva 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;
No entanto, quando eu prevejo / deduzo usando florestas aleatórias Weka, leva apenas 30 ms.
Para o número de rodadas (árvores) = 50, as florestas aleatórias WEKA prevêem 6.000 instâncias em 922 ms e as árvores XGBoost as prevêem em 3429 ms.
O problema é que a precisão das árvores XGBoost são muito melhores do que as florestas aleatórias. No entanto, o tempo de inferência também é muito importante no meu caso.
Então, há como converter modelos XGBoost em modelos WEKA ?!
Ou você tem ideia de como posso fazer previsões mais rápidas ?! O problema de eficiência é devido à chamada de bibliotecas nativas do código-fonte Java?
Obrigado.
https://github.com/komiya-atsushi/xgboost-predictor-java
isso pode ajudar
Da tabela de benchmark em https://github.com/komiya-atsushi/xgboost-predictor-java : a previsão Java pura é até 4 ordens de magnitude mais rápida! Deve haver algo terrivelmente ineficiente em algum lugar na interface xgboost Java ... Estou considerando o uso de pontuação baseada em java em algum momento, mas preferiria não depender de outro projeto offshot para isso.
Principalmente porque a interface atual não foi projetada para pontuação online (por instância), mas sim para pontuação em lote. A sobrecarga da criação da DMatrix assumirá o controle da pontuação online. Precisamos de uma interface de pontuação online dedicada para esse caso.
Comentários muito úteis
Principalmente porque a interface atual não foi projetada para pontuação online (por instância), mas sim para pontuação em lote. A sobrecarga da criação da DMatrix assumirá o controle da pontuação online. Precisamos de uma interface de pontuação online dedicada para esse caso.