Найти в Дзене

Test Data в Машинном обучении простыми словами

Фото: @editholic7
Фото: @editholic7

Тестовые данные – это часть Датасета (Dataset) , проверяющая основа Модели (Model) Машинного обучения (ML) . Является одной из составляющих разделенного набора данных наряду с Тренировочными (Train Data) и Валидационными (Validation Data) данными.

-2

Пример. Мы создаем модель, предсказывающую потребление электроэнергии в городе. Если на тренировочных данных она, подобно человеческому мозгу, учится видеть скачки потребления электричества, то на тестовой Дата-сайентист (Data Scientist) проверяет качество обучения.

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

Тестовые данные и Scikit-learn

Библиотека Scikit-learn предлагает беспрецедентно минималистичный синтаксис встроенной функции train_test_split() , позволяющий разделить датасет на тренировочную и тестовую части за одну строку кода. Посмотрим, как это работает.

Стоит отметить также, что не во всех случаях простое случайное разделение датасета на части уместно: если речь идет о небольшом датасете, применяется так называемая Кросс-Валидация (Cross Validation): данные делят на k частей, и как бы попеременно используют каждую из них то в тестовых, то в валидационных целях, то как часть тренировочного компонента.

Для начала импортируем необходимые библиотеки:

-3

Создадим датасет-лилипут с помощью numpy.arange() – метод сгенерирует Переменные-предикторы (Predictor Variable) , ряд из десяти упорядоченных чисел с одинаковым интервалом, в данном случае, от 0 до 9. Метод reshape() сделает из полученного ряда матрицу 5 х 2, а встроенная Python-функция range() , отвечающая за целевую переменную, сгенерирует пять ярлыков Целевой переменной (Target Variable) y – числа от 0 до 4 включительно.

-4

Посмотрим, что мы "положили" в объект X:

-5

И в y , в свою очередь:

-6

Элегантная функция range() позволила нам сгенерировать вот такой ряд максимально кратко и без циклов, и это прекрасно:

-7

Теперь разделим наш датасет на тренировочную и тестовую части. Сниппет ниже – это пример обращения ко встроенной функции библиотеки train_test_split() . Мы имеем дело с размеченным датасетом, поскольку указываем переменные-предикторы X , и целевую переменную y . Размер тестовой части – 33% от общего размера датасета. random_state = 42 задает случайный характер разделения данных:

-8

В первую очередь, алгоритм функции выбирает тестовые 33% случайным образом:

-9

Треть данных – это всего две строки, когда речь идет о датасете 5 x 3:

-10

Вызовем тестовую часть данных целевой переменной – это Ярлыки (Label) двух рядов X_test :

-11

Ряды [2, 3], [8, 9] принадлежат классам 1 и 4 соответственно:

-12

Разделив датасет на четыре части, мы вызываем тренировочную часть предикторов:

-13

Этот компонент – остаток тренировочных данных после выборки 33% тестовых Наблюдений (Observation):

-14

Тоже самое для тренировочной части целевой переменной:

-15

y_train – это Ярлыки (Label), которые соответствуют порядковому номеру рядов X_train:

-16

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