0

我正在尝试将 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 或 fit_transform 期间未遇到的命名特征将被静默忽略。

DictVectorizer已经删除了一些我猜想的功能......我如何禁用/解决这个功能?

谢谢

=== 编辑 ===

问题在于 larsMans 建议我安装 DictVectorizer 两次。

4

2 回答 2

5

您应该fit_transform在训练集上使用,并且只能transform在测试集上使用。

于 2013-11-05T07:28:28.593 回答
0

您是否确保在测试数据上调用先前构建的缩放器和选择器转换?

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)))#
于 2013-11-04T16:14:59.770 回答