Баннер мобильный (3) Пройти тест

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

Изучаем основы работы с данными

Разбор

17 декабря 2024

Поделиться

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

Содержание

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

    Что такое выборка данных

    Обычная компьютерная программа работает благодаря алгоритмам — это четкая последовательность действий, которая дает предсказуемый результат. Если пользователь нажмет кнопку «Опубликовать», он точно знает, что произойдет дальше.

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

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

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

    где используются выборки
    Где чаще всего используется машинное обучение, по данным Statista. Источник

    Какие бывают выборки

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

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

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

    Пример разделения данных на выборки

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

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

    Как разделить датасет на обучающую и тестовую выборки

    Шаг 1. Сбор данных

    Обычно для этого используют:

    • базы данных: SQL, NoSQL;
    • API: получение данных из внешних сервисов;
    • файлы: CSV, Excel, JSON и др.;
    • веб-скрапинг: извлечение с веб-страниц.

    Шаг 2. Подготовка

    Готовим данные к последующей работе:

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

    Шаг 3. Определение размеров выборок

    Обычно используют следующие пропорции:

    • обучающая выборка: 60–80%;
    • валидационная выборка: 10–20%;
    • тестовая выборка: 10–20%.

    Шаг 4. Разделение данных

    Разделить данные на группы можно случайно или с учетом их классов: 

    • Случайное разделение проводится с использованием функции случайной генерации. Этот метод позволяет быстро разделить даже большие наборы данных. Однако, если в наборе есть несбалансированные классы, данные могут быть распределены между выборками неравномерно. Иными словами, мы будем учиться на одной теме, а «писать контрольную» по другой;
    • Стратифицированное разделение: перед случайным отбором данные делят на подгруппы по определенному признаку (например, тема задачи). Затем из каждой группы выбирают пропорциональное количество записей для обучающей (60%), валидационной (20%) и тестовой выборок (20%). Такой тип деления помогает сохранить сбалансированность классов.

    Шаг 5. Проверка результатов

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

    Запросы на выборку данных Python

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

    • NumPy: предоставляет функции для генерации случайных чисел и выборок. Например, команда numpy.random.choice позволяет делать случайные выборки данных из массива.
    Генерация случайной выборки NumPy

    Генерация случайной выборки в NumPy. Источник

    • Pandas: имеет встроенные функции для случайной выборки данных из DataFrame. Метод sample() позволяет выполнить как случайную, так и стратифицированную выборку.
    Метод sample() для получения выборки

    Метод sample(). Источник

    • Scikit-learn: готовит данные к машинному обучению. Функция train_test_split позволяет разбивать их на обучающую и тестовую выборки с учетом стратификации.
    Синтаксис train_test_split для подготовки данных к выборке
    Синтаксис train_test_split. Источник
    • Random: встроенный модуль Python для случайной выборки данных.
    Случайная выборка random в Python
    Случайная выборка с помощью встроенного модуля random в Python. Источник

    Запрос на выборку данных SQL

    В языке SQL для выборки данных используется команда SELECT. С ее помощью можно извлечь информацию из таблиц для анализа или отчетности.

    С помощью оператора SELECT можно выполнять разные типы выборок:

    • выборка всех данных (используется символ *);
    • выборка из конкретных столбцов.
    Оператор SELECT
    Оператор SELECT в SQL. Источник

    Чтобы уточнить запрос и отфильтровать данные, можно использовать дополнительные операторы:

    • WHERE фильтрует данные на основе заданных критериев. Например, из таблицы со списком сотрудников можно выбрать записи с определенной должностью.
    SELECT * FROM employees WHERE position = 'Manager'
    • ORDER BY сортирует результаты выборки по одному или нескольким столбцам. По умолчанию сортировка происходит в порядке возрастания (ASC), но можно указать и убывание (DESC).
    SELECT * FROM employees ORDER BY name ASC
    • GROUP BY используется для группировки строк с одинаковым содержанием в указанных столбцах. 
    SELECT position, COUNT(*) FROM employees GROUP BY position

    Главное о выборках данных

    • Выборки используются в машинном обучении для настройки модели и проверки ее производительности.
    • Обучающая выборка самая большая, она используется для настройки параметров, валидационная — для промежуточного контроля, а тестовая — для итоговой оценки модели.
    • Перед разделением на выборки данные нужно правильно подготовить: убрать дубликаты и пробелы, исправить ошибки.
    • Данные можно разделить между выборками случайным образом или сделать стратифицированную выборку, которая учитывает соотношения классов.
    • Для разделения данных можно использовать различные инструменты, например функцию test_ train_split в Scikit-learn.

    Разбор

    Поделиться

    Скопировано
    0 комментариев
    Комментарии