测试数据和训练数据的列数不一样
The number of columns of test data and training data is not the same
我正在尝试确定新闻标题是真是假。
为此,我使用 '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)
当我想在屏幕上打印 'prediction' 时出现以下错误。
ValueError: operands could not be broadcast together with shapes (489,1828)
(5273,)
我不确定问题是否正是我所说的。
CountVectorizer
实际上并不关心每个句子有多少个单词,它的输出是一个稀疏矩阵,其中列是单词,行是句子,值是次数该词出现在给定的句子中,即 cabbage 出现 3 次,bag 出现 0 次等
为了使您的数据匹配,您需要使用相同的 CountVectorizer
而不是改装,这是目前在您的测试阶段发生的事情(使用 .fit_transform()
)
将您的测试更改为简单的 transform
,这部分问题应该会消失。这将使用您在所有数据上训练的 CountVectorizer,并以您用于创建模型的形式输出值。
# Test Data
X = vectorizer.transform(testList)
我正在尝试确定新闻标题是真是假。
为此,我使用 '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)
当我想在屏幕上打印 'prediction' 时出现以下错误。
ValueError: operands could not be broadcast together with shapes (489,1828)
(5273,)
我不确定问题是否正是我所说的。
CountVectorizer
实际上并不关心每个句子有多少个单词,它的输出是一个稀疏矩阵,其中列是单词,行是句子,值是次数该词出现在给定的句子中,即 cabbage 出现 3 次,bag 出现 0 次等
为了使您的数据匹配,您需要使用相同的 CountVectorizer
而不是改装,这是目前在您的测试阶段发生的事情(使用 .fit_transform()
)
将您的测试更改为简单的 transform
,这部分问题应该会消失。这将使用您在所有数据上训练的 CountVectorizer,并以您用于创建模型的形式输出值。
# Test Data
X = vectorizer.transform(testList)