2016-07-18 22 views
5

Bir scikit modelini dönüştürmek için daha iyi bir yol (örneğin bir RandomForestClassifier uyumluluğunun sonucu) C++ parçasına dönüştürmek için daha hızlı bir yol olmalıdır. Bu, en hızlı .so çağrılabilir. diğer bazı ekosistemlerden mi?Hızlı bir scikit modelini dönüştürme ".so`

+0

"Dönüştür" ile ne demek istediğini anlamıyorum. "RandomForestClassifier", Python'da (https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/ensemble/forest.py#L372-L628) derlenmiş bir uzantı olarak değil. Hızlı derlenmiş bir sürüm istiyorsanız, yeniden yazmanız gerekir. Bir seçenek, [Cython] 'un (http://cython.org/) kullanılmasıdır. Bu, Python'un bir üst kümesini C'ye dönüştürebilir ve böylece statik olarak derlenebilir. Yine de, hiç çaba gerektirmeyen bir çözüm yoktur - kayda değer bir hız artışı görmek için kendi statik tip bildirimlerinizi eklemeniz gerekir. –

+1

Evet, katılıyorum, ama modele/eğitime/forma geçmeli ve bunu bir tahmin yapmak için kullanmak iki farklı düşüncedir. scikit RandomForestClassifier genellikle ağaç toplama olarak bir turşu saklanan modeli oluşturacaktır. Yüksek Hızlı bir RTB bağlamında, sonuçta ortaya çıkan bu modeli "kullanmam/hızlandırmam" gerekiyor, bazı C++ kodlarında sadece son "Ağaç çorbası" nı daha hızlı uygulamak için dönüştürüyorum. PMML'yi http://stackoverflow.com/questions/38431113/convert-a-pmml-describe-model-in-c-c'de görmüştüm, ancak bizim usecase'imiz için çok yardımcı olmadı. – user3313834

cevap

1

Eğitimli scikit'in taşınabilirliği için modelleri diğer dillerden öğrenebilirsiniz, sklearn-porter projesine bakın. Bu, orijinal RandomForestClassifier.predict yönteminden (çok iş parçacıklı olan ve numpy işlemlerini kullanan, potansiyel olarak hızlı bir BLAS kitaplığı ile) daha hızlı olup olmayacaksa da, yine de görülecektir.

İlgili konular