2014-02-12 4 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")) 

это приводит к «TypeError: не солить method_descriptor объекты»

Однако, если я не настроить анализатор, это соленья хорошо. Любые идеи о том, как я могу обойти эту проблему? Мне нужно сохранить векторизатор, если я собираюсь использовать его более широко.

Кстати, я обнаружил, что использование простой строки для анализатора и предварительной обработки корпуса для удаления нелегированных слов и стоп-слов необходимо для достойной скорости работы. В противном случае большая часть времени выполнения вектора вектора тратится на «text.py:114(_word_ngrams» ». То же самое относится и к HashingVectorizer

это связано с Persisting data in sklearn и http://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 

Решение использовать pickleable анализатор:

>>> 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

ли это дало мне ошибку: Traceback (самый последний вызов последнего): Файл "", строка 1, в Файл "C: \ python27 \ Lib \ pickle.py", строка 1374, в отвалах Pic kler (файл, протокол) .dump (obj) Файл «C: \ Python27 \ lib \ pickle.py», строка 224, в дампе self.save (obj) Файл «C: \ Python27 \ lib \ pickle. py ", строка 286, в save f (self, obj) # Вызов метода unbound с явным явлением Файл« C: \ Python27 \ lib \ pickle.py », строка 748, в save_global (obj, module, name)) PicklingError: Невозможно рассортировать <функция split на 0x000000000D5C1908>: она не найдена как __main __. Split –

+0

Что это значит? – David

+0

Вы можете установить vectorizer.stop_words_ = Нет, потому что для сериализации требуется много времени, а также не требуется для использования в будущем, поэтому опорожнение его покупает некоторое время. http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html – Ash

Смежные вопросы