Почему я получаю разные баллы от одной и той же операции? - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть конвейер, который состоит из объекта объединения объектов (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??
...