我正在使用scikit做一个简单的分类任务。我有一个测试和训练数据集,它们的形状如下:train =(1000,69917)和test =(1073,49429)。当我做类似的事情时:
clf.fit(X_train, Y_train)
predicted = clf.predict(X_test)
我收到以下错误:
ValueError: X has 49429 features per sample; expecting 69917
答案 0 :(得分:6)
由于X_train
用于训练模型,因此在预测阶段,模型将期望X_test
具有完全相同的特征尺寸(即列数)。
您提到使用CountVectorizer生成X_train
和X_test
。这个问题的一个可能原因是您调用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!
这样,测试数据将使用从训练数据中学到的完全相同的词汇集进行转换。
答案 1 :(得分:0)
您需要拆分测试和训练集,以便它们各自具有不同数量的值,但具有相同数量的要素。
答案 2 :(得分:-1)
X_train和y_train必须具有相同的行数。即对于每个训练示例,分类器需要目标来学习。
当您预测'时,您也会遇到问题。因为列车和测试集应该具有相同的列数。
建议您在继续学习之前阅读一篇好的介绍性文章。这很好: http://scikit-learn.org/stable/tutorial/basic/tutorial.html
编辑:误读q。忽略y_train中不匹配的行。您只需要确保列车和测试具有相同的列。