У меня есть конвейер, который состоит из объекта объединения объектов (num_cat_union) и линейной регрессии.
Когда я применяю объединение объектов к своим данным, а затем gridsearch для линейной регрессии, я получаю среднеквадратическое значение 32760
Однако, когда я запускаю конвейер с ТОЛЬКО ОДНЫМ объединением объектов и линейной регрессией и поиском по сетке, я получаю СКО 91490
Что здесь может происходить?Почему расхождение?
num_pipeline = make_pipeline(NumSelector(), NumImputer())
cat_pipeline = make_pipeline(CatSelector(), CatImputer(), OneHotEncoder(handle_unknown='ignore', sparse=False))
num_cat_union = make_union(num_pipeline, cat_pipeline)
full_pipe = make_pipeline(num_cat_union, LinearRegression())
def model_metrics(model, params, scoring, X, y):
grid = GridSearchCV(model, params, scoring=scoring, error_score=0)
grid.fit(X, y)
print('X:', X.shape)
print('Best RMSE: ', np.sqrt(-grid.best_score_))
print('Best parameters: ', grid.best_params_)
print('Mean fit time: ', round(np.sqrt(grid.cv_results_['mean_fit_time'].mean()), 3))
print('Mean scoring time: ', round(grid.cv_results_['mean_score_time'].mean(), 3))
#The following gives ~90000 RMSE
params = {'featureunion__pipeline-1__numimputer__strategy': ['mean', 'median']}
model_metrics(full_pipe, params, 'neg_mean_squared_error', housing, y)
#The following gives ~30000 RMSE (P.S. the default strategy for imputing is mean already)
X = num_cat_union.fit_transform(housing)
lin_params = {}
model_metrics(LinearRegression(), lin_params, 'neg_mean_squared_error', X, y)
#Shouldn't they give the same results??