【发布时间】:2018-10-10 11:02:03
【问题描述】:
我有以下代码按预期工作:
clf = Pipeline([
('vectorizer', DictVectorizer(sparse=False)),
('classifier', DecisionTreeClassifier(criterion='entropy'))
])
clf.fit(X[:size], y[:size])
score = clf.score(X_test, y_test)
我想在不使用管道的情况下执行相同的逻辑:
v = DictVectorizer(sparse=False)
Xdv = v.fit_transform(X[:size])
Xdv_test = v.fit_transform(X_test)
clf = DecisionTreeClassifier(criterion='entropy')
clf.fit(Xdv[:size], y[:size])
clf.score(Xdv_test, y_test)
但我收到以下错误:
ValueError: Number of features of the model must match the input. Model n_features is 8251 and input n_features is 14303
似乎 DictVectorizer 为测试集学习到的特征多于训练集。我想知道 Pipeline 是如何处理这个问题的,我该如何完成。
【问题讨论】:
-
您应该在测试集上使用适合您的训练集的矢量化器,而不是再次拟合它,即
Xdv_test = v.transform(X_test)。另外,您如何拆分X和X_test?为什么你需要[:size]只为X?
标签: python numpy scipy scikit-learn