Примерка sklearn GridSearchCV модель

Я пытаюсь решить проблему регрессии в Boston Dataset с помощью регрессор случайного леса. Я использовал GridSearchCV для выбора лучших гиперпараметров.

Проблема 1

Должен ли я установить GridSearchCV на какой-нибудь X_train, y_train, а затем получить лучшие параметры.

OR

Должен ли я установить его на X, y, чтобы получить наилучшие параметры (X, y = весь набор данных)

Проблема 2

Скажите, если я уложу его на X, y и получу лучшие параметры, а затем построю новую модель на этих лучших параметрах. Как мне тренировать эту новую модель?

Стоит ли тренировать новую модель на X_train, y_train или X, y.

Проблема 3

Если я тренирую новую модель на X,y, как я буду проверять результаты?

Мой код на данный момент

   #Dataframes
    feature_cols = ['CRIM','ZN','INDUS','NOX','RM','AGE','DIS','TAX','PTRATIO','B','LSTAT']

    X = boston_data[feature_cols]
    y = boston_data['PRICE']

Обучить тестовый раздел данных

from sklearn.cross_validation import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 1)

Поиск по сетке для получения наилучших гиперпараметров

from sklearn.grid_search import GridSearchCV
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)

CV_rfc.best_params_ 
#{'max_depth': 10, 'n_estimators': 100}

Обучите модель на max_depth: 10, n_estimators: 100

RFReg = RandomForestRegressor(max_depth = 10, n_estimators = 100, random_state = 1)
RFReg.fit(X_train, y_train)
y_pred = RFReg.predict(X_test)
y_pred_train = RFReg.predict(X_train)

RMSE: 2.8139766730629394

Я просто хочу получить совет о том, какие шаги будут правильными.


person Rookie_123    schedule 23.11.2018    source источник
comment
Это вопрос о методологии, а не о программировании, поэтому больше подходит для перекрестной проверки (и, возможно, здесь не по теме).   -  person desertnaut    schedule 23.11.2018


Ответы (2)


В общем, чтобы настроить гиперпараметры, вы всегда должны тренировать свою модель более X_train и использовать X_test для проверки результатов. Вам необходимо настроить параметры на основе результатов, полученных X_test.

Никогда не следует настраивать гиперпараметры для всего набора данных, потому что это нарушит цель разделения тест / поезд (как вы правильно задали в задаче 3).

person FMarazzi    schedule 23.11.2018
comment
Но тогда полученные гиперпараметры будут искажены выборками, присутствующими в том X_train, что я чувствую - person Rookie_123; 23.11.2018
comment
Rookie_123, у вас есть веские причины для беспокойства, но любая модель / гиперпарамы по своей природе будут смещены в сторону набора поездов. Если бы он был предвзятым относительно тестового набора, вы технически не могли бы говорить о тестовом наборе с самого начала. - person cantdutchthis; 23.11.2018

Это действительно серьезная проблема.

Проблема 1

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

Проблема 2

GridSearchCV уже дает вам лучший оценщик, вам не нужно обучать новый. Но на самом деле резюме - это просто проверить, в порядке ли здание, затем вы можете тренироваться на полном наборе данных (см. https://stats.stackexchange.com/questions/11602/training-with-the-full-dataset-after-cross-validation для более подробного обсуждения).

Проблема 3

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

person Matthieu Brucher    schedule 23.11.2018
comment
Это пояснение к вашему ответу на проблему 1: когда вы говорите, что GridsearchCV выполняет перекрестную проверку, его перекрестная проверка по-прежнему будет ограничена X_train и y_train, поправьте меня, если я ошибаюсь - person Rookie_123; 24.11.2018
comment
Это пояснение к вашему ответу на проблему 3: Значит, нет необходимости проверять модель, созданную для всего набора данных, с лучшими параметрами, полученными GridsearchCV? - person Rookie_123; 24.11.2018
comment
Конечно, резюме будет сделано на наборе данных поезда. Затем вы можете проверить CV (лучшую оценку) на тестовом наборе данных. - person Matthieu Brucher; 24.11.2018
comment
И действительно, вы можете использовать весь набор данных для окончательного обучения, как указано в вопросе по науке о данных. - person Matthieu Brucher; 24.11.2018
comment
@MatthieuBrucher Сообщите мне, знаете ли вы ответ на этот stackoverflow.com/questions/55604668/ Спасибо :) - person EmJ; 10.04.2019