2017-08-21 7 views
0

この質問を投稿する前に、私はこのボードで15以上の類似したトピックを徹底的に読んだことがありますが、それぞれ異なる推奨事項がありますが、CountVectorizer MultinomialNBのディメンション不一致エラー

私は、CountVectorizerとその 'fit_transform'関数を使ってコーパスの語彙に合わせて、テキストから単語数の特徴を抽出することで、元のCSV形式のテキストデータをトレーニングとテストのセットに分割しました。そして、MultinomialNB()を適用してトレーニングセットから学び、テストセットを予測しました。ここでは(簡体字)私のコードです:

from sklearn.feature_extraction.text import CountVectorizer 
 
from sklearn.cross_validation import train_test_split 
 
from sklearn.naive_bayes import MultinomialNB 
 

 
# loading data 
 
# data contains two columns ('text', 'target') 
 

 
spam = pd.read_csv('spam.csv') 
 
spam['target'] = np.where(spam_data['target']=='spam',1,0) 
 

 
# split data 
 
X_train, X_test, y_train, y_test = train_test_split(spam_data['text'], spam_data['target'], random_state=0) 
 

 
# fit vocabulary and extract word count features 
 
cv = CountVectorizer() 
 
X_traincv = cv.fit_transform(X_train) 
 
X_testcv = cv.fit_transform(X_test) 
 

 
# learn and predict using MultinomialNB 
 
clfNB = MultinomialNB(alpha=0.1) 
 
clfNB.fit(X_traincv, y_train) 
 

 
# so far so good, but when I predict on X_testcv 
 
y_pred = algo.predict(X_testcv) 
 

 
# Python throws me an error: dimension mismatch 
 
                
 
               
私は前の質問スレッドから収集提案は(1)を使用のみ.transform()X_test上、または(2)各かどうかを確認します

行が元の迷惑メールデータの文字列形式(はい、あります)、または(3)X_testで何もしません。しかし、それらのすべては鐘を鳴らさなかったし、Pythonは私に次元の不一致のエラーを与え続けた。 4時間苦労した後、私はStackoverflowに屈服しなければなりませんでした。誰もが私にこのことを教えてもらえると本当に感謝しています。私のコードで何がうまくいかないのか、次元を正しく得る方法を知りたいだけです。

ありがとうございます。

ところで、元のデータ・エントリは、すでにトレーニングデータを装着してきたこの

_ 
 
              
 
             test target 
 
0 Go until jurong point, crazy.. Available only 0 
 
1 Ok lar... Joking wif u oni...     0 
 
2 Free entry in 2 a wkly comp to win FA Cup fina 1 
 
3 U dun say so early hor... U c already then say 0 
 
4 Nah I don't think he goes to usf, he lives aro 0 
 
5 FreeMsg Hey there darling it's been 3 week's n 1 
 
6 WINNER!! As a valued network customer you have 1
あなた CountVectorizer

答えて

1

のように見えます。したがって、テストデータの場合はtransform()に電話をかけ、fit_transform()には電話しないでください。

また、fit_transform()をテストデータに使用すると、テストデータの固有のボキャブラリに基づいて異なる列が表示されます。だから、トレーニングのために一度フィットしてください。

X_testcv = cv.transform(X_test) 
+1

ありがとうございました。ありがとうございました。私は、.fit_transformと.transformの違いを説明してくれてありがとうございました。私はこれを前に試しましたが、当時私にエラーメッセージを投げかけました。 –

関連する問題