Разделение данных (Data Splitting)

Что такое Разделение данных (Data Splitting)?

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

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

Аналогия из бытового мира

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

Исторический контекст

Практика разделения данных закрепилась в машинном обучении в 1980–1990‑х годах, когда активно развивались методы статистического обучения и кросс‑валидации. Ранние работы по кросс‑валидации (например, leave‑one‑out) показали, что оценка модели на тех же данных, на которых она обучалась, приводит к переоценке её качества. Это подтолкнуло исследователей к идее разделения данных на обучающую и тестовую выборки. Со временем к ним добавилась валидационная выборка для настройки гиперпараметров.

Смежные понятия и различия

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

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

Стратификация

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

Разбиение по времени

Особый вид разделения для временных рядов, где данные делятся по временной оси (например, первые 80 % данных — обучение, последние 20 % — тестирование).

Примеры использования

Типичное разделение

  • обучающая выборка (train) — 70 % данных (на них модель учится);
  • валидационная выборка (validation) — 15 % (используется для настройки гиперпараметров и выбора модели);
  • тестовая выборка (test) — 15 % (финальная оценка качества модели).

В задачах компьютерного зрения

Например, в ImageNet данные разделяют по изображениям: часть изображений идёт на обучение, часть — на валидацию, часть — на тестирование.

В NLP

Например, при обучении трансформеров вроде BERT или GPT тексты разбивают на обучающую, валидационную и тестовую выборки, сохраняя распределение тем и стилей.

В задачах временных рядов

Например, при прогнозировании спроса или финансовых показателей данные делят по времени: например, данные за 2010–2018 гг. — обучение, 2019 г. — валидация, 2020 г. — тестирование.

В фреймворках

В scikit‑learn, TensorFlow, PyTorch есть встроенные функции для разделения данных:
  • train_test_split в scikit‑learn;
  • tf.data.Dataset.split в TensorFlow;
  • torch.utils.data.random_split в PyTorch.

Авторизация