Как вы используете тестовый набор данных после перекрестной проверки?


25

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

Допустим, мы сохранили 20% наших данных в качестве тестового набора. Затем мы берем остаток, разбиваем его на k сгибов и, используя перекрестную проверку, находим модель, которая делает лучший прогноз на неизвестных данных из этого набора данных. Допустим, лучшая модель, которую мы нашли, дает нам точность 75% .

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

Допустим, у нас есть точность 70% для тестового набора данных. Так что же нам делать дальше? Пробуем ли мы другую модель, а затем другую, пока не получим высокий балл в нашем тестовом наборе данных? Но в этом случае действительно похоже, что мы просто найдем модель, которая соответствует нашему ограниченному (всего 20%) тестов . Это не значит, что мы найдем модель, которая является лучшей в целом.

Кроме того, как мы можем рассматривать эту оценку как общую оценку модели, если она рассчитывается только на ограниченном наборе данных? Если этот показатель низкий, возможно, нам не повезло и мы выбрали «плохие» данные теста.

С другой стороны, если мы используем все имеющиеся у нас данные, а затем выбираем модель, используя перекрестную проверку в k-кратном размере, мы найдем модель, которая дает наилучший прогноз по неизвестным данным из всего набора данных, который у нас есть.


1
Вы оцениваете свою лучшую модель на этом тестовом наборе и сообщаете о производительности на нем. Это ваша лучшая оценка производительности вашей модели. Предлагаю вам прочитать первые две главы превосходной книги Язера Абу-Мостафы «Изучение данных». Очень лаконично и очень доступно. work.caltech.edu/telecourse.html
Владислав Довгальец

1
Спасибо за книгу, которую вы предложили! Но что касается вашего ответа на вопрос - вы говорите, что это «лучшая оценка производительности вашей модели», но на самом деле это оценка производительности модели на небольшом (20%) тестовом наборе , она не имею ввиду модель производительности в целом.
Сергей

2
На самом деле это ваша лучшая оценка производительности модели в целом. Ваша модель может быть предвзятой и / или страдающей от высокой дисперсии, но производительность модели в вашем тестовом наборе является лучшим показателем того, как она будет работать с любыми невидимыми данными.
Владислав Довгальец

Спасибо xeon! Единственное, что мне до сих пор неясно, что мы делаем после оценки модели с использованием набора тестовых данных ?
Сергей

Вы либо отправляете модель, если вы довольны результатами, либо находите лучшие функции / алгоритм / больше данных для улучшения модели.
Владислав Довгальец

Ответы:


20

Это похоже на другой вопрос, на который я ответил в отношении перекрестной проверки и тестовых наборов . Ключевая концепция, которую нужно понять, это независимые наборы данных . Рассмотрим только два сценария:

  1. Если у вас много ресурсов, вы в идеале должны собрать один набор данных и обучить свою модель с помощью перекрестной проверки. Затем вы соберете другой полностью независимый набор данных и протестируете свою модель. Однако, как я уже говорил ранее, это обычно невозможно для многих исследователей.

Теперь, если я исследователь, которому не так повезло, что мне делать? Ну, вы можете попытаться воспроизвести этот точный сценарий:

  1. Перед тем, как приступить к обучению модели, вы должны разделить свои данные и оставить их в стороне ( никогда не трогать во время перекрестной проверки ). Это для того, чтобы смоделировать тот же самый независимый набор данных, упомянутый в идеальном сценарии выше. Несмотря на то, что он поступает из того же набора данных, обучение модели не будет брать никакой информации из этих выборок (где при перекрестной проверке используются все данные). После того, как вы обучите свою модель, вы затем примените ее к своему испытательному набору, опять же, чего никогда не видели во время обучения, и получите свои результаты. Это сделано для того, чтобы ваша модель была более обобщенной, а не только изучала ваши данные.

Чтобы решить ваши другие проблемы:

Допустим, у нас есть точность 70% в наборе тестовых данных, так что же нам делать дальше? Пробуем ли мы другую модель, а затем другую, пока не получим высокий балл в нашем наборе тестовых данных?

В некотором смысле, идея заключается в том, что вы создаете лучшую модель, какую только можете, из своих данных, а затем оцениваете ее по некоторым другим данным, которых она никогда раньше не видела. Вы можете переоценить свою схему перекрестной проверки, но как только у вас есть настроенная модель (то есть гиперпараметры), вы продвигаетесь вперед с этой моделью, потому что это было лучшее, что вы могли сделать. Ключ в том, чтобы НИКОГДА НЕ ИСПОЛЬЗОВАТЬ ВАШИ ДАННЫЕ ДЛЯ ТЕСТА . Ваш результат на основе данных испытаний - это производительность вашей модели на «общих» данных. Воспроизведение этого процесса приведет к удалению независимости наборов данных (в этом и заключается весь смысл). Об этом также говорится в другом вопросе о данных испытаний / проверки .

А также, как мы можем рассматривать эту оценку как общую оценку модели, если она рассчитывается на основе ограниченного набора данных? Если этот показатель низкий, возможно, нам не повезло выбрать «плохие» данные теста.

Это маловероятно, если вы правильно разбили свои данные. Вы должны разбивать свои данные случайным образом (хотя потенциально стратифицированы для балансировки классов). Если ваш набор данных достаточно велик, чтобы разделить данные на три части, тестовое подмножество должно быть достаточно большим, чтобы вероятность того, что вы просто выбрали неверные данные, очень мала. Скорее всего, ваша модель была надета.


3
Спасибо за такое подробное объяснение! Единственное, что мне до сих пор неясно, что мы делаем после оценки модели с использованием набора тестовых данных ? Что если результат действительно низкий? Мы попробуем другую модель?
Сергей

Как я уже сказал выше, вы можете пересмотреть свою перекрестную проверку и посмотреть, можно ли улучшить ваш метод, если вы не используете свои «тестовые» данные для обучения модели. Если ваш результат низок, вы, вероятно, переоценили свою модель. Ваш набор данных может иметь только такую ​​сильную предсказательную силу.
cdeterman

Не является ли перекрестная проверка простым повторным разделением на обучающие и тестовые наборы (например, набор тестов представляет собой первые 20%, затем вторые 20%, затем третий и т. Д., Или все случайным образом выбирают 20% для теста n раз и вычисляют среднюю точность) и делать то же самое, что вы описываете, делая с тестовым набором? Не показывать это алгоритму вообще до теста?
Зельфир Кальцталь

2
@ Zelphir нет, каждый фолд оценивается несколько раз с каждой комбинацией гиперпараметров. Простой выбор наилучшего результата может привести к более высоким результатам, чем в «независимом» тестовом наборе. Идея состоит в том, чтобы увидеть, какие параметры обобщают эти складки, и использовать эту архитектуру в тестовом наборе, который он никогда не видел, чтобы определить, насколько «обобщаема» модель.
cdeterman

1
Я хочу добавить, что на самом деле сам процесс просмотра производительности в вашем независимом тестовом наборе и принятия решения вернуться и переобучить вашу модель делает ваш тестовый набор более не полностью независимым . Фактически, вы можете делать это бесконечно много раз, пока не получите идеальную точность. Что касается академической справки, я рекомендую книгу «Обучение на основе данных», есть также бесплатный онлайн-курс автора ( work.caltech.edu/telecourse.html ).
Майкл

4

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

Однако, как только ваши знания о данных заставляют вас вносить какие-либо изменения в исходную стратегию, вы теперь «испортили» свой результат. Вот некоторые примеры:

  • Выбор модели: Вы проверили машины логистики, лассо, случайного леса, XGBoost и опорных векторов и выбрали лучшую модель

  • Настройка параметров: вы настроили XGBoost, чтобы найти оптимальные гиперпараметры

  • Выбор характеристик: вы использовали обратный выбор, генетический алгоритм, боруты и т. Д., Чтобы выбрать оптимальный набор функций для включения в вашу модель.

  • Отсутствующее вменение: Вы вменяли отсутствующие переменные со средним значением или с простой моделью, основанной на других переменных

  • Преобразование объекта: вы центрировали и масштабировали числовые переменные, чтобы заменить их z-счетом (число стандартных отклонений от среднего)

Во всех вышеперечисленных случаях использование единого набора задержек или даже перекрестной проверки не даст вам реалистичной оценки реальной производительности, потому что вы используете информацию, которую вы не будете иметь в будущих данных в своем решении. Вместо этого вы выбираете самую лучшую модель, лучшие гиперпараметры, лучший набор функций и т. Д. Для своих данных, и вы, вероятно, будете слегка «перегонять» свою стратегию с вашими данными. Чтобы получить достоверную оценку реальной производительности, вы должны оценивать ее по данным, которые вообще не были включены в процесс принятия решений, следовательно, это обычная практика использования независимого набора тестов, отдельного от вашего обучения (моделирование) и валидации ( выбор модели, характеристик, гиперпараметров и т. д.) набора.

В качестве альтернативы удержанию тестового набора вы можете использовать метод, называемый вложенной перекрестной проверкой. Это требует, чтобы вы кодировали всю свою стратегию моделирования (преобразование, вменение, выбор характеристик, выбор модели, настройка гиперпараметров) как непараметрическую функцию, а затем выполняли перекрестную проверку всей этой функции, как если бы она была просто функцией подбора модели. Это трудно сделать в большинстве пакетов ML, но его можно довольно легко реализовать в R с пакетом mlr, используя обертки для определения вашей стратегии обучения, а затем повторную выборку вашего обучаемого:

https://mlr.mlr-org.com/articles/tutorial/nested_resampling.html


1

Я предполагаю, что вы делаете классификацию.

Возьмите свои данные и разделите их 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.


Чем этот ответ отличается от принятого ответа ?
Ян Кукацка

Оригинальный вопрос явно задает вопрос о рабочем процессе, который не включает перекрестную проверку. Я прочитал его вопрос, чтобы спросить, как это работает и почему это надежно. Принятый ответ обсуждает рабочий процесс, который все еще включает перекрестную проверку. Я хотел объяснить, как люди делают это без необходимости использовать перекрестную проверку в случае, если кто-то является новичком и, возможно, еще не дошел до этого. Извините, если опубликовать это неправильно - я новый пользователь и не хочу нарушать правила.
Джон Д

0

Давайте посмотрим на это следующим образом

  1. Обычная практика

    а) Данные обучения - используются для выбора параметров модели.

     i) E.g., finding intercept and slope parameters for an ordinary linear 
        regression model. 
    
     ii) The noise in the training data-set is used in some extent 
         in over-fitting model parameters. 
    

    б) Данные валидации - используются для выбора гиперпараметров.

     i)  E.g., we may want to test three different models at step 1.a, say 
         linear model with one, two or three variables.   
    
     ii) The validation data-set is independent from training data, and thus, they provide 
         'unbiased' evaluation to the models, which help to decide which 
         hyper-parameter to use. 
    
     iii) We note that, a model trained in 1.a, say y = b_0+b_1*x_1, does 
         not learn anything from this data-set. So, the noise in this data- 
         set is not used to over-fit the parameters (b_0, b_1), but, over- 
         fit exists in choosing which linear model to use (in terms of 
         number of variables). 
    

    c) Тестовые данные - используются для получения достоверности выходных данных из двух вышеупомянутых шагов

    i) Used once a model is completely trained
    
  2. Еще один способ взглянуть на часть 1

    а) Наш модельный пул кандидатов представляет собой 5-мерное множество, т. е.

    i) Dimension 1: number of variables to keep in the regression model, 
       e.g., [1, 2, 3].
    
    ii) Dimension 2-5: (b_0, b_1, b_2, b_3). 
    

    б) Шаг 1а, уменьшите кандидатов в модели от 5-мерного до 1-мерного.

    c) Шаг 1b сокращает кандидатов на модели от 1-мерного до 0-мерного, что единая модель.

    d) Тем не менее, OP может подумать, что «конечный» результат, представленный выше, недостаточно хорошо работает с набором тестовых данных, и, таким образом, снова повторить весь процесс, скажем, с использованием регрессии гребня вместо обычной линейной регрессии. Затем набор тестовых данных используется несколько раз, и, таким образом, шум в этих данных может привести к некоторому переоснащению при принятии решения о том, использовать ли линейную регрессию или регрессию гребня.

    e) Чтобы иметь дело с пулом многомерной модели с параметрами, гиперпараметрами, типами моделей и методами предварительной обработки, любое разделение на доступные нам данные по существу определяет процесс принятия решения, который

    i)  Sequentially reducing the model pool to zero-dimension.
    
    ii) Allocating data noise overfitting to different steps of dimension 
        reductions (overfitting the noise in the data is not avoidable but 
        could be allocated smartly). 
    
  3. Заключение и ответы на вопрос ОП

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

    б) На каком-то этапе вы можете создать «окончательный» пул кандидатов модели, а затем подумать о том, как разработать процесс последовательного сокращения измерения таким образом, чтобы

    i) At each step of reducing the dimensions, the output is satisfactory, 
      e.g., not using just 10 data points with large noise to estimate a 
      six-parameter liner model. 
    
    ii) There are enough data for you to reduce the dimension to zero 
       finally. 
    

    в) Что делать, если вы не можете достичь б

    i) Use model and data insight to reduce the overall dimensionality of 
      your model pool. E.g., liner regression is sensitive to outliers thus 
      not good for data with many large outliers. 
    
    ii) Choose robust non-parametric models or models with less number of 
       parameter if possible. 
    
    iii) Smartly allocating the data available at each step of reducing the 
        dimensionality. There is some goodness of fit tests to help us decide 
        whether the data we use to train the model is enough or not. 
    
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.