Чтобы добавить к предыдущим ответам, мы начнем с самого начала:
Есть несколько способов, которыми вы можете подогнать свои модели под тренировочные данные, некоторые очевидны, некоторые менее. Во-первых, и наиболее важным является подгонка параметров обучения (весов) к данным (параметры подбора кривой в логистической регрессии, весовые коэффициенты сети в нейронной сети и т. Д.). Затем вы смоделируете шум в данных - если вы переизбираете, вы не только захватите основную генерирующую функцию, но и случайность из-за размера выборки и того факта, что выборка не является идеальным представлением совокупности. Это переоснащение может быть до некоторой степени смягчено путем наказания определенных атрибутов (в общем случае) модели. Это можно сделать, остановив тренировку, когда производительность на образце поезда больше не будет значительно улучшаться, удалив некоторые нейроны из нейронной сети (так называемые отсева),https://ieeexplore.ieee.org/document/614177/ ) и т. д.). Однако эти стратегии регуляризации сами по себе параметризуются (когда вы останавливаетесь? Сколько нейронов удалить? И т. Д.). Кроме того, большинство моделей машинного обучения имеют ряд гиперпараметров, которые необходимо установить перед началом обучения. И эти гиперпараметры настраиваются на этапе настройки параметров.
Это подводит нас ко второму, более тонкому типу переоснащения: гиперпараметрическому переоснащению. Перекрестная проверка может быть использована для поиска «лучших» гиперпараметров, многократно тренируя вашу модель с нуля на k-1 сгибах образца и тестируя на последнем сгибе.
Так как именно это делается? В зависимости от стратегии поиска (заданной Tennshi), вы устанавливаете гиперпараметры модели и обучаете свою модель k раз, каждый раз используя разные тестовые сгибы. Вы «запоминаете» среднюю производительность модели по всем тестовым сгибам и повторяете всю процедуру для другого набора гиперпараметров. Затем вы выбираете набор гиперпараметров, который соответствует наилучшей производительности при перекрестной проверке. Как видите, стоимость вычислений для этой процедуры сильно зависит от количества наборов гиперпараметров, которые необходимо учитывать. Вот почему были разработаны некоторые стратегии для выбора этого набора (здесь я собираюсь обобщить то, что сказал Тенши):
- Поиск по сетке: для каждого гиперпараметра вы перечисляете конечное число возможных значений. Затем процедура полностью выполняется для всех комбинаций перечисленных гиперпараметров. Очевидно, что если у вас есть непрерывные гиперпараметры, вы не можете попробовать их все.
- Рандомизированный поиск по сетке: аналогичен обычному поиску по сетке, но на этот раз вы не пытаетесь исчерпывающе опробовать все комбинации, а вместо этого отбираете фиксированное число раз для всех возможных значений. Обратите внимание, что здесь можно не только перечислить возможные значения для гиперпараметра, но вы также можете предоставить распределение для выборки.
- BayesianSearch - комбинация значений гиперпараметров выбрана для максимального ожидаемого улучшения оценки. Для получения дополнительной информации: http://papers.nips.cc/paper/4522-practical-bayesian-optimization-of-machine-learning-algorithms.pdf . И библиотека, которая занимается только этим: https://github.com/hyperopt/hyperopt . Так как комбинировать со sklearn не так легко, как рекомендовано tenhi, используйте его, только если вы не работаете со sklearn.
- Другие способы управляемого поиска в гиперпараметрическом пространстве. По моему опыту, они редко используются, поэтому я не буду их здесь описывать.
Однако это еще не конец истории, поскольку гиперпараметры могут (и будут) превосходить данные. В большинстве случаев вы можете просто жить с этим, но если вы хотите максимизировать мощность обобщения вашей модели, вы можете также попытаться упорядочить гиперпараметры. Во-первых, вы можете немного лучше оценить производительность данных вне выборки с помощью поиска по вложенным сеткам (подробнее: http://scikit-learn.org/stable/auto_examples/model_selection/plot_nested_cross_validation_iris.html , обсуждение: перекрестная проверка вложенных данных). для выбора модели), или просто используйте набор проверки, который не используется для настройки гиперпараметров. Что касается регуляризации в пространстве гиперпараметров, то это более или менее открытый вопрос. Некоторые идеи включают выбор не лучшего набора значений гиперпараметров, но что-то ближе к середине; рассуждение выглядит следующим образом: лучшие значения гиперпараметров, скорее всего, превосходят данные только потому, что они работают лучше, чем другие данные поезда, плохие параметры просто плохие, но те, что в середине, могут достичь лучшего обобщения, чем лучшие , Эндрю Нг написал статью об этом. Другим вариантом является ограничение вашего пространства поиска (вы упорядочиваете, вводя здесь сильный уклон - значения вне пространства поиска никогда не будут выбраны явно).
Дополнительное замечание: использование точности в качестве метрики производительности в большинстве случаев является очень плохой идеей, посмотрите на оценки f1 и f_beta - эти метрики в большинстве случаев будут лучше отражать то, что вы на самом деле пытаетесь оптимизировать в задачах двоичной классификации.
Подводя итог: перекрестная проверка сама по себе используется для оценки производительности модели на данных вне выборки, но также может использоваться для настройки гиперпараметров в сочетании с одной из стратегий поиска в пространстве гиперпараметров. Поиск хороших гиперпараметров позволяет избежать или, по крайней мере, уменьшить переоснащение, но имейте в виду, что гиперпараметры могут также переопределять данные.