特征计数不匹配

3 投票
3 回答
3790 浏览
提问于 2025-04-18 17:43

我正在使用scikit进行一个简单的分类任务。我有一个训练数据集和一个测试数据集,它们的形状如下:训练集的形状是(1000, 69917),测试集的形状是(1073, 49429)。当我执行类似下面的操作时:

clf.fit(X_train, Y_train)
predicted = clf.predict(X_test)

我遇到了以下错误:

ValueError: X has 49429 features per sample; expecting 69917

3 个回答

-1

X_train和y_train的行数必须相同。也就是说,对于每一个训练样本,分类器都需要一个目标来学习。

当你进行“预测”时,也会遇到问题,因为训练集和测试集的列数应该相同。

建议你在继续之前先读一些好的入门书籍。这本不错:http://scikit-learn.org/stable/tutorial/basic/tutorial.html

补充:我误解了问题。忽略y_train中行数不匹配的情况。你只需要确保训练集和测试集的列数相同。

0

你需要把你的测试集和训练集分开,这样它们的数值数量要不同,但特征的数量要相同。

8

因为X_train是用来训练模型的,所以在预测的时候,模型会期待X_test的特征维度(也就是列数)和X_train完全一样。

你提到过X_trainX_test是通过CountVectorizer生成的。这个问题很可能是因为你调用了fit(或者fit_transform)两次,导致生成了两种不同的转换。为了避免这种情况,确保只调用一次fit

from sklearn.feature_extraction.text import CountVectorizer
vec = CountVectorizer()
X_train = vec.fit_transform(X_train_raw)
X_test = vec.transform(X_test_raw) # Not fit_transform!

这样,测试数据就会使用从训练数据中学到的完全相同的词汇进行转换。

撰写回答