我试图将scikit-learn用于分类任务。我的代码从数据中提取特征,并将它们存储在字典中,如下所示:
feature_dict['feature_name_1'] = feature_1
feature_dict['feature_name_2'] = feature_2
当我拆分数据以使用sklearn.cross_validation
进行测试时,一切都按预期工作。我遇到的问题是当测试数据是一个新集合时,而不是学习集的一部分(尽管它对每个样本具有相同的确切特征)。在学习集上拟合分类器后,当我尝试调用clf.predict
时,出现此错误:
ValueError: X has different number of features than during model fitting.
我假设这与这个有关(来自DictVectorizer文档):
在拟合或fit_transform期间未遇到的命名特征将是 默默地忽略了。
DictVectorizer
删除了一些我猜的功能......如何禁用/解决此功能?
谢谢
=== 编辑 ===
问题是,正如larsMans建议我两次安装DictVectorizer一样。
您应该在训练集上使用fit_transform
,并且只在测试集上使用transform
。
您是否确保对测试数据调用先前构建的缩放器和选择器转换?
scaler = preprocessing.StandardScaler().fit(trainingData)
selector = SelectPercentile(f_classif, percentile=90)
selector.fit(scaler.transform(trainingData), labelsTrain)
...
...
predicted = clf.predict(selector.transform(scaler.transform(testingData)))#