2016-07-18 106 views
5

Quale dovrebbe essere il percorso migliore per convertire un modello di scikit (ad esempio il risultato di un adattamento RandomForestClassifier) ​​in un pezzo di C++ per ottenere il più veloce .so che può essere chiamato da qualche altro ecosistema?Come convertire un modello scikit in un veloce `.so`

+0

Non capisco cosa intendi per "convertire". 'RandomForestClassifier' è [implementato in Python] (https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/ensemble/forest.py#L372-L628), non come estensione compilata. Se vuoi una versione compilata veloce dovrai riscriverla. Un'opzione sarebbe usare [Cython] (http://cython.org/) che può convertire un superset di Python in C in modo che possa essere compilato staticamente. Non c'è una soluzione a sforzo zero, però - dovrai aggiungere le tue dichiarazioni di tipo statico, ecc. Per vedere un'accelerazione apprezzabile. –

+1

Sì, sono d'accordo, ma per creare/addestrare/adattare il modello e usarlo per fare una previsione sono due diversi pensieri. Scikit RandomForestClassifier creerà il modello, di solito memorizzato in un sottaceto come raccolta ad albero. In un contesto RTB ad alta velocità ho bisogno di "usare/accelerare" questo modello risultante, convertendo solo la "zuppa di alberi" finale in qualche codice C++ per applicarlo più velocemente. Ho visto PMML http://stackoverflow.com/questions/38431113/convert-a-pmml-describe-model-in-c-c ma non sembra essere di grande aiuto per il nostro caso. – user3313834

risposta

1

Per la portabilità di scikit addestrato, acquisire modelli in altre lingue, vedere il progetto sklearn-porter.

Tuttavia, se questo sarà più veloce del metodo originale RandomForestClassifier.predict (che è multithreading e utilizza operazioni numpy, potenzialmente con una libreria BLAS veloce) rimane da vedere.

Problemi correlati