用sklearn的20newsgroups数据集做朴素贝叶斯分类报错ValueError: X has 75374 features, but MultinomialNB is expecting 150725 features as input.
时间: 2024-02-28 19:52:19 浏览: 208
20-newsgroups_text-classification:“ 20个新闻组”数据集-在Python中使用多项朴素贝叶斯进行文本分类
这个错误提示意味着训练集和测试集的特征数量不匹配。一种可能的原因是你在训练模型时使用的特征提取方法与测试数据不同。在你的情况下,可能是因为没有对测试集进行特征提取,而直接使用了原始文本数据。你可以使用与训练集相同的特征提取方法来提取测试数据的特征。修改代码如下:
```python
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
# 加载数据集
categories = ['alt.atheism', 'talk.religion.misc', 'comp.graphics', 'sci.space']
train_data = fetch_20newsgroups(subset='train', categories=categories)
test_data = fetch_20newsgroups(subset='test', categories=categories)
# 特征提取
vectorizer = TfidfVectorizer()
X_train = vectorizer.fit_transform(train_data.data)
X_test = vectorizer.transform(test_data.data)
# 训练模型
model = MultinomialNB()
model.fit(X_train, train_data.target)
# 预测
predicted = model.predict(X_test)
# 输出结果
for doc, category in zip(test_data.data, predicted):
print('%r => %s' % (doc[:50], train_data.target_names[category]))
```
这个修改后的代码使用TfidfVectorizer对测试集进行特征提取,并将提取后的特征用于预测。这样就可以避免特征数量不匹配的错误了。
阅读全文