0

私は最近、センチメント分析に scikit-learn を使用したので、ラベル付きデータをトレーニングした後、ラベルなしデータ セットでテストしようとすると、「ValueError: Can't handle mix of continuous-multioutput and binary」というエラーが表示されます。

私が間違っているのは、(y_pred) に間違った仮定を与えていることだと思います。

エラーはこれから発生します: accuracy = classifier.score(test_matrix,ALL_test)

しかし、ALL_test を ALL_train (訓練され、ラベル付けされたデータ) に変更すると、0.971251409245 の精度が得られます。これは絶対に間違っています

私は何をすべきか?

# -*- coding:utf-8 -*-
import sklearn.cross_validation
import sklearn.feature_extraction.text
import sklearn.metrics
import sklearn.naive_bayes
from sklearn import svm
import numpy as np
import pandas as pd
from sklearn.metrics import accuracy_score, precision_score, recall_score


name = ['Tweet','Label']
name2 =['Tweet','Label']
data_train = pd.read_table('unstemmedtrain.csv',sep = ';',names = name)
data_test = pd.read_table('unstemmedtest.csv',names=name2)
train_data =pd.DataFrame(data_test,columns=name2)
test_data=pd.DataFrame(data_train,columns=name)

vectorizer =  sklearn.feature_extraction.text.CountVectorizer()

train_matrix = vectorizer.fit_transform(train_data['Tweet'])
test_matrix = vectorizer.transform(test_data['Tweet'])
#print train_matrix

positive_train = (train_data['Label']=='positive')
negative_train= (train_data['Label']=='negative')
neutral_train=(train_data['Label']=='neutral')
#print negative_cases_train
ALL_train = positive_train +negative_train +neutral_train
#print positive_cases_train
ALL_test = (test_data['Tweet'])
positive_test =(test_data['Label']=='positive')
negative_test =(test_data['Label']=='negative')
neutral_test = (test_data['Label']=='neutral')
ALL_Test = positive_test + negative_test + neutral_test

#print positive_cases_test


classifier=sklearn.naive_bayes.MultinomialNB()
classifier2 = classifier.fit(train_matrix,ALL_train)

p_sentiment = classifier.predict(test_matrix)
p_prob = classifier.predict_proba(test_matrix)
#print predicted_prob
accuracy = classifier.score(test_matrix,ALL_test)
print accuracy
4

2 に答える 2

1

ここにはいくつかの問題があります。

  1. どのツイートがポジティブで、どのツイートがネガティブで、どれがニュートラルかを予測しようとしていますか、それともツイートがポジティブ/ネガティブ/ニュートラルかどうかを予測しようとしていますか? あなたは後者をやっています。と仮定しましょうtrain_data['Label'] = ['positive', 'positive', 'negative', 'neutral']。したがって、コードは次のようになります。

    positive_train = (train_data['Label']=='positive') # = [True, True, False, False]
    negative_train= (train_data['Label']=='negative') # = [False, False, True, False]
    neutral_train=(train_data['Label']=='neutral') # = [False, False, False, True]
    ALL_train = positive_train +negative_train +neutral_train # = [True, True, True, True]
    
  2. あなたは実際のyALL_test = (test_data['Tweet'])ではなく、テキストであるスコア関数を与えています。ALL_Test = positive_test + negative_test + neutral_testそこから例外が発生します。が必要な理由はわかりませんが、必要なAll_test場合は別の名前を付けてください-混乱します.

于 2014-06-10T15:41:04.467 に答える
0

all_train を classifier.score に渡す必要があります

として:

accuracy = classifier.score(test_matrix,ALL_train)
print accuracy

テスト データのモデルを評価する場合は、Recall、precision、f1 スコア、および auc_score が役立つ場合があります

于 2015-03-15T11:11:43.597 に答える