值错误:无法处理未知和二进制混合
我最近使用了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
2 个回答
0
你需要把 All_train 传给 classifier.score。
像这样:
accuracy = classifier.score(test_matrix,ALL_train)
print accuracy
如果你想评估你的模型在测试数据上的表现,那么召回率、精确率、F1 分数和 AUC 分数可能会对你有帮助。
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]
你给评分函数传入的是
ALL_test = (test_data['Tweet'])
,也就是文本,而不是ALL_Test = positive_test + negative_test + neutral_test
,后者才是你真正想要的结果。这就是出现异常的原因。我不太明白你为什么需要All_test
,但如果需要的话,最好换个名字——这样会让人更容易理解。