如何强制scikit-learn词典矢量器不丢弃功能



我试图将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)))#

相关内容

  • 没有找到相关文章