GridsearchCV и Kfold Cross валидация - PullRequest
0 голосов
/ 26 ноября 2018

Я пытался понять склерн GridSearchCV .У меня было несколько основных вопросов об использовании перекрестной проверки в GridsearchCV и о том, как мне использовать рекомендации GridsearchCV далее

Скажите, что я объявляю экземпляр GridsearchCV следующим образом

from sklearn.grid_search import GridSearchCV
RFReg = RandomForestRegressor(random_state = 1) 

param_grid = { 
    'n_estimators': [100, 500, 1000, 1500],
    'max_depth' : [4,5,6,7,8,9,10]
}

CV_rfc = GridSearchCV(estimator=RFReg, param_grid=param_grid, cv= 10)
CV_rfc.fit(X_train, y_train)

У меня были следующие вопросы:

  1. Скажите, что в первой итерации n_estimators = 100 и max_depth = 4 выбран для построения модели. Теперь будет выбран score для этой моделис помощью 10-кратной перекрестной проверки?

    • a.Мое понимание процесса следующее:

      • 1. X_train и y_train будут разбиты на 10 комплектов.
      • Модель будет обучена на 9 комплектах и ​​проверена на 1 оставшемся комплекте, а ее оценка будет сохранена в списке: скажем score_list
Этот процесс будет повторяться еще 9 раз, и каждый из этих 9 баллов будет добавлен к score_list, чтобы получить 10 баллов за все В итоге будет взято среднее значение из списка показателей, чтобы получить final_score для модели с параметрами: n_estimators = 100 и max_depth = 4

б.Вышеупомянутый процесс будет повторяться со всеми другими возможными комбинациями n_estimators и max_depth, и каждый раз мы получим final_score для этой модели

c.Лучшей моделью будет модель, имеющая наибольшее значение final_score , и мы получим соответствующие наилучшие значения n_estimators и max_depth на CV_rfc.best_params_

Правильно ли мое понимание GridSearchCV?

Теперь скажите, что я получаю лучшие параметры модели как {'max_depth': 10, 'n_estimators': 100}.Я объявляю интанс модели следующим образом:

RFReg_best = RandomForestRegressor(n_estimators = 100, max_depth = 10, random_state = 1)

Теперь у меня есть два варианта, какой из них правильный, это то, что я хотел знать

a,Используйте перекрестную проверку для всего набора данных, чтобы увидеть, насколько хорошо работает модель, как показано ниже

scores = cross_val_score(RFReg_best , X, y, cv = 10, scoring = 'mean_squared_error')
   rm_score = -scores
   rm_score = np.sqrt(rm_score)

b.Установите модель на X_train, y_train, а затем протестируйте на X_test, y_test

RFReg_best.fit(X_train, y_train)
y_pred = RFReg.predict(X_test)
rm_score = np.sqrt(mean_squared_error(y_test, y_pred))

Или они оба верны

1 Ответ

0 голосов
/ 26 ноября 2018

Что касается (1), ваше понимание действительно верно;деталь формулировки, которая должна быть исправлена ​​в принципе: « лучше final_score» вместо «выше», поскольку существует несколько показателей производительности (все, что измеряет ошибку , например MSE, MAEи т. д.) - ниже -то-лучше.

Теперь шаг (2) более сложный;для проверки всей процедуры требуется сделать шаг назад ...

Для начала в общем случае CV используется либо для настройки параметров (ваш шаг 1), либо для модели.оценка (то есть то, что вы пытаетесь сделать на шаге 2), это действительно разные вещи.Разделение ваших данных с самого начала на обучающие и тестовые наборы, как вы это сделали здесь, и затем последовательное выполнение шагов 1 (для настройки параметров) и 2b (оценка модели в невидимых данных), возможно, является наиболее "правильная «процедура в принципе» (что касается смещения, которое вы отмечаете в комментарии, мы должны с этим смириться, так как по умолчанию все наши подогнанные модели «смещены» по отношению к данным, используемым для их обучения, и этого нельзя избежать).

Тем не менее, с самого начала практикующие задавались вопросом, могут ли они избежать «пожертвования» частью своих ценных данных только для целей тестирования (оценки модели), и пытаются выяснить, действительно ли они могут пропустить модель.часть оценки (и сам набор тестов), используя в качестве модели оценки лучшие результаты, полученные в результате процедуры настройки параметров (ваш шаг 1).Это явно срезает углы, но, как обычно, вопрос состоит в том, насколько реальные результаты будут? и будет ли он по-прежнему значимым?

Опять же, в теория , что Вивек Кумар пишет в своем связанном ответе правильно:

Если вы используете все данные в GridSearchCV, тогда будет утечка тестаданные в настройку параметров, а затем окончательная модель может не работать так же хорошо на новых невидимых данных.

Но вот соответствующий отрывок (настоятельно рекомендуется) Прикладное прогнозное моделирование книга(стр. 78):

enter image description here

Вкратце: если вы используете целое X на шаге 1 и рассматриваете результаты настройки как модельоценка, действительно, будет смещение / утечка, но обычно она небольшая, по крайней мере, для умеренно больших тренировочных наборов ...


Заключение:

  • «самая правильная» процедура в теории - это действительно комбинация ваших шагов 1 и 2b
  • Вы можете попытаться срезать углы, используя весь обучающий набор X в шаге 1, и, скорее всего, вы все равно будете в допустимых пределах в отношении вашей оценки модели.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...