2016-05-17 13 views
1

こんにちは、私は一般的にscikitの学習とデータ科学に慣れていません。私は上記の問題に取り組んでいるうちに、私のベクタライザから最も有益な機能を取得しようとしています。私のコード(ギャングさんのコメント@反映するように編集):ValueError:サンプル数が一致しない配列が見つかりました:[4 16149]

values = dataset.data 
word_vectorizer = CountVectorizer(analyzer='word', stop_words=custom_stop_words) 
trainset = word_vectorizer.fit_transform(values) 
tags = ['dem','rep','dem','rep'] 
tags = np.array(tags) 
trainset = trainset.toarray() 

word_svm = svm.LinearSVC() 
word_svm.fit(trainset, tags) 


def most_informative_feature_for_binary_classification(vectorizer, classifier, n=10): 
class_labels = classifier.classes_ 
feature_names = vectorizer.get_feature_names() 
topn_class1 = sorted(zip(classifier.coef_[0], feature_names))[:n] 
topn_class2 = sorted(zip(classifier.coef_[0], feature_names))[-n:] 

for coef, feat in topn_class1: 
    print class_labels[0], coef, feat 

print 

for coef, feat in reversed(topn_class2): 
    print class_labels[1], coef, feat 


most_informative_feature_for_binary_classification(word_vectorizer, word_svm) 

をターミナル出力:

Traceback (most recent call last): 
File "classification.py", line 251, in <module> 
word_svm.fit(trainset, tags) 
File "/usr/local/lib/python2.7/site-packages/sklearn/svm/classes.py", line 205, in fit 
dtype=np.float64, order="C") 
File "/usr/local/lib/python2.7/site-packages/sklearn/utils/validation.py", line 520, in check_X_y 
check_consistent_length(X, y) 
File "/usr/local/lib/python2.7/site-packages/sklearn/utils/validation.py", line 176, in check_consistent_length 
"%s" % str(uniques)) 
ValueError: Found arrays with inconsistent numbers of samples: [ 4 16149] 

私はこの問題に関する任意およびすべてのヘルプをいただければと思います。十分な情報を提示していない場合は、私に知らせてください。あなたの時間の前にありがとう!両方のパラメータが同じタイプでなければなりません - - ここで

+0

にこの機能を追加ここで、fは特徴の数(カウントベクトル化器内の単語の数)であり、nはnu(n、f)の次元数文書の内容これは監督された方法であるため、長さn(文書の数)のy(ここではタグもターゲットと呼ばれる)ベクトルを取る必要があります。何が起こっているかのように見えるのは、カウントベクトル化ツールが16,149個のドキュメント(おそらく#の数)を吐き出しているのか、いくつのドキュメントが値に入っているのでしょうか? – bbengfort

+0

もし4を期待していたら、おそらく 'word_vectorizer.fit_transform([values])'を試してください – bbengfort

答えて

0

は、それが失敗したところである配列

word_svm.fit(trainset, tags) 

タグ配列ではありません、あなたがにプリントを使用することができ、アレイ

tags = ['dem','rep','dem','rep'] 

に変換する必要がありますそれらが同じタイプであるかどうかを確認してください

print type(tags) 
print type(trainset) 

次のコードは、テキストエディタwithou実行するには、保証するのではなく、あなたは考えを持っている、私は配列に変換することについて間違っている可能性があります、リストは大丈夫です。

あなたの編成が適切に無効なデータが含まれ、これに

word_svm.fit(trainset, tags) 

を置き換える:

trainset_good, trainset_bad = trainset_check(trainset, tags) 
print 'Bad data\n' 
print trainset_bad 
if len(trainset_good)==0: 
    print 'No good valid data found, exit' 
    sys.exit(1) 

# use good data 
word_svm.fit(trainset_good, tags) 

は(フィット法は、Xの配列を期待コード

def trainset_check(trainset, tags): 
    trainset_good = [] 
    trainset_bad = [] 
    if not trainset: 
     print 'Err trainset is empty' 
     return trainset_good, trainset_bad 
    if not tags: 
     print 'Err - tags empty' 
     return trainset_good, trainset_bad 
    if len(trainset)==0: 
     print 'Err trainset is empty' 
     return trainset_good, trainset_bad 
    if len(tags)==0: 
     print 'Err tags empty' 
     return trainset_good, trainset_bad 
    for item in trainset: 
     if len(item) != len(tags): 
      print 'Error - trainset item is not the same length as tags' 
      print item 
      trainset_bad.append(item) 
      # skip to next 
      continue 
     # filter out None type 
     item_new = filter(None, item) 
     if len(item_new) != len(tags): 
      print 'Error - trainset item is not the same length as tags' 
      # bad trainset data, skip to next 
      print item 
      trainset_bad.append(item) 
      continue 
     trainset_good.append(item) 
    return trainset_good, trainset_bad 
+0

こんにちは私はあなたの変更を反映するために私のコードを編集しましたが、私はまだ同じエラーに走っています。 – salols

+0

@salols、新しい編集が役に立たないことがわかったら、間違ったトラックにいるかもしれません。 – Gang

関連する問題