Должен ли я сначала выполнить перекрестную проверку, а затем выполнить поиск по сетке? - PullRequest
2 голосов
/ 13 февраля 2020

Я новичок в области машинного обучения. Мой вопрос заключается в следующем: я построил модель, и я пытаюсь оптимизировать такую ​​модель. Проведя некоторые исследования, я обнаружил, что перекрестная проверка может быть использована, чтобы помочь мне избежать использования переопределенной модели. Кроме того, Gridsearchcv может быть использован, чтобы помочь мне оптимизировать параметры такой модели и в конечном итоге определить наилучшие возможные параметры.

Теперь у меня вопрос: стоит ли сначала выполнять перекрестную проверку, а затем использовать поиск по сетке для определения наилучших параметров, или использования GridsearchCV будет достаточно, если он сам выполняет перекрестную проверку?

Ответы [ 3 ]

3 голосов
/ 13 февраля 2020

В соответствии с предложением @Noki, вы можете использовать параметр cv в CV поиска по сетке.

GridSearchCV(estimator, param_grid, scoring=None, n_jobs=None, iid='deprecated', 
refit=True, cv=None, verbose=0, 
pre_dispatch='2*n_jobs',error_score=nan,return_train_score=False)

Также в документации четко указано, что если это проблема классификации, она автоматически обеспечит ее стратификацию.

Для входных данных типа integer / None, если оценщик является классификатором, а y является двоичным или мультиклассовым, используется StratifiedKFold. Во всех других случаях используется KFold.

Однако есть кое-что, что я хотел бы добавить: вы можете сделать ваши K-складки динамическими c относительно количества значений вашей Y_target переменная. Вы не можете иметь наименьшее значение вашей частоты в K-кратном значении, равное 1, это приведет к ошибке во время тренировки. Мне довелось столкнуться с этим. Используйте приведенный ниже фрагмент кода, чтобы помочь вам в этом.

Например,

import pandas as pd
Y_target=pd.Series([0,1,1,1,1,0,0,0,6,6,6,6,6,6,6,6,6])

if Y_target.value_counts().iloc[-1]<2:
    raise Exception ("No value can have frequency count as 1 in Y-target")
else:
    Kfold=Y_target.value_counts().iloc[-1]

Затем вы можете назначить Kfold параметру cv в Grid Search

1 голос
/ 13 февраля 2020

Теперь мой вопрос: стоит ли сначала выполнить перекрестную проверку, а затем использовать поиск по сетке для определения наилучших параметров, или использования GridsearchCV будет достаточно, если он сам выполняет перекрестную проверку?

Второй . GridSearchCV использует стратегию разделения перекрестной проверки для выбора наилучших параметров. Если вы прочитали документацию scikit-learn , есть параметр cv, который по умолчанию определяет 5-кратную перекрестную проверку. Если вам нужно использовать другую стратегию перекрестной проверки, вы можете предоставить ей int, генератор перекрестной проверки или итерацию

1 голос
/ 13 февраля 2020

См. Перекрестная проверка с набором тестовых данных .

Моя рекомендация, если ваш набор данных достаточно большой:

  1. Разделить ваш набор данных на обучающие и тестовые подмножества .
  2. Выполните GridSearchCV в вашем наборе обучающих данных.
  3. Оцените свою лучшую модель (из GridSearchCV) в своем тестовом подмножестве.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...