У меня есть следующий код, который работает как ожидалось:
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 решает эту проблему и как я могу сделать то же самое.