测试数据和训练数据的列数不相同

时间:2019-02-13 07:22:23

标签: python machine-learning prediction naivebayes

我正在尝试确定新闻头条是真实的还是虚假的。

为此,我使用“ CountVectorizer”来计算每个句子中每个单词的使用次数。

问题在于句子中的单词数不相同,因此训练集和测试集的列数不相同。

因此,该程序在测试阶段无法正常工作。

# Vectorized All Data
from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(sentenceInput)

result = pd.DataFrame(data = X.toarray())

因此,“结果”变量是相关数据。

# Naive Bayes Prediction
from sklearn.naive_bayes import GaussianNB
nb = GaussianNB()
nb.fit(result,targetInput)

我通过目标变量将数据传授给系统。

问题在那之后开始。

# Test Data
X = vectorizer.fit_transform(testList)
print(vectorizer.get_feature_names())
print(X.toarray())

testResult = pd.DataFrame(data = X.toarray())

prediction = nb.predict(testResult)
print(prediction)

当我在屏幕上打印“预测”时出现以下错误。

ValueError: operands could not be broadcast together with shapes (489,1828) 
(5273,)

我不确定问题是否正是我要说的。

1 个答案:

答案 0 :(得分:1)

CountVectorizer实际上并不关心每个句子中有多少个单词,它的输出是一个稀疏矩阵,其中列是单词,行是句子,值是单词的次数在给定的句子中出现,即白菜出现3次,袋子出现0次,等等。

要使数据匹配,您需要使用相同的CountVectorizer,而不是重新拟合当前在测试阶段发生的情况(使用.fit_transform()

将测试更改为简单的transform,问题的这一部分将消失。这将使用您在所有数据上训练的CountVectorizer,并以用于创建模型的形式输出值。

# Test Data
X = vectorizer.transform(testList)