特征计数不匹配
我正在使用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_train
和X_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!
这样,测试数据就会使用从训练数据中学到的完全相同的词汇进行转换。