2016-07-14 5 views
2

Я использую sklearn Pipeline и FeatureUnion для создания функций из текстовых файлов, и я хочу распечатать имена функций.TfidfVectorizer NotFittedError

Во-первых, я собираю все преобразования в список.

In [225]:components 
Out[225]: 
[TfidfVectorizer(analyzer=u'word', binary=False, decode_error=u'strict', 
     dtype=<type 'numpy.int64'>, encoding=u'utf-8', input=u'content', 
     lowercase=True, max_df=0.85, max_features=None, min_df=6, 
     ngram_range=(1, 1), norm='l1', preprocessor=None, smooth_idf=True, 
     stop_words='english', strip_accents=None, sublinear_tf=True, 
     token_pattern=u'(?u)[#a-zA-Z0-9/\\-]{2,}', 
     tokenizer=StemmingTokenizer(proc_type=stem, token_pattern=(?u)[a-zA-Z0-9/\-]{2,}), 
     use_idf=True, vocabulary=None), 
TruncatedSVD(algorithm='randomized', n_components=150, n_iter=5, 
     random_state=None, tol=0.0), 
TextStatsFeatures(), 
DictVectorizer(dtype=<type 'numpy.float64'>, separator='=', sort=True, 
     sparse=True), 
DictVectorizer(dtype=<type 'numpy.float64'>, separator='=', sort=True, 
     sparse=True), 
TfidfVectorizer(analyzer=u'word', binary=False, decode_error=u'strict', 
     dtype=<type 'numpy.int64'>, encoding=u'utf-8', input=u'content', 
     lowercase=True, max_df=0.85, max_features=None, min_df=6, 
     ngram_range=(1, 2), norm='l1', preprocessor=None, smooth_idf=True, 
     stop_words='english', strip_accents=None, sublinear_tf=True, 
     token_pattern=u'(?u)[a-zA-Z0-9/\\-]{2,}', 
     tokenizer=StemmingTokenizer(proc_type=stem, token_pattern=(?u)[a-zA-Z0-9/\-]{2,}), 
     use_idf=True, vocabulary=None)] 

Например, первым компонентом является объект TfidfVectorizer().

components[0] 
Out[226]: 
TfidfVectorizer(analyzer=u'word', binary=False, decode_error=u'strict', 
     dtype=<type 'numpy.int64'>, encoding=u'utf-8', input=u'content', 
     lowercase=True, max_df=0.85, max_features=None, min_df=6, 
     ngram_range=(1, 1), norm='l1', preprocessor=None, smooth_idf=True, 
     stop_words='english', strip_accents=None, sublinear_tf=True, 
     token_pattern=u'(?u)[#a-zA-Z0-9/\\-]{2,}', 
     tokenizer=StemmingTokenizer(proc_type=stem, token_pattern=(?u)[a-zA-Z0-9/\-]{2,}), 
     use_idf=True, vocabulary=None) 

type(components[0]) 
Out[227]: sklearn.feature_extraction.text.TfidfVectorizer 

Но когда я пытаюсь использовать метод get_feature_names TfidfVectorizer, он бросает NotFittedError

components[0].get_feature_names() 
Traceback (most recent call last): 

    File "<ipython-input-228-0160deb904f5>", line 1, in <module> 
    components[0].get_feature_names() 

    File "C:\Users\fheng\AppData\Local\Continuum\Anaconda\lib\site-packages\sklearn\feature_extraction\text.py", line 903, in get_feature_names 
    self._check_vocabulary() 

    File "C:\Users\fheng\AppData\Local\Continuum\Anaconda\lib\site-packages\sklearn\feature_extraction\text.py", line 275, in _check_vocabulary 
    check_is_fitted(self, 'vocabulary_', msg=msg), 

    File "C:\Users\fheng\AppData\Local\Continuum\Anaconda\lib\site-packages\sklearn\utils\validation.py", line 678, in check_is_fitted 
    raise NotFittedError(msg % {'name': type(estimator).__name__}) 

**NotFittedError: TfidfVectorizer - Vocabulary wasn't fitted.** 

ответ

2

Использовали у этого списка в pipeline или featureUnion? И вы назовете на них метод fit()?

Эта ошибка заключается в том, что вы не вызывали fit() (т. Е. Обучили модели) и direclty пытались получить доступ к значениям.

+0

Спасибо. Это проблема. –

+0

@Felicia Если вы удовлетворены, пожалуйста, примите ответ и/или закройте вопрос –

+0

, очевидно, мне нужно больше репутации, чтобы закрыть вопрос. Как принять ответ? –

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