2013-07-11 13 views
3

什麼是序列化scikit-learn分類器的最有效方式?如何高效地序列化scikit-learn分類器

我目前使用Python的標準Pickle模塊來序列化一個text classifier,但這會導致一個巨大的醬菜。序列化的對象可以是100MB或更多,這似乎過多,需要一段時間來生成和存儲。我已經完成了與Weka類似的工作,並且等效的序列化分類器通常只是幾MB。

scikit-learn可能緩存在酸菜中的訓練數據或其他無關信息嗎?如果是這樣,我該如何加快並縮小序列化的scikit-learn分類器的大小?

classifier = Pipeline([ 
    ('vectorizer', CountVectorizer(ngram_range=(1,4))), 
    ('tfidf', TfidfTransformer()), 
    ('clf', OneVsRestClassifier(LinearSVC())), 
]) 
+0

你在cPickle中使用協議-1嗎?這通常會造成不可思議的差異。 –

回答

3

對於大型數據集文字,使用散列招:由HashingVectorizer(在管道與TfidfTransformer潛在堆疊)更換TfidfVectorizer:它會快很多鹹菜,你不會有存儲詞彙字典更多的在這個問題最近討論:

How can i reduce memory usage of Scikit-Learn Vectorizers?

+0

謝謝。這和使用joblib減少了約20-30%的大小。不是很大但很體面。 – Cerin

2

您還可以使用joblib.dump,並通過在壓縮。我注意到使用選項compress = 3,我的分類器pickle dump減少了約16倍。