#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. Я скучал по этому. Спасибо вам за быстрое решение!