2017-06-20 5 views
0

私はsklearnにはかなり新しく、scickitを使って簡単なテキスト分類子を構築しようとしていますが、ValueErrorを実行しています。 fit()にエラーが表示されますが、他のチュートリアルでそのまま使用していて正常に動作しています。ここでsklearnクラシファイアモデルを実行しているときの値エラー

は私のコードです:それを実行している場合

from sklearn.datasets import fetch_20newsgroups 
from sklearn.cross_validation import train_test_split 
from sklearn.feature_extraction.text import TfidfVectorizer 
from sklearn.pipeline import Pipeline 
from sklearn.naive_bayes import MultinomialNB 

news = fetch_20newsgroups(subset='all') 
print len(news.data) 



def train(classifier , X , y): 
     X_train , y_train , X_test , y_test = train_test_split(X,y,test_size =   0.20, random_state = 33) 
     classifier.fit(X_train ,y_train) 
     print "Accuracy %s" % classifier.score(X_test , y_test) 
     return classifier 

model1 = Pipeline([('vectorizer' , TfidfVectorizer()),('classifier' , MultinomialNB()),]) 

train(model1 , news.data , news.target) 

、私はそれは、サンプルの一貫性のない数で何を意味し

Traceback (most recent call last): 
    File "/home/padam/Documents/git/ticketClassifier/news.py", line 30, in <module> 
    train(model1 , news.data , news.target) 
    File "/home/padam/Documents/git/ticketClassifier/news.py", line 24, in train 
    classifier.fit(X_train ,y_train) 
    File "/usr/lib/python2.7/dist-packages/sklearn/pipeline.py", line 165, in fit 
    self.steps[-1][-1].fit(Xt, y, **fit_params) 
    File "/usr/lib/python2.7/dist-packages/sklearn/naive_bayes.py", line 527, in fit 
    X, y = check_X_y(X, y, 'csr') 
    File "/usr/lib/python2.7/dist-packages/sklearn/utils/validation.py", line 520, in check_X_y 
    check_consistent_length(X, y) 
    File "/usr/lib/python2.7/dist-packages/sklearn/utils/validation.py", line 176, in check_consistent_length 
    "%s" % str(uniques)) 
ValueError: Found arrays with inconsistent numbers of samples: [ 3770 15076] 

値エラーを取得しています。他のstackoverflowソリューションは、行列をnumpy行列に並べ替えることを提案しています。しかし、私はnumpyを使用しませんでした。 ありがとう!

答えて

1

エラーは、train_test_splitをどのように使用しているかにあります。

あなたは

X_train , y_train , X_test , y_test = train_test_split(X, y, 
               test_size = 0.20, 
               random_state = 33) 

としてそれを使用しているが、出力順序は、実際にas given in documentation異なっています。これは、次のとおりです。

X_train , X_test , y_train , y_test = train_test_split(X, y, 
               test_size = 0.20, 
               random_state = 33) 

また、1つの勧告はあなたがscikitバージョン> = 0.18を使用している場合、その非推奨となり、新しいバージョンでは削除されますので、その後、cross_validationからmodel_selectionにパッケージを変更することです。

ので、代わりに: - :

from sklearn.model_selection import train_test_split 

from sklearn.cross_validation import train_test_split 

は、次を使用します。