我有一些文本数据,我想在单个 GridSearchCV 调用中使用不同的、不同的模型集来试验多种数据转换技术。这个想法是:在具有模型 1、2 和 3 的管道中给定数据转换 A,并在具有模型 4、5 和 6 的管道中给定数据转换 B,其中 A 与 1、2 或 3 的组合或具有 4、5 或 6 的 B 产生最佳预测结果?
目前,我一直在做 2 个单独的 GridSearchCV 调用——一个带有一个管道,一个带有另一个,但这似乎非常低效,即使在多处理包装器中完成也是如此。我也一直在互联网上寻找一些与我想做的类似的例子。
我找到了这个小教程:https ://www.kaggle.com/evanmiller/pipelines-gridsearch-awesome-ml-pipelines但它只完成了我想做的一半。给定以下示例(取自链接教程的“Pipeline 4.0 - contVars + tax(FeatureUnion intro)”部分):
pipeline = Pipeline([
('unity', FeatureUnion(
transformer_list=[
('cont_portal', Pipeline([
('selector', PortalToColDimension(contVars)),
('cont_imp', Imputer(missing_values='NaN', strategy = 'median', axis=0)),
('scaler', StandardScaler())
])),
('tax_portal', Pipeline([
('selector', PortalToColDimension(taxVars)),
('tax_imp', Imputer(missing_values='NaN', strategy = 'most_frequent', axis=0)),
('scaler', MinMaxScaler(copy=True, feature_range=(0, 3)))
])),
],
)),
('column_purge', SelectKBest(k = 5)),
('lgbm', LGBMRegressor()),
])
parameters = {}
parameters['column_purge__k'] = [5, 10]
grid = GridSearchCV(pipeline, parameters, scoring = 'neg_mean_absolute_error', n_jobs= 2)
grid.fit(x_train, y_train)
print('Best score and parameter combination = ')
print(grid.best_score_)
print(grid.best_params_)
y_pred = grid.predict(x_valid)
看起来,虽然“cont_portal”和“tax_portal”产生了两个不同的数据转换管道(我想做的前半部分),但它们都被定向到 LGBMRegressor。例如,是否可以让“cont_portal”仅由 LGBMRegressor 使用,而“tax_portal”仅由 Logit 模型使用,同时仍保持单一、通用管道和对 GridSearchCV 的单一调用?