Data Preprocessing
Предобработка данных преобразует исходные таблицы, текст и изображения в чистые, масштабированные данные фиксированного формата, ожидаемого моделью. Разбираем распространённые этапы, правила против утечки и код.
Предобработка данных — это набор преобразований, которые превращают исходные данные в чистый числовой формат с единообразной структурой, ожидаемый моделью машинного обучения (ML); эти преобразования одинаково применяются при обучении и инференсе. Для табличных данных это означает обработку пропущенных значений, преобразование категорий в числа и масштабирование признаков. Для изображений — декодирование файлов, изменение их размера до входного размера сети, упорядочивание цветовых каналов и масштабирование значений пикселей. Предобработка фактически является частью модели: сеть, обученная на изображениях RGB со значениями в диапазоне 0–1, выдаёт ненадёжные предсказания, получая изображения BGR со значениями от 0 до 255, даже если её веса не изменились.
Основные этапы предобработки#
- Очистка данных: Удаление дубликатов, повреждённых файлов и недопустимых значений, а также исправление несогласованных меток или единиц измерения.
- Импутация: Заполнение пропущенных значений статистической величиной, например медианой столбца, оценкой модели или отдельной категорией «пропущено», либо удаление строк со слишком большим количеством пропусков.
- Кодирование: Преобразование категорий в числа: унитарное кодирование для неупорядоченных категорий, например цветов, порядковые коды для упорядоченных категорий, например размеров, и целочисленные индексы для названий классов.
- Масштабирование и нормализация: При масштабировании по минимуму и максимуму признак приводится к диапазону 0–1, а при стандартизации из него вычитают среднее и делят результат на стандартное отклонение. Благодаря этому в моделях, основанных на расстояниях, признак, измеренный в миллиметрах, не подавляет признак, измеренный в метрах, а градиентный спуск сходится быстрее. Многие предварительно обученные на ImageNet модели в torchvision ожидают, что каждый RGB-канал стандартизован со средними значениями 0.485, 0.456 и 0.406 и стандартными отклонениями 0.229, 0.224 и 0.225.
- Изменение размера: Приведение каждого изображения к входному размеру сети: растяжением, центральной обрезкой или размещением в рамке с полями, когда изображение масштабируют, чтобы оно поместилось, а остаток заполняют полями — так объекты сохраняют пропорции.
- Токенизация: Разбиение текста на токены и сопоставление каждому из них целочисленного идентификатора из фиксированного словаря.
Для конкретных предметных областей добавляются специализированные этапы. Для компьютерной томографии используют оконное преобразование: диапазон единиц Хаунсфилда, например диапазон, выделяющий лёгочную ткань, преобразуют в интенсивности изображения, которые получает модель. Аудио пересчитывают до фиксированной частоты дискретизации и часто преобразуют в спектрограмму.
Настраивай на обучающих данных, применяй ко всем#
Статистики, используемые при предобработке, например средние значения и стандартные отклонения признаков, значения для импутации и словари категорий, вычисляют только на обучающей выборке, сохраняют, а затем без изменений применяют к валидационным, тестовым данным и данным из рабочей среды. Если вычислить их для всего набора данных до разделения, информация из тестовой выборки повлияет на обучающие входные данные. Это разновидность утечки данных, которая завышает результаты оценки. Конвейер scikit-learn обеспечивает соблюдение этого правила: этапы предобработки настраиваются только на данных, переданных в fit. Разная предобработка во время обслуживания модели — например, другой метод изменения размера или декодер изображений — приводит к несоответствию между обучением и обслуживанием: модель показывает хорошие результаты при офлайн-оценке и хуже работает в рабочей среде.
Предобработка изображений для моделей компьютерного зрения#
Моделям изображений нужен фиксированный формат тензора. OpenCV декодирует изображения в массивы целых чисел размером 8 бит с порядком осей высота × ширина × канал и порядком каналов BGR, а сети PyTorch ожидают пакеты вещественных тензоров в порядке RGB с каналами на первом месте. Предсказание YOLO26 в Ultralytics автоматически выполняет такие шаги: изменяет размер каждого изображения так, чтобы его длинная сторона соответствовала imgsz — по умолчанию 640 пикселям — и при этом не искажает изображение; для моделей с фиксированной формой входа, экспортированных моделей, добавляет серые пиксели со значением 114, чтобы получить квадрат 640 × 640, а для моделей PyTorch дополняет размеры только до ближайшего значения, кратного шагу 32 пикселя; меняет порядок каналов BGR на RGB, переставляет оси массива так, чтобы каналы были на первом месте, и делит значения на 255. Скрипт ниже выполняет квадратное размещение в рамке с полями вручную с помощью OpenCV и NumPy:
import urllib.request
import cv2
import numpy as np
# Download a sample photo and read it as a BGR uint8 array of shape (height, width, 3)
urllib.request.urlretrieve("https://ultralytics.com/images/bus.jpg", "bus.jpg")
image = cv2.imread("bus.jpg")
# Resize so the longer side is 640 pixels, keeping the aspect ratio
scale = 640 / max(image.shape[:2])
resized = cv2.resize(image, None, fx=scale, fy=scale, interpolation=cv2.INTER_LINEAR)
# Letterbox: center the resized image on a 640x640 canvas of gray (114) padding
canvas = np.full((640, 640, 3), 114, dtype=np.uint8)
top, left = (640 - resized.shape[0]) // 2, (640 - resized.shape[1]) // 2
canvas[top : top + resized.shape[0], left : left + resized.shape[1]] = resized
# Reorder BGR to RGB and HWC to CHW, scale pixels to 0-1, and add a batch dimension
tensor = canvas[:, :, ::-1].transpose(2, 0, 1).astype(np.float32) / 255.0
batch = tensor[None]
print(f"{image.shape} uint8 -> {batch.shape} float32 in [{batch.min():.1f}, {batch.max():.1f}]")Скрипт выводит (1080, 810, 3) uint8 -> (1, 3, 640, 640) float32 in [0.0, 1.0]: фотография размером 1080 × 810 превращается в пакет из одного изображения с форматом и диапазоном значений, ожидаемыми детектором PyTorch; по бокам остаются серые полосы шириной 80 пикселей.
Предобработка данных и смежные понятия#
- Разметка данных: Создание эталонных целевых данных, например классов и рамок, которые предобработка затем преобразует в числовой формат, считываемый при обучении.
- Конструирование признаков: Создание новых входных переменных на основе знаний о предметной области, например вычисление индекса массы тела по столбцам роста и веса.
- Пакетная нормализация: Слой внутри сети, который стандартизует промежуточные активации при обучении и инференсе. Входная нормализация при предобработке выполняется один раз до того, как данные поступят в сеть.
- Аугментация данных: Случайные преобразования, например отражения, сдвиги цветов и мозаики, которые применяются только при обучении для создания разнообразных копий каждого примера. Предобработка детерминирована и одинакова при обучении и инференсе.










