ValueError:无法处理未知和二进制的混合
Posted
技术标签:
【中文标题】ValueError:无法处理未知和二进制的混合【英文标题】:ValueError: Can't handle mix of unknown and binary 【发布时间】:2014-07-30 12:24:12 【问题描述】:我最近使用 scikit-learn 进行情绪分析,所以在我训练了我的标记数据然后尝试在未标记的数据集上测试它们之后,出现了这个错误“ValueError: Can't handle mix of continuous-multioutput and二进制'
我认为我做错的是我给 (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
【问题讨论】:
您使用的是哪个分类器?你能提供一个可用(但最少)的代码示例吗? 朴素贝叶斯多项式, 【参考方案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
,这是你真正的y。这就是异常的来源。我不知道你为什么需要All_test
,但如果你需要,请换个名字——这会让你感到困惑。
【讨论】:
【参考方案2】:你必须将 All_train 传递给 classifier.score
作为:
accuracy = classifier.score(test_matrix,ALL_train)
print accuracy
如果您想针对测试数据评估您的模型,那么 Recall、precision、f1 score 和 auc_score 可能会有所帮助
【讨论】:
以上是关于ValueError:无法处理未知和二进制的混合的主要内容,如果未能解决你的问题,请参考以下文章
Logistic 回归 - ValueError:分类指标无法处理连续多输出和二进制目标的混合
Python Sklearn“ValueError:分类指标无法处理多类多输出和二进制目标的混合”错误