результаты прогнозирования при тестировании и наборе данных поезда отличаются с/без gridsearchcv

#python #scikit-learn #random-forest #gridsearchcv

#питон #scikit-учись #случайный лес #gridsearchcv

Вопрос:

Я изучаю использование GridSearchCV от sklearn для прогнозирования данных. После подгонки данных с помощью RandomForestRegressor я вычисляю балл (MSE) для теста и данных о поездах. Я вижу, что существует огромная разница между MSE поезда и MSE теста (даже если оценки должны быть одинаковыми).

Вот код:

 # split dataset X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)   # Create Regressors Pipeline pipeline_estimators = Pipeline([  ('RandomForest', RandomForestRegressor()),  ])  param_grid = [{'RandomForest__n_estimators': np.linspace(50, 100, 3).astype(int)}]  search = GridSearchCV(estimator = pipeline_estimators,  param_grid = param_grid,  scoring = 'neg_mean_squared_error',  cv = 2,)   search.fit(X_train, y_train)  y_test_predicted = search.best_estimator_.predict(X_test) y_train_predicted = search.best_estimator_.predict(X_train)  print('MSE test predict', metrics.mean_squared_error(y_test, y_test_predicted)) print('MSE train predict',metrics.mean_squared_error(y_train, y_train_predicted))  

ВЫХОД есть:

  • Тест MSE прогнозирует 0,0021045875412650343
  • Прогноз движения поездов MSE 0,000332850878980335

ЕСЛИ я не использую Gridsearchcv, а цикл FOR для разных «n_estimators», оценки MSE, полученные для предсказанного теста и поезда, очень близки.

Чтобы добавить более подробную информацию, связанную с объяснением «ДЛЯ цикла», это с помощью простого подхода, см. Код ниже:

 n_estimators = np.linspace(50, 100, 3).astype(int)  X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,  random_state=0)  mse_train = [] mse_test = [] for val_n_estimators in n_estimators:   regressor = RandomForestRegressor(n_estimators = val_n_estimators)   regressor.fit(X, y)    y_pred = regressor.predict(X_test)   y_test_predicted = regressor.predict(X_test)  y_train_predicted = regressor.predict(X_train)   mse_train.append(metrics.mean_squared_error(y_train, y_train_predicted))  mse_test.append(metrics.mean_squared_error(y_test, y_test_predicted)) code here  

Для этого кода mse_train и mse_test очень похожи. Но при использовании Gridseachcv (см. Код в верхней части поста) они не похожи. Есть какие-нибудь предложения?

Почему существует такая разница в оценках при использовании GridSearchCV?

Спасибо.

Марк

Комментарии:

1. что вы подразумеваете под «циклом FOR для разных n_estimators»? Вы провели перекрестную проверку, используя цикл for? В любом случае, они не должны сильно отличаться. Вы можете попробовать разные расколы, чтобы увидеть, насколько сильно отличается ваш MSE

2. Я добавил новый раздел в вопрос, связанный с подходом ДЛЯ цикла.

3. ваш цикл for и gridsearchcv не эквивалентны. Вы поместили весь набор данных в часть цикла for

4. Я скучал по этому. Спасибо вам за быстрое решение!