title: Sklearn NotFittedError for CountVectorizer in pipeline
body: <p>I am trying to learn how to work with text data through sklearn and am running into an issue that I cannot solve.</p>
  
  <p>The tutorial I'm following is: <a href="http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html" rel="nofollow noreferrer">http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html</a></p>
  
  <p>The input is a pandas df with two columns. One with text, one with a binary class.</p>
  
  <p>Code:</p>
  
  
  
  <pre class="lang-py prettyprint-override"><code>from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
  from sklearn.naive_bayes import MultinomialNB
  from sklearn.pipeline import Pipeline
  
  traindf, testdf = train_test_split(nlp_df, stratify=nlp_df['class'])
  
  x_train = traindf['text']
  x_test = traindf['text']
  y_train = traindf['class']
  y_test = testdf['class']
  
  # CV
  count_vect = CountVectorizer(stop_words='english')
  x_train_modified = count_vect.fit_transform(x_train)
  x_test_modified = count_vect.transform(x_test)
  
  
  # TF-IDF
  idf = TfidfTransformer()
  fit = idf.fit(x_train_modified)
  x_train_mod2 = fit.transform(x_train_modified)
  
  # MNB
  
  mnb = MultinomialNB()
  x_train_data = mnb.fit(x_train_mod2, y_train)
  
  text_clf = Pipeline([('vect', CountVectorizer()),
               ('tfidf', TfidfTransformer()),
                 ('clf', MultinomialNB()),
                  ])
  
  predicted = text_clf.predict(x_test_modified)
  </code></pre>
  
  <p>When I try to run the last line:</p>
  
  <pre class="lang-py prettyprint-override"><code>---------------------------------------------------------------------------
  NotFittedError                            Traceback (most recent call last)
  &lt;ipython-input-64-8815003b4713&gt; in &lt;module&gt;()
  ----&gt; 1 predicted = text_clf.predict(x_test_modified)
  
  ~/anaconda3/lib/python3.6/site-packages/sklearn/utils/metaestimators.py in &lt;lambda&gt;(*args, **kwargs)
      113 
      114         # lambda, but not partial, allows help() to work with update_wrapper
  --&gt; 115         out = lambda *args, **kwargs: self.fn(obj, *args, **kwargs)
      116         # update the docstring of the returned function
      117         update_wrapper(out, self.fn)
  
  ~/anaconda3/lib/python3.6/site-packages/sklearn/pipeline.py in predict(self, X)
      304         for name, transform in self.steps[:-1]:
      305             if transform is not None:
  --&gt; 306                 Xt = transform.transform(Xt)
      307         return self.steps[-1][-1].predict(Xt)
      308 
  
  ~/anaconda3/lib/python3.6/site-packages/sklearn/feature_extraction/text.py in transform(self, raw_documents)
      918             self._validate_vocabulary()
      919 
  --&gt; 920         self._check_vocabulary()
      921 
      922         # use the same matrix-building strategy as fit_transform
  
  ~/anaconda3/lib/python3.6/site-packages/sklearn/feature_extraction/text.py in _check_vocabulary(self)
      301         """Check if vocabulary is empty or missing (not fit-ed)"""
      302         msg = "%(name)s - Vocabulary wasn't fitted."
  --&gt; 303         check_is_fitted(self, 'vocabulary_', msg=msg),
      304 
      305         if len(self.vocabulary_) == 0:
  
  ~/anaconda3/lib/python3.6/site-packages/sklearn/utils/validation.py in check_is_fitted(estimator, attributes, msg, all_or_any)
      766 
      767     if not all_or_any([hasattr(estimator, attr) for attr in attributes]):
  --&gt; 768         raise NotFittedError(msg % {'name': type(estimator).__name__})
      769 
      770 
  
  NotFittedError: CountVectorizer - Vocabulary wasn't fitted.
  </code></pre>
  
  <p>Any suggestions on how to fix this error? I am properly transforming the CV model on the test data. I even checked if the vocabulary list was empty and it isn't (count_vect.vocabulary_)</p>
  
  <p>Thank you!</p>