python - TfIdf 矩阵返回 BernoulliNB 的特征数量错误

标签 python scikit-learn tf-idf naivebayes

使用 python lib sklearn,我尝试从训练集中提取特征,并使用该数据拟合 BernoulliNB 分类器。

训练分类器后,我想预测(分类)一些新的测试数据。 不幸的是我收到这个错误:

Traceback (most recent call last):
File "sentiment_analysis.py", line 45, in <module> main()
File "sentiment_analysis.py", line 41, in main
  prediction = classifier.predict(tfidf_data)
File "\Python27\lib\site-packages\sklearn\naive_bayes.py", line 64, in predict
  jll = self._joint_log_likelihood(X)
File "\Python27\lib\site-packages\sklearn\naive_bayes.py", line 724, in _joint_log_likelihood
  % (n_features, n_features_X))
ValueError: Expected input with 4773 features, got 13006 instead

这是我的代码:

#Train the Classifier
data,target = load_file('validation/validation_set_5.csv')
tf_idf = preprocess(data)
classifier = BernoulliNB().fit(tf_idf, target)

#Predict test data
count_vectorizer = CountVectorizer(binary='true')
test = count_vectorizer.fit_transform(test)
tfidf_data = TfidfTransformer(use_idf=False).fit_transform(test)
prediction = classifier.predict(tfidf_data)

最佳答案

这就是您出现此错误的原因:

test = count_vectorizer.fit_transform(test)
tfidf_data = TfidfTransformer(use_idf=False).fit_transform(test)

这里您应该仅使用训练集上安装的旧变压器(CountVectorizer 和 TfidfTransformer 是您的变压器)。

fit_transform

意味着您将这些变压器安装在新的集合上,丢失有关旧拟合的所有信息,然后使用此变压器转换“测试”(在新样本和不同的特征集上学习)。因此,它返回转换为新特征集的测试集,与训练集中使用的旧特征集不兼容。要解决此问题,您应该在旧变压器上使用转换(而不是 fit_transform)方法,并安装在训练集上。

你应该这样写:

test = old_count_vectorizer.transform(test)
tfidf_data = old_tfidf_transformer.transform(test)

关于python - TfIdf 矩阵返回 BernoulliNB 的特征数量错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32945365/

相关文章:

python - 将二维列表(tfidf 结果的密集输出)附加到 pandas 数据帧行中,每个索引

python-2.7 - 如何将 tf-idf 与朴素贝叶斯结合使用?

python - 为列表设置 __setattr__ 时出错

machine-learning - 带 make_pipeline 的 StandardScaler

python - PyQt QtWebChannel : calling Python function from JavaScript

python - pickle .load : ImportError: No module named k_means_

python - 来自 sklearn 管道 : not fitted error 的特征名称

python-3.x - 提取每个簇的顶部单词

Python - 更快的循环方式

python - Django/Mezzanine/S3/Bootstrap - 寻找本地开发/远程生产设置建议