scikit-learn ValueError: desajuste de dimensión

Es mi primera vez publicando aquí. Durante los últimos días he estado tratando de enseñarme a mí mismo scikit-learn. Pero recientemente me he encontrado con un error que me ha estado molestando durante bastante tiempo.

Mi objective es simplemente entrenar a un cli clasificador de NB para que pueda alimentarlo con una lista arbitraria de cadenas llamada new_doc y predecirá a qué clase es probable que pertenezca la cadena.

Así es como se ve mi progtwig:

 #Importing stuff import numpy as np import pylab import pandas as pd from sklearn.naive_bayes import MultinomialNB from sklearn.pipeline import Pipeline from sklearn.feature_extraction.text import TfidfVectorizer, HashingVectorizer, CountVectorizer from sklearn import metrics #Opening the csv file df = pd.read_csv('data.csv', sep=',') #Randomising the rows in the file df = df.reindex(np.random.permutation(df.index)) #Extracting features from text, define target y and data X vect = CountVectorizer() X = vect.fit_transform(df['Features']) y = df['Target'] #Partitioning the data into test and training set SPLIT_PERC = 0.75 split_size = int(len(y)*SPLIT_PERC) X_train = X[:split_size] X_test = X[split_size:] y_train = y[:split_size] y_test = y[split_size:] #Training the model clf = MultinomialNB() clf.fit(X_train, y_train) #Evaluating the results print "Accuracy on training set:" print clf.score(X_train, y_train) print "Accuracy on testing set:" print clf.score(X_test, y_test) y_pred = clf.predict(X_test) print "Classification Report:" print metrics.classification_report(y_test, y_pred) #Predicting new data new_doc = ["MacDonalds", "Walmart", "Target", "Starbucks"] trans_doc = vect.transform(new_doc) #extracting features y_pred = clf.predict(trans_doc) #predicting 

Pero cuando ejecuto el progtwig obtengo el siguiente error en la última fila:

 y_pred = clf.predict(trans_doc) Traceback (most recent call last): File "", line 1, in  File "/Library/Python/2.7/site-packages/sklearn/naive_bayes.py", line 62, in predict jll = self._joint_log_likelihood(X) File "/Library/Python/2.7/site-packages/sklearn/naive_bayes.py", line 441, in _joint_log_likelihood return (safe_sparse_dot(X, self.feature_log_prob_.T) File "/Library/Python/2.7/site-packages/sklearn/utils/extmath.py", line 175, in safe_sparse_dot ret = a * b File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/scipy/sparse/base.py", line 334, in __mul__ raise ValueError('dimension mismatch') ValueError: dimension mismatch 

Así que, aparentemente, tiene algo que ver con la dimensión de las matrices de documentos a plazo.

Cuando verifico las dimensiones de trans_doc, X_train y X_test obtengo:

 >>> trans_doc.shape (4, 4) >>> X_train.shape (145314, 28750) >>> X_test.shape (48439, 28750) 

Para que y_pred = clf.predict(trans_doc) funcione, necesito (por lo que lo entiendo) transformar new_doc en una matriz de documento temporal con las dimensiones (4, 28750) . Pero no conozco ningún método dentro de CountVectorizer que me permita hacer esto.