Я прочитал следующие посты о вложенной перекрестной проверке и до сих пор не уверен на 100%, что мне делать с выбором модели с вложенной перекрестной проверкой:
- Вложенная перекрестная проверка для выбора модели
- Выбор модели и перекрестная проверка: правильный путь
Чтобы объяснить мою путаницу, позвольте мне попробовать пошагово пройти выбор модели с помощью метода перекрестной проверки.
- Создайте внешний цикл CV с помощью K-Fold. Это будет использоваться для оценки производительности гиперпараметров, которые "выиграли" каждый внутренний цикл CV.
- Используйте GridSearchCV для создания внутреннего цикла CV, где в каждом внутреннем цикле GSCV проходит через все возможные комбинации пространства параметров и подбирает лучший набор параметров.
- После того, как GSCV обнаружил лучшие параметры во внутреннем цикле, он проверяется с помощью набора тестов во внешнем цикле, чтобы получить оценку производительности.
- Затем внешний цикл обновляется до следующего сгиба в качестве тестового набора, а остальные - в качестве тренировочного набора, и 1-3 повторения. Общие возможные "выигрышные" параметры - это количество фолдов, обозначенных во внешнем цикле. Таким образом, если внешний цикл составляет 5 крат, тогда у вас будет оценка производительности алгоритма с 5 различными наборами гиперпараметров, а НЕ производительность одного конкретного набора гиперпараметров.
Этот подход иллюстрируется на странице примера SKLearn: http://scikit-learn.org/stable/auto_examples/model_selection/plot_nested_cross_validation_iris.html
Вопрос: После 4. Как вы определяете, какие гиперпараметры работали лучше всего? Я понимаю, что вы хотите обучить свой алгоритм (например, Логистическая регрессия, Случайный лес и т. Д.) С помощью ПОЛНОГО набора данных в конце. Но как определить, какие гиперпараметры работали лучше всего в вашей перекрестной проверке? Насколько я понимаю, для каждого внутреннего цикла победит другой набор гиперпараметров. Что касается внешнего цикла, вы получаете оценку своей производительности GridSearchCV, но вы не получаете какой-то определенный набор гиперпараметров. Итак, как при создании окончательной модели вы знаете, какие гиперпараметры использовать? Это недостающая логика, которую мне трудно понять из других шагов.
Заранее благодарю за любые советы, особенно, если @Dikran Marsupial и @cbeleites могут участвовать!
Изменить: Если вы можете, пожалуйста, в своем ответе используйте такие термины, как «алгоритм» и «гиперпараметры». Я думаю, что один источник путаницы для меня - это когда люди используют термин «модель» или «выбор модели». Я запутался, говорят ли они о выборе алгоритма или гипер-параметров.
Изменить 2: я создал блокнот, который показывает два способа выполнения перекрестной проверки вложенности. Первый способ - тот, который показан в примере с SKLearn, а другой, более длинный, - тот, который я написал. Путь, показанный в SKLearn, не раскрывает «выигрышные» гиперпараметры, но мой более длинный путь делает это. Но вопрос остается прежним. Что мне теперь делать после завершения вложенной перекрестной проверки, даже с указанием гиперпараметров? Как видно из гиперпараметров в конце ноутбука, они немного различаются.
источник
Ответы:
(Я уверен, что я написал большую часть этого уже в некотором ответе - но не могу найти это прямо сейчас. Если кто-то наткнется на этот ответ, пожалуйста, свяжите его). Здесь я вижу два немного разных подхода, которые, на мой взгляд, разумны.
Но сначала немного терминологии:
Я предполагаю, что разница между ними связана с разницей между тем, кто разрабатывает новые алгоритмы обучения, которые обычно описывают класс алгоритмов обучения вместе с некоторыми параметрами управления ( гиперпараметрами).) которые трудно / невозможно исправить (или, по крайней мере, исправить то, как они должны быть определены / оценены) без знания приложения / предметной области.
Подход 1: требовать стабильных результатов оптимизации
При таком подходе «обучение модели» является подбором «нормальных» параметров модели, и задаются гиперпараметры . Например, внутренняя перекрестная проверка обеспечивает оптимизацию гиперпараметра.
Здесь решающий шаг / предположение для решения дилеммы, чей набор гиперпараметров должен быть выбран, состоит в том, чтобы потребовать, чтобы оптимизация была устойчивой . Перекрестная проверка для целей проверки предполагает, что все суррогатные модели достаточно похожи на окончательную модель (полученную с помощью того же алгоритма обучения, примененного ко всему набору данных), что позволяет рассматривать их как равные (как между собой, так и с конечной моделью). Если это предположение нарушается и
суррогатные модели по-прежнему равны (или эквивалентны) между собой, но не до окончательной модели, речь идет об известном пессимистическом смещении перекрестной проверки.
Если также суррогатная модель не равна / эквивалентна друг другу, у нас возникают проблемы с нестабильностью .
Для результатов оптимизации внутреннего цикла это означает, что если оптимизация стабильна, то при выборе гиперпараметров нет конфликта . И если наблюдается значительный разброс результатов внутренней перекрестной проверки, оптимизация не является стабильной . Нестабильные учебные ситуации имеют гораздо худшие проблемы, чем просто решение, какой из наборов гиперпараметров выбрать, и я действительно рекомендую отступить в этом случае и начать процесс моделирования заново.
Однако здесь есть исключение: в оптимизации может быть несколько локальных минимумов, дающих равную производительность для практических целей. Требование также, чтобы выбор между ними был стабильным, может быть ненужным сильным требованием - но я не знаю, как выйти из этой дилеммы.
Обратите внимание, что если не все модели дают одинаковый набор параметров выигрыша, вы не должны использовать оценки внешнего цикла в качестве ошибки обобщения здесь:
(Представьте, что кто-то сказал вам, что они провели перекрестную проверку на модели с C = 1 и линейным ядром, и вы обнаружите, что некоторые расщепления были оценены с помощью ядра rbf!)
Подход 2: рассматривать настройку гиперпараметра как часть обучения модели
Этот подход соединяет перспективы «разработчика алгоритма обучения» и прикладного пользователя алгоритма обучения.
Разработчик алгоритма обучения предоставляет «голый» алгоритм обучения
model = train_naked (trainingdata, hyperparameters)
. Как прикладной пользователь нуждается,tunedmodel = train_tuned (trainingdata)
который также заботится об исправлении гиперпараметров.train_tuned
может быть реализован, например, путем оборачивания оптимизатора на основе перекрестной проверки вокруг голого алгоритма обученияtrain_naked
.train_tuned
затем может использоваться как любой другой алгоритм обучения, который не требует ввода гиперпараметра, например, его выводаtunedmodel
может быть подвергнут перекрестной проверке. Теперь гиперпараметры проверяются на их стабильность так же, как «нормальные» параметры должны проверяться на стабильность как часть оценки перекрестной проверки.Это именно то, что вы делаете и оцениваете во вложенной перекрестной проверке, если усредняете производительность всех выигрышных моделей независимо от их отдельных наборов параметров.
Какая разница?
Возможно, мы получим разные окончательные модели, использующие эти два подхода:
train_naked (all data, hyperparameters from optimization)
train_tuned (all data)
и - поскольку при этом снова выполняется оптимизация гиперпараметра для большого набора данных - это может привести к другому набору гиперпараметров.Но опять-таки применяется та же логика: если мы обнаружим, что конечная модель имеет существенно отличающиеся параметры от суррогатных моделей перекрестной проверки, это является признаком нарушения предположения 1. ИМХО, опять же, у нас нет конфликта, а скорее проверка того, оправданы ли наши (неявные) предположения. И если это не так, мы в любом случае не должны ставить слишком много на хорошую оценку производительности этой окончательной модели.
У меня сложилось впечатление (также из-за того, что я вижу количество похожих вопросов / недоразумений здесь в резюме), что многие люди думают о вложенном перекрестном подтверждении, делая подход 1. Но ошибка обобщения обычно оценивается в соответствии с подходом 2, так что это путь для окончательная модель, а также.
Пример ириса
Резюме: оптимизация в основном бессмысленна. Доступный размер выборки не допускает различий между производительностью любого из наборов параметров здесь.
Однако, с точки зрения приложения, вывод заключается в том, что не имеет значения, какой из 4 наборов параметров вы выберете - что не так уж и плохо: вы нашли сравнительно стабильное плато параметров. В этом заключается преимущество правильной вложенной проверки настроенной модели: хотя вы не можете утверждать, что это оптимальная модель, вы все равно можете утверждать, что модель, построенная на целых данных с использованием подхода 2, будет иметь точность около 97% (95% доверительный интервал для 145 правильных из 150 тестовых случаев: 92 - 99%)
Обратите внимание, что подход 1 также не так далек, как кажется - см. Ниже: ваша оптимизация случайно упустила сравнительно явного «победителя» из-за связей (на самом деле это еще один явный признак проблемы размера выборки).
Хотя я недостаточно глубоко разбираюсь в SVM, чтобы «увидеть», что C = 1 должен быть хорошим выбором, я бы остановился на более строгом линейном ядре. Кроме того, как вы делали оптимизацию, нет ничего плохого в выборе выигравшего набора параметров, даже если вы знаете, что все наборы параметров приводят к практически одинаковой производительности.
В будущем, однако, подумайте, дает ли ваш опыт приблизительные предположения о том, какую производительность вы можете ожидать, и примерно какую модель будет хорошим выбором. Затем создайте эту модель (с фиксированными вручную гиперпараметрами) и рассчитайте доверительный интервал для ее производительности. Используйте это, чтобы решить, имеет ли смысл оптимизация вообще. (Могу добавить, что я в основном работаю с данными, где получить еще 10 независимых случаев непросто - если вы находитесь в поле с большими независимыми размерами выборки, все выглядит намного лучше для вас)
длинная версия:
Что касается примера результатов на
iris
наборе данных.iris
имеет 150 случаев, SVM с сеткой 2 х 2 параметра (2 ядра, 2 порядка для штрафаC
).Внутренний цикл имеет сплит 129 (2x) и 132 (6x) случаев. «Лучший» набор параметров нерешительности между линейной или RBF ядра, как с C = 1. Однако, внутренние точности испытаний все ( в том числе всегда Loosing C = 10) в течение 94 - 98,5% наблюдаемая точность. Наибольшее различие, которое мы имеем в одном из разделений, составляет 3 против 8 ошибок для RBF с C = 1 против 10.
Нет, это существенная разница. Я не знаю, как извлечь прогнозы для отдельных случаев в резюме, но даже предполагая, что 3 ошибки были разделены, а модель C = 10 сделала дополнительные 5 ошибок:
Помните, что в сетке 2 x 2 есть 6 парных сравнений, поэтому нам также необходимо исправить множественные сравнения.
Подход 1
В 3 из 4 внешних сплитов, где rbf «выиграл» над линейным ядром, они фактически имели одинаковую оценочную точность (я думаю, min в случае связей возвращает первый подходящий индекс).
Изменение сетки на
params = {'kernel':['linear', 'rbf'],'C':[1,10]}
урожайностьПодход 2:
Вот
clf
ваша окончательная модель. Приrandom_state = 2
rbf с C = 1 выигрывает:(случается примерно 1 в 5 раз, 1 в 6 раз
linear
иrbf
сC = 1
привязкой на ранге 1)источник
Я прочитал ваш вопрос и ответ выше 2 раза (1 раз 3 месяца назад). Я заинтересован и также хочу найти абсолютно подходящий способ сделать перекрестную проверку для моих данных. После долгих размышлений и прочтения мне кажется, что я нахожу дыры и вот мое исправление:
Обоснование:
источник
Вы не используете вложенную перекрестную проверку для выбора гиперпараметров алгоритма, этот метод используется для оценки ошибки обобщения вашей процедуры построения модели . Где в соответствии с процедурой построения модели я планирую все шаги, которые вы применили для достижения окончательной модели, которую вы собираетесь использовать в полевых условиях.D и выдает на выходе «алгоритм», состоящий из фиксированного набора преобразований предварительной обработки, признаков и, наконец, значений гиперпараметров.
Процедура построения модели может быть составлена из правил, которые вы применили, чтобы решить, какую предварительную обработку применить к данным, какую функцию использовать и, наконец, какие гиперпараметры использовать. Думайте об этом как своего рода «мета-алгоритм», который получает в качестве входных данных определенный набор данных
Например, скажем, у вас естьИкс, у в качестве матрицы дизайна и цели, и вы хотите обучить классификатор: Икс особенности в Икс которые имеют самую высокую корреляцию с Y ,
1. который использует только первый
2. Вы выбираете значения гиперпараметров путем минимизации 10-кратной оценки перекрестной проверки.
Если вы примените эти два шага к конкретной пареИкс', у' вы получите конкретный алгоритм с определенным набором функций и фиксированными гиперпараметрами, который не обязательно будет таким же, как тот, который вы получили бы для Икс, у хотя процедура построения модели будет идентичной, то есть: шаги 1 + 2, которые не привязаны к какому-либо конкретному набору данных.
Допустим, вы сделали все вышеперечисленное, не разбив свои данные на поезд-тест, потому что у вас небольшой набор данных, как вы оцениваете ошибку обобщения только что созданного классификатора? Можете ли вы использовать лучшую ошибку, которую вы нашли в перекрестной проверке на шаге 2?
Нет , первая большая проблема заключается в шаге 1, где вы используете все данные для выбора используемых функций. Поэтому, даже если вы выполните перекрестную проверку на шаге 2, функции уже увидят и запомнят некоторую информацию, присутствующую в тестовом сгибе при каждом запуске перекрестной проверки. Результатом будет чрезмерно оптимистичная оценка ошибки теста, и это называетсясмещение выбора функции . Чтобы учесть это в своих оценках, вам нужно было бы поместить шаг выбора функции в цикл перекрестной проверки шага 2.
Хорошо, теперь мы хороши? Является ли лучшая ошибка, обнаруженная в перекрестной проверке с шагом выбора признаков внутри цикла, правильной оценкой ошибки обобщения?
В теории ответ все еще нет , проблема в том, что ваши гиперпараметры были выбраны, чтобы минимизировать ошибку перекрестной проверки для конкретного набора данных, который есть в вашем распоряжении, поэтому в определенном смысле вы подгоняете гиперпараметры к своим данным с риском переоснащение их, и это называется смещением выбора модели, Но является ли это проблемой на практике? Это зависит от конкретного применения: оно может стать более серьезным, так как переоснащение на тренировках, когда набор данных небольшой, а число гиперпараметров, которые нужно настроить, относительно велико. Чтобы учесть это при оценке ошибки обобщения, вы должны применить вложенную перекрестную проверку, как вы описали, которая затем даст вам правильную оценку вашей ошибки обобщения.
Наконец, чтобы ответить на ваш последний вопрос, после получения справедливой оценки вашей ошибки обобщения «процедуры построения модели» с вложенной перекрестной проверкой, вы просто применили бы процедуру (шаг 1 + 2) ко всему вашему набору данных, получая модель с фиксированным набором функции и установить значения гиперпараметров, но помните, что ошибка, которую мы ожидаем, что эта модель будет иметь на невидимых данных, является вложенной оценкой перекрестной проверки .
источник