功能计数不匹配

时间:2014-08-18 21:17:25

标签: python machine-learning scikit-learn

我正在使用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

3 个答案:

答案 0 :(得分:6)

由于X_train用于训练模型,因此在预测阶段,模型将期望X_test具有完全相同的特征尺寸(即列数)。

您提到使用CountVectorizer生成X_trainX_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中不匹配的行。您只需要确保列车和测试具有相同的列。