2016-07-18 1 views
5

Quel devrait être le meilleur chemin pour convertir un modèle scikit (par exemple le résultat d'un ajustement RandomForestClassifier) ​​dans un morceau de C++ pour obtenir le .so le plus rapide qui peut être appelé d'un autre écosystème?Comment convertir un modèle scikit dans un rapide `.so`

+0

Je ne comprends pas ce que vous voulez dire par "convertir". 'RandomForestClassifier' est [implémenté en Python] (https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/ensemble/forest.py#L372-L628), pas en tant qu'extension compilée. Si vous voulez une version compilée rapide, vous devrez la réécrire. Une option serait d'utiliser [Cython] (http://cython.org/) qui peut convertir un surensemble de Python en C afin qu'il puisse être compilé statiquement. Cependant, il n'y a pas de solution zéro-effort - vous devrez ajouter vos propres déclarations de type statique, etc. afin de voir une accélération appréciable. –

+1

Oui, je suis d'accord, mais créer/former/adapter le modèle et l'utiliser pour faire une prédiction sont deux pensées différentes. scikit RandomForestClassifier crée le modèle, généralement stocké dans un pickle en tant que collection d'arbres. Dans un contexte RTB à haute vitesse, je dois "utiliser/accélérer" ce modèle résultant, en ne convertissant que la "soupe d'arbre" finale dans un code C++ pour l'appliquer plus rapidement. J'ai vu PMML http://stackoverflow.com/questions/38431113/convert-a-pmml-describe-model-in-c-c mais ne semble pas aider beaucoup pour notre utilisation. – user3313834

Répondre

1

Pour la portabilité des modèles scikit learn formés dans d'autres langues, voir le projet sklearn-porter. Cependant, que ce soit plus rapide que la méthode originale RandomForestClassifier.predict (qui est multithread et utilise des opérations numpy, potentiellement avec une bibliothèque BLAS rapide) reste à voir.