2017-04-04 22 views
0

私はつぶやきのクラシファイアをトレーニングしようとしています。しかし、問題は、分類子が100%の精度を持ち、最も有益な特徴のリストには何も表示されないということです。誰かが私が間違っていることを知っていますか?私はクラシファイアへの私のすべての入力が正しいと思うので、どこが間違っているのか分かりません。NLTK Naive Bayesクラシファイアトレーニングの問題

FEATURE_SET = [(find_features(all_words:

import nltk 
import random 

file = open('Train/train.txt', 'r') 


documents = [] 
all_words = []   #TODO remove punctuation? 
INPUT_TWEETS = 3000 

print("Preprocessing...") 
for line in (file): 

    # Tokenize Tweet content 
    tweet_words = nltk.word_tokenize(line[2:]) 

    sentiment = "" 
    if line[0] == 0: 
     sentiment = "negative" 
    else: 
     sentiment = "positive" 
    documents.append((tweet_words, sentiment)) 

    for word in tweet_words: 
     all_words.append(word.lower()) 

    INPUT_TWEETS = INPUT_TWEETS - 1 
    if INPUT_TWEETS == 0: 
     break 

random.shuffle(documents) 


all_words = nltk.FreqDist(all_words) 

word_features = list(all_words.keys())[:3000] #top 3000 words 

def find_features(document): 
    words = set(document) 
    features = {} 
    for w in word_features: 
     features[w] = (w in words) 

    return features 

#Categorize as positive or Negative 
feature_set = [(find_features(all_words), sentiment) for (all_words, sentment) in documents] 


training_set = feature_set[:1000] 
testing_set = feature_set[1000:] 

print("Training...") 
classifier = nltk.NaiveBayesClassifier.train(training_set) 

print("Naive Bayes Accuracy:", (nltk.classify.accuracy(classifier,testing_set))*100) 
classifier.show_most_informative_features(15) 
+1

が問題のように見える[0] '' int' '0'に沿っ 'の文字を比較しています。私はあなたの入力が否定的な感情を示すために実際にヌルバイトを使用するのか疑問です。 – alexis

答えて

1

あなたのコードにタイプミスがあります:これは私のコードである http://thinknook.com/wp-content/uploads/2012/09/Sentiment-Analysis-Dataset.zip

この

は、私が使用しているデータセットです)、感想)for(all_words、 sentim

このca sentimentを使用して常に同じ値(前処理ステップの最後のツイートの値)を使用するので、トレーニングは無意味であり、すべての機能は無関係です。

修正それを、あなたが取得します:

('Naive Bayes Accuracy:', 66.75) 
Most Informative Features 
        -- = True   positi : negati =  6.9 : 1.0 
       these = True   positi : negati =  5.6 : 1.0 
       face = True   positi : negati =  5.6 : 1.0 
       saw = True   positi : negati =  5.6 : 1.0 
        ] = True   positi : negati =  4.4 : 1.0 
       later = True   positi : negati =  4.4 : 1.0 
       love = True   positi : negati =  4.1 : 1.0 
        ta = True   positi : negati =  4.0 : 1.0 
       quite = True   positi : negati =  4.0 : 1.0 
       trying = True   positi : negati =  4.0 : 1.0 
       small = True   positi : negati =  4.0 : 1.0 
       thx = True   positi : negati =  4.0 : 1.0 
       music = True   positi : negati =  4.0 : 1.0 
        p = True   positi : negati =  4.0 : 1.0 
      husband = True   positi : negati =  4.0 : 1.0 
+0

私は入力ミスを変更しましたが、私の出力はまだ100%であり、機能が表示されていません。 –

+0

train.txtが破損しているか不完全ですか?私は元のデータを 'df = pd.read_csv( 'Sentiment Analysis Dataset.csv'、error_bad_lines = False、encoding = 'utf-8')'を使ってDataFrameに読み込み、 'df.iterrows()'を使って行を繰り返した。上記の出力を貼り付ける。 – acidtobi

+0

.csvを読むためのコード全体を表示できますか? –

関連する問題