В некоторых лекциях и уроках, которые я видел, они предлагают разделить ваши данные на три части: обучение, проверка и тестирование. Но не ясно, как следует использовать набор тестовых данных, и как этот подход лучше, чем перекрестная проверка по всему набору данных.
Допустим, мы сохранили 20% наших данных в качестве тестового набора. Затем мы берем остаток, разбиваем его на k сгибов и, используя перекрестную проверку, находим модель, которая делает лучший прогноз на неизвестных данных из этого набора данных. Допустим, лучшая модель, которую мы нашли, дает нам точность 75% .
Различные учебные пособия и множество вопросов на различных сайтах вопросов и ответов говорят о том, что теперь мы можем проверить нашу модель по сохраненному (тестовому) набору данных. Но я до сих пор не могу понять, как именно это делается, и какой в этом смысл.
Допустим, у нас есть точность 70% для тестового набора данных. Так что же нам делать дальше? Пробуем ли мы другую модель, а затем другую, пока не получим высокий балл в нашем тестовом наборе данных? Но в этом случае действительно похоже, что мы просто найдем модель, которая соответствует нашему ограниченному (всего 20%) тестов . Это не значит, что мы найдем модель, которая является лучшей в целом.
Кроме того, как мы можем рассматривать эту оценку как общую оценку модели, если она рассчитывается только на ограниченном наборе данных? Если этот показатель низкий, возможно, нам не повезло и мы выбрали «плохие» данные теста.
С другой стороны, если мы используем все имеющиеся у нас данные, а затем выбираем модель, используя перекрестную проверку в k-кратном размере, мы найдем модель, которая дает наилучший прогноз по неизвестным данным из всего набора данных, который у нас есть.
Ответы:
Это похоже на другой вопрос, на который я ответил в отношении перекрестной проверки и тестовых наборов . Ключевая концепция, которую нужно понять, это независимые наборы данных . Рассмотрим только два сценария:
Теперь, если я исследователь, которому не так повезло, что мне делать? Ну, вы можете попытаться воспроизвести этот точный сценарий:
Чтобы решить ваши другие проблемы:
В некотором смысле, идея заключается в том, что вы создаете лучшую модель, какую только можете, из своих данных, а затем оцениваете ее по некоторым другим данным, которых она никогда раньше не видела. Вы можете переоценить свою схему перекрестной проверки, но как только у вас есть настроенная модель (то есть гиперпараметры), вы продвигаетесь вперед с этой моделью, потому что это было лучшее, что вы могли сделать. Ключ в том, чтобы НИКОГДА НЕ ИСПОЛЬЗОВАТЬ ВАШИ ДАННЫЕ ДЛЯ ТЕСТА . Ваш результат на основе данных испытаний - это производительность вашей модели на «общих» данных. Воспроизведение этого процесса приведет к удалению независимости наборов данных (в этом и заключается весь смысл). Об этом также говорится в другом вопросе о данных испытаний / проверки .
Это маловероятно, если вы правильно разбили свои данные. Вы должны разбивать свои данные случайным образом (хотя потенциально стратифицированы для балансировки классов). Если ваш набор данных достаточно велик, чтобы разделить данные на три части, тестовое подмножество должно быть достаточно большим, чтобы вероятность того, что вы просто выбрали неверные данные, очень мала. Скорее всего, ваша модель была надета.
источник
Если все, что вы собираетесь сделать, - это обучить модель с настройками по умолчанию для необработанного или минимально предварительно обработанного набора данных (например, кодирование в одно касание и / или удаление NA), вам не нужен отдельный набор тестов, вы можете просто тренироваться на своем обучайте набор и проверяйте его на проверочном наборе, или, что еще лучше, обучайте весь набор, используя перекрестную проверку, чтобы оценить свою производительность.
Однако, как только ваши знания о данных заставляют вас вносить какие-либо изменения в исходную стратегию, вы теперь «испортили» свой результат. Вот некоторые примеры:
Выбор модели: Вы проверили машины логистики, лассо, случайного леса, XGBoost и опорных векторов и выбрали лучшую модель
Настройка параметров: вы настроили XGBoost, чтобы найти оптимальные гиперпараметры
Выбор характеристик: вы использовали обратный выбор, генетический алгоритм, боруты и т. Д., Чтобы выбрать оптимальный набор функций для включения в вашу модель.
Отсутствующее вменение: Вы вменяли отсутствующие переменные со средним значением или с простой моделью, основанной на других переменных
Преобразование объекта: вы центрировали и масштабировали числовые переменные, чтобы заменить их z-счетом (число стандартных отклонений от среднего)
Во всех вышеперечисленных случаях использование единого набора задержек или даже перекрестной проверки не даст вам реалистичной оценки реальной производительности, потому что вы используете информацию, которую вы не будете иметь в будущих данных в своем решении. Вместо этого вы выбираете самую лучшую модель, лучшие гиперпараметры, лучший набор функций и т. Д. Для своих данных, и вы, вероятно, будете слегка «перегонять» свою стратегию с вашими данными. Чтобы получить достоверную оценку реальной производительности, вы должны оценивать ее по данным, которые вообще не были включены в процесс принятия решений, следовательно, это обычная практика использования независимого набора тестов, отдельного от вашего обучения (моделирование) и валидации ( выбор модели, характеристик, гиперпараметров и т. д.) набора.
В качестве альтернативы удержанию тестового набора вы можете использовать метод, называемый вложенной перекрестной проверкой. Это требует, чтобы вы кодировали всю свою стратегию моделирования (преобразование, вменение, выбор характеристик, выбор модели, настройка гиперпараметров) как непараметрическую функцию, а затем выполняли перекрестную проверку всей этой функции, как если бы она была просто функцией подбора модели. Это трудно сделать в большинстве пакетов ML, но его можно довольно легко реализовать в R с пакетом mlr, используя обертки для определения вашей стратегии обучения, а затем повторную выборку вашего обучаемого:
https://mlr.mlr-org.com/articles/tutorial/nested_resampling.html
источник
Я предполагаю, что вы делаете классификацию.
Возьмите свои данные и разделите их 70/30 на подмножества trainingData / testData. Возьмите подмножество trainingData и снова разделите его на 70/30 на подмножества trainingData / validateData. Теперь у вас есть 3 подмножества исходных данных - trainingData (.7 * .7), validateData (.7 * .3) и testData (.3).
Вы тренируете свою модель с trainingData. Затем вы проверяете производительность этой модели с помощью validateData, который мы можем считать независимым от trainingData, и, следовательно, хорошей оценкой того, насколько хорошо модель обобщается. Давайте представим, что вы достигли 75% точности.
Теперь вы переучиваете свою модель произвольное количество раз. При каждой переподготовке вы оцениваете различные наборы гиперпараметров (в первую очередь параметры, передаваемые в вашу модель по сравнению с теми, для которых оптимизируется ваша модель), но все еще используете подмножество trainingData. При каждой переподготовке вы также снова проверяете, насколько хорошо новая модель обобщается, проверяя производительность в validateData.
После того как вы проверили каждую комбинацию гиперпараметров, которые вы хотите оценить, вы выбираете набор гиперпараметров, который обеспечит вам максимальную производительность для validateData - давайте представим, что ваша максимальная производительность для validateData была 80% точности. Это ваши последние гиперпараметры, и модель, определенная этими гиперпараметрами, будет той, которую вы будете использовать для следующего шага.
Теперь вы берете модель, которая использует ваши окончательные гиперпараметры и оценивает testData. Это первый раз, когда testData был затронут с момента запуска всего этого процесса! Если вы получаете производительность testData, сравнимую с вашей производительностью для validateData (хотя обычно она будет немного ниже), то вы можете быть уверены, что ваша модель работает так, как ожидалось, и обобщает хорошо! Если это произойдет, это ваша последняя модель!
Зачем все это? Вы пытаетесь избежать переобучения. Всегда существует риск того, что вы переизбираете данные, которые используете, когда тренируетесь и настраиваете (или проверяете) свою модель. Если вы обучаете, настраиваете (проверяете) и тестируете, используя только один набор данных, есть большая вероятность, что вы превысите эти данные, и они не будут хорошо обобщаться. Разбивая наборы обучающих и тестовых данных (и предполагая, что вы настраиваетесь с использованием тестовых данных), у вас есть возможность проверить себя внутренне, но все еще есть вероятность, что вы просто перегрузили тестовые данные. Вот почему мы раскрываем третий набор данных, проверяем его, поэтому у нас есть дополнительный уровень внутренней честности. Настройка с validateData удерживает нас от подгонки к trainingData. Финальное тестирование с testData удерживает нас от переобучения для validateData.
источник
Давайте посмотрим на это следующим образом
Обычная практика
а) Данные обучения - используются для выбора параметров модели.
б) Данные валидации - используются для выбора гиперпараметров.
c) Тестовые данные - используются для получения достоверности выходных данных из двух вышеупомянутых шагов
Еще один способ взглянуть на часть 1
а) Наш модельный пул кандидатов представляет собой 5-мерное множество, т. е.
б) Шаг 1а, уменьшите кандидатов в модели от 5-мерного до 1-мерного.
c) Шаг 1b сокращает кандидатов на модели от 1-мерного до 0-мерного, что единая модель.
d) Тем не менее, OP может подумать, что «конечный» результат, представленный выше, недостаточно хорошо работает с набором тестовых данных, и, таким образом, снова повторить весь процесс, скажем, с использованием регрессии гребня вместо обычной линейной регрессии. Затем набор тестовых данных используется несколько раз, и, таким образом, шум в этих данных может привести к некоторому переоснащению при принятии решения о том, использовать ли линейную регрессию или регрессию гребня.
e) Чтобы иметь дело с пулом многомерной модели с параметрами, гиперпараметрами, типами моделей и методами предварительной обработки, любое разделение на доступные нам данные по существу определяет процесс принятия решения, который
Заключение и ответы на вопрос ОП
a) Два разделения (обучение и тестирование), три разделения (обучение, проверка и тестирование) или большее количество разделений в основном касаются уменьшения размерности и распределения данных (особенно шума и риска переопределения).
б) На каком-то этапе вы можете создать «окончательный» пул кандидатов модели, а затем подумать о том, как разработать процесс последовательного сокращения измерения таким образом, чтобы
в) Что делать, если вы не можете достичь б
источник