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

问题描述 投票:1回答:1

我试图确定新闻标题是真实的还是假的。

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

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

因此,程序在测试阶段不起作用。

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

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

因此,'result'变量是依赖数据。

# 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,)

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

python machine-learning prediction naivebayes
1个回答
1
投票

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

为了使您的数据匹配,您需要使用相同的CountVectorizer而不是重新安装,这是您的测试阶段当前发生的事情(使用.fit_transform()

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

# Test Data
X = vectorizer.transform(testList)
© www.soinside.com 2019 - 2024. All rights reserved.