Xgboost: Existe alguma maneira de traduzir os modelos XGBoost para os Weka para obter um melhor desempenho na inferência

Criado em 1 jul. 2016  ·  3Comentários  ·  Fonte: dmlc/xgboost

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.

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.

Todos 3 comentários

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.

Esta página foi útil?
0 / 5 - 0 avaliações