2014-02-12 22 views
1

我無法酸洗矢量化定製我後。如何泡菜定製矢量化器?

from sklearn.feature_extraction.text import TfidfVectorizer 
import pickle 
tfidf_vectorizer = TfidfVectorizer(analyzer=str.split) 
pickle.dump(tfidf_vectorizer, open('test.pkl', "wb")) 

這導致 「類型錯誤:不能泡菜method_descriptor對象」

但是,如果我不自定義分析儀,它泡菜罰款。關於如何解決此問題的任何想法?如果我要更廣泛地使用它,我需要堅持向量化器。

順便說一句,我發現,使用分析和預加工語料庫除去非詞彙和停止的話簡單的字符串分割是體面的運行速度是至關重要的。否則,大部分矢量化程序運行時間將花費在「text.py:114(_word_ngrams)」中。這同樣適用於HashingVectorizer

這是關係到Persisting data in sklearnhttp://scikit-learn.org/0.10/tutorial.html#model-persistence (順便說一下,sklearn.externals.joblib.dump也沒有幫助)

的感謝!

回答

3

這與其說是一個scikit學習問題作爲一般的Python問題:

>>> pickle.dumps(str.split) 
Traceback (most recent call last): 
    File "<ipython-input-7-7d3648c78b22>", line 1, in <module> 
    pickle.dumps(str.split) 
    File "/usr/lib/python2.7/pickle.py", line 1374, in dumps 
    Pickler(file, protocol).dump(obj) 
    File "/usr/lib/python2.7/pickle.py", line 224, in dump 
    self.save(obj) 
    File "/usr/lib/python2.7/pickle.py", line 306, in save 
    rv = reduce(self.proto) 
    File "/usr/lib/python2.7/copy_reg.py", line 70, in _reduce_ex 
    raise TypeError, "can't pickle %s objects" % base.__name__ 
TypeError: can't pickle method_descriptor objects 

的解決方案是使用一個與pickle分析:

>>> def split(s): 
...  return s.split() 
... 
>>> pickle.dumps(split) 
'c__main__\nsplit\np0\n.' 
>>> tfidf_vectorizer = TfidfVectorizer(analyzer=split) 
>>> type(pickle.dumps(tfidf_vectorizer)) 
<type 'str'> 
+0

難道這給了我一個錯誤: 回溯(最近通話最後一個): 文件 「」,1號線,在 文件 「C:\ Python27 \ LIB \ pickle.py」,線1374,在轉儲 產品圖kler(文件,協議)使用.dump(OBJ) 文件 「C:\ Python27 \ lib中\ pickle.py」,線224,在轉儲 self.save(OBJ) 文件「C:\ Python27 \ lib中\泡菜。 PY」,線路286,在保存 F(自我,OBJ)#調用未帶有明確的自我 檔案法 「C:\ Python27 \ LIB \ pickle.py」,線路748,在save_global (OBJ,模塊名稱) ) PicklingError:<在0x000000000D5C1908功能拆分>無法鹹菜:它沒有發現如__main __分裂 –

+0

這是什麼意思?。 – David

+0

您可以設置vectorizer.stop_words_ =無,因爲它需要大量的時間來進行序列化,也沒有必要以供將來使用,從而排空買一段時間。 http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html – Ash