Чем отличается тестовая выборка от валидационной
Перейти к содержимому

Чем отличается тестовая выборка от валидационной

  • автор:

Как разделять набор данных

Как оптимально разделить набор данных на обучающую, валидационную и тестовую выборки?

У каждого подмножества данных есть цель, от создания модели до обеспечения её производительности:

  • Обучающий набор — это подмножество данных, которые я буду использовать для обучения модели.
  • Валидационная выборка — используется для контроля процесса обучения. Она поможет предотвратить переобучение и обеспечит более точную настройку входных параметров.
  • Тестовый набор — подмножество данных для оценки производительности модели.

Размер и соотношение данных для обучения

Чтобы принять решение о размере каждого подмножества, я часто вижу стандартные правила и соотношения. Сталкиваюсь с разделением по правилу 80-20 (80 % для тренировочного сплита, 20% для тестового сплита) или по правилу 70-20-10 (70% для обучения, 20% для проверки, 10% для тестирования) и т.д.

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

В BigQuery, как правило, можно создать только подмножество для обучения и тестирования, потому что проверка может быть выполнена при создании модели с DATA_SPLIT опцией.

Прежде чем разделить набор данных, необходимо знать о некоторых распространённых ловушках:

  • Низкокачественные данные: если входные данные, использованные для создания вашей модели, имеют выбросы, это скорее всего негативно повлияет на качество модели.
  • Переобучение: когда входных данных недостаточно, но построенная модель хорошо объясняет параметры из обучающей выборки, то считается, что любой выброс или колебания приводят к недостоверным прогнозам.
  • Несбалансированный набор данных: представьте, что вы хотите обучить модель, которая предсказывает покупку клиента, но у вас есть 500 тысяч потенциальных покупателей и 300 покупателей. Для начала нужно создать более равный набор данных (используя технику повторной выборки). Исследовательский анализ данных (EDA) поможет выявить несбалансированные данные.
  • Утечка данных: означает, что входные данные были изменены (масштабированы, преобразованы) перед созданием обучающего набора данных или во время их разделения.

Разделение набора данных с помощью SQL

Для эксперимента у меня есть следующий набор данных, состоящий из 11 тыс. строк и трёх полей идентификатора заказа, даты и связанного значения заказа.

Разделю эту таблицу на обучающую и тестовую подгруппы.

Выбор правильного столбца для разделения

Чтобы сделать правильное разделение, используйте один столбец, который отличает каждую строку вашей базовой таблицы. В противном случае может быть трудно создать равномерно распределённое разделение.

Чтобы добиться уникальности, есть несколько вариантов в практических примерах:

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

Для второго варианта наиболее распространенной хеш-функцией, является FARM_FINGERPRINT().

Почему именно этот, а не MD5() или SHA()?

Это обусловлено двумя особенностями. Во-первых, он всегда даёт одни и те же результаты для одних и тех же входных данных, а во-вторых, он возвращает INT64 значение (число, а не комбинацию чисел и символов), которым можно управлять с помощью других математических функций, например, MOD () для получения коэффициента разделения.

Создайте уникальный идентификатор строки

Чтобы создать уникальный идентификатор строки, использую FARM_FINGERPRINT() функцию:

WITH base_table AS ( SELECT * FROM `datastic.train_test_split.base_table`) — Main Query SELECT *, FARM_FINGERPRINT(order_id) AS hash_value_order_id, TO_JSON_STRING(bt) AS full_json_row, FARM_FINGERPRINT(TO_JSON_STRING(bt)) AS hash_value_full_row, MOD(FARM_FINGERPRINT(order_id), 10) AS hash_mod, ABS(MOD(FARM_FINGERPRINT(order_id), 10)) AS hash_abs_mod FROM base_table bt

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

Влияние хеш-функции и функции по модулю на нашу базовую таблицу.

40. Проблемы обобщения: от обучающей выборки к валидационной

Предположим, что вы применяете ML в условиях, когда распределение обучающей и валидационной выборок отличаются. Например, обучающая выборка содержит изображения из Интернета + изображения из мобильного приложения, а тестовая и валидационная выборки только из мобильного приложения. При этом алгоритм работает не очень хорошо: он имеет гораздо более высокую ошибку на валидационной и тестовой выборках, чем хотелось бы. Приведем некоторые возможные причины:

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

Например, предположим, человеческий уровень распознавания кошек является практически идеальным. Ваш алгоритм относительно него показывает:

  • 1% ошибки на обучающей выборке
  • 1,5% ошибки для данных, взятых из того же распределения, что и обучающая выборка, но которые алгоритму не показывали при обучении
  • 10% ошибки на валидационной и на тестовой выборках

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

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

Теперь у вас есть четыре выборки данных:

  • Обучающая выборка. Это данные, на которых будет обучаться алгоритм (изображения из Интернета + изображения из мобильного приложения). Эти данные не обязаны иметь такое же распределение, которое для нас является наиболее важным (распределение валидационной и тестовой выборок).
  • Выборка для валидации обучающей: эти данные берутся из того же распределения, что и обучающая выборка (изображения из Интернета + изображения из мобильного приложения). Размер этой выборки обычно меньше, чем размер обучающей выборки; но она должна быть достаточно большой, чтобы позволять оценивать и отслеживать прогресс в обучении нашего алгоритма.
  • Валидационная выборка: эта выборка имеет то же распределение, что и тестовая, и отражает распределение данных, качество работы на котором определит успешность приложения. (Например, изображения из мобильного приложения)
  • Тестовая выборка: ее распределение совпадает с распределением валидационной выборки. (Изображения из мобильного приложения)

Вооружившись этими четырьмя выборками, можно оценить:

  • Ошибки алгоритма на обучающей выборке
  • Способность алгоритма к обобщению своей работы с обучающей выборки на данные, имеющие такое же распределение, но сокрытые от алгоритма, посредством «выборки для валидации обучающей».
  • Эффективность алгоритма для решения задачи, критичной для приложения, посредством оценки качества его работы на валидационной и тестовой выборках.

Большинство рекомендаций из 5-7 глав по выбору размера валидационной выборки также применимы к принятию решения о размере «выборки для валидации обучающей».

41. Выявление смещения, разброса и несоответствия данных

Допустим люди достигают почти идеального качества (ошибка ≈0%) в задаче обнаружения кошек, и, таким образом, оптимальный уровень ошибки для этой задачи составляет около 0%.

Предположим, у нашего алгоритма:

  • Ошибка 1% на обучающей выборке.
  • Ошибка 5% на «выборке для валидации обучающей».
  • Ошибка 5% на валидационной выборке.

О чем это говорит? Можно сделать вывод, что мы имеем дело с высоким разбросом. Методы уменьшения разброса, описанные ранее, должны помочь повысить качество работы алгоритма.
Теперь предположим, что у алгоритма следующие показатели:

  • Ошибка 10% на обучающей выборке.
  • Ошибка 11% на «выборке для валидации обучающей».
  • Ошибка 12% на валидационной выборке.

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

В обоих приведенных примерах алгоритм страдает только высоким избегаемым смещением или высоким разбросом. Однако, алгоритм может иметь как высокое избегаемое смещения, высокий разброс, так и проблемы с несоответствием данных в выборках.
Рассмотрим еще такую ситуацию:

  • Ошибка 10% на обучающей выборке.
  • Ошибка 11% на «выборке для валидации обучающей».
  • Ошибка 20% на валидационной выборке.

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

image

Продолжая рассмотрение примера с детектором кошек, расположим на оси Х два разных распределения данных. На оси Y расположим три типа ошибок: ошибка человека, ошибка на примерах, используемых для обучения алгоритма, и ошибка в примерах, на которых алгоритм не обучался. Мы можем заполнить поля значениями различных типов ошибок, которые мы определили в предыдущей главе.

При желании можно заполнить оставшиеся два поля в этой таблице. Можно заполнить поле в верхнем правом углу (качество человека на изображениях, полученных из мобильного приложения), например, попросив некоторых подписчиков разметить изображения из вашего мобильного детектора котов и измерить их ошибку. Можно заполнить следующую клетку в таблице, взяв изображения кошек из мобильного приложения (распределение B) и поместив их небольшую часть в обучающую выборку, чтобы нейронная сеть обучалась на нем тоже. Затем нужно измерить ошибку алгоритма на этом подмножестве данных. Заполнение приведенных двух дополнительных клеток таблицы даст понимание того, как алгоритм отрабатывает на этих двух различными распределениях данных (Распределение A и B).

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

Обучающая выборка и тестовые данные

Обучающая выборка и тестовые данные

Наблюдения в обучающей выборке (training set) содержат опыт, который алгоритм использует для обучения. В задачах обучения с учителем каждое наблюдение состоит из наблюдаемой (зависимой) переменной и одной или нескольких независимых переменных.

Тестовое множество, или тестовая выборка, представляет из себя аналогичный набор наблюдений, который используется для оценки качества модели, используя некоторые показатели.

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

Переобучение

Запоминание обучающей выборки называется переобучением (overfitting). Программа, которая запомнит свои наблюдения не сможет выполнить поставленную задачу правильно, так как она запомнит отношения и структуры в данных, являющиеся шумом или простым совпадением. Балансировка между запоминанием и обобщением, или переобучением и недообучением (underfitting), является общей проблемой для многих алгоритмов машинного обучения. Одним из способов избежать переобучение для многих моделей является применение регуляризации.

Проверочное множество

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

  • 50 или более процентов данных для формирования обучающего множества;
  • 25 процентов для тестовой выборки;
  • оставшиеся данные используются для формирования проверочного множества.

Качество данных

Некоторые обучающие выборки могут содержать только несколько сотен наблюдений, другие могут включать в себя миллионы точек данных. Недорогие облачные хранилища данных, множество встроенных в смартфоны и различные гаджеты датчиков внесли свой вклад в современное состояние BigData. У нас имеется доступ к обучающим множествам с миллионами, или даже миллиардами примеров. Предсказательная сила многих алгоритмов машинного обучения растет при увеличении размера обучающих выборок данных. Тем не менее, алгоритмы машинного обучения, также следуют принципу «мусор на входе — мусор на выходе». Студент, который готовится к экзамену, читая большой, запутанной учебник, который содержит много ошибок, скорее всего, не получит лучшую оценку, чем студент, который читает небольшой, но хорошо написанный учебник. Аналогично, алгоритм обучающийся на большой коллекции зашумленных, не относящихся к делу, или неправильно маркированных данных не будет работать лучше, чем алгоритм обучающийся на меньшем наборе данных, которые более адекватны задачам в реальном мире.

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

Кросс-валидация

Когда нам не хватает обучающих данных, то существует методика, называемая перекрестной проверкой (cross-validation). Перекрестная проверка может быть использована и для подготовки и для проверки алгоритма на одних и тех же данных. При перекрестной проверке, обучающие данные делятся на части. Алгоритм обучается, используя все, кроме одной из частей, а тестируется — на оставшейся части данных. Части могут затем меняться несколько раз так, что алгоритм обучается и оценивается на всех данных. В таблице показан пример перекрестной проверки с данными, разбитыми на пять частей.

A B C D E
Перекрестная проверка, 1 итерация Тестовое множество Обучающее множество Обучающее множество Обучающее множество Обучающее множество
Перекрестная проверка, 2 итерация Обучающее множество Тестовое множество Обучающее множество Обучающее множество Обучающее множество
Перекрестная проверка, 3 итерация Обучающее множество Обучающее множество Тестовое множество Обучающее множество Обучающее множество
Перекрестная проверка, 4 итерация Обучающее множество Обучающее множество Обучающее множество Тестовое множество Обучающее множество
Перекрестная проверка, 5 итерация Обучающее множество Обучающее множество Обучающее множество Обучающее множество Тестовое множество

Оригинальный набор данных разбивается на пять подмножеств одинакового размера, обозначенных от A до E. Сначала модель обучается на частях В-Е, и тестируется на части данных А. На следующей итерации, модель обучается на разделах A, C, D и Е и тестируется на данных части В. Части меняются до тех пор, пока модель не обучится и протестируется на всех частях. Кросс-валидация дает более точную оценку эффективности модели, чем тестирование с использованием только одной части данных.

Какая разница между валидационным и тестовым наборами данных?

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

  • Вопрос задан 22 июл. 2023
  • 460 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 2

Maksim_64

Data Analyst

Смотри в теории машинного обучения есть такая важная тема как Resampling Methods. Это методы случайной выборки из данных которые у тебя есть. Есть два основных это Cross Validation и Bootstrap. Обычно во всяких обучающих материалах используется Cross Validation да и на практике он тоже очень популярен. Что он из себя представляет мы берем например делим случайным образом датасет на 5 частей. Сначала треним на 4 потом тестим на одном что остался, потом на других 4 и тестим на одном что остался и т.д. Так вот каждый такой набор (на котором мы тестим) называется валидационным набором. Например наша метрика MSE мы получим 5 MSE по каждому валидационному набору потом обычно берут среднее по ним.

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

Используют и то и то. Это инженерное решение и ты будешь видеть оба подхода. Ну и на каких то обучающих историях, ты можешь увидеть отсутствие кросс-валидации и только разбиение train_test_split.

В идеале все выглядит вот так. Единственное существует огромное количество разных кросс-валидаций.

64bcbf8e217a9092904980.png

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *