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

Пример. Мы создаем модель, предсказывающую потребление электроэнергии в городе. Если на тренировочных данных она, подобно человеческому мозгу, учится видеть скачки потребления электричества, то на тестовой Дата-сайентист (Data Scientist) проверяет качество обучения.
Тестовую часть информации используют в качестве золотого стандарта для сравнения различных конкурирующих моделей (например, на соревнованиях Kaggle). Наивысший результат во время такого теста и определяет наиболее эффективную модель. Набор для тестирования обычно формируется случайным способом и содержит Наблюдения (Observation) различных классов, с которыми может столкнуться модель при использовании в реальном мире.
Тестовые данные и Scikit-learn
Библиотека Scikit-learn предлагает беспрецедентно минималистичный синтаксис встроенной функции train_test_split()
, позволяющий разделить датасет на тренировочную и тестовую части за одну строку кода. Посмотрим, как это работает.
Стоит отметить также, что не во всех случаях простое случайное разделение датасета на части уместно: если речь идет о небольшом датасете, применяется так называемая Кросс-Валидация (Cross Validation): данные делят на k частей, и как бы попеременно используют каждую из них то в тестовых, то в валидационных целях, то как часть тренировочного компонента.
Для начала импортируем необходимые библиотеки
import numpy as np
import sklearn
from sklearn.model_selection import train_test_split
Создадим датасет-лилипут с помощью numpy.arange()
– метод сгенерирует Переменные-предикторы (Predictor Variable), ряд из десяти упорядоченных чисел с одинаковым интервалом, в данном случае, от 0 до 9. Метод reshape()
сделает из полученного ряда матрицу 5 х 2, а встроенная Python-функция range()
, отвечающая за целевую переменную, сгенерирует пять ярлыков Целевой переменной (Target Variable) y – числа от 0 до 4 включительно.
X, y = np.arange(10).reshape((5, 2)), range(5)
X
Посмотрим, что мы "положили" в объект X
:
array([[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9]])
И в y
, в свою очередь:
list(y)
Элегантная функция range()
позволила нам сгенерировать вот такой ряд максимально кратко и без циклов, и это прекрасно:
[0, 1, 2, 3, 4]
Теперь разделим наш датасет на тренировочную и тестовую части. Сниппет ниже – это пример обращения ко встроенной функции библиотеки train_test_split()
. Мы имеем дело с размеченным датасетом, поскольку указываем переменные-предикторы X
, и целевую переменную y
. Размер тестовой части – 33% от общего размера датасета. random_state = 42
задает случайный характер разделения данных:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.33, random_state = 42)
В первую очередь, алгоритм функции выбирает тестовые 33% случайным образом:
X_test
Треть данных – это всего две строки, когда речь идет о датасете 5 x 3:
array([[2, 3],
[8, 9]])
Вызовем тестовую часть данных целевой переменной – это Ярлыки (Label) двух рядов X_test
:
y_test
Ряды [2, 3], [8, 9]
принадлежат классам 1 и 4 соответственно:
[1, 4]
Разделив датасет на четыре части, мы вызываем тренировочную часть предикторов:
X_train
Этот компонент – остаток тренировочных данных после выборки 33% тестовых Наблюдений (Observation):
array([[4, 5],
[0, 1],
[6, 7]])
Тоже самое для тренировочной части целевой переменной:
y_train
y_train
– это Ярлыки (Label), которые соответствуют порядковому номеру рядов X_train:
[2, 0, 3]
Ноутбук, не требующий дополнительной настройки на момент написания статьи, можно скачать здесь.
Фото: @editholic7