【问题标题】:The number of columns of test data and training data is not the same测试数据和训练数据的列数不一样
【发布时间】:2019-07-06 23:01:17
【问题描述】:

我正在尝试确定新闻标题是真的还是假的。

为此,我使用“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,)

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

【问题讨论】:

    标签: python machine-learning prediction naivebayes


    【解决方案1】:

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

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

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

    # Test Data
    X = vectorizer.transform(testList)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-20
      • 2021-03-14
      • 2023-03-12
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      • 2019-06-16
      • 1970-01-01
      相关资源
      最近更新 更多