One-hot encoding
Зачем это нужно? Многие модели, от линейной регрессии до нейросетей, умеют работать только с числами. Если мы просто присвоим категориям номера 1, 2, 3, алгоритм решит, что между ними есть порядок и расстояние: «кошка» (1) ближе к «собаке» (2), чем к «попугаю» (3). Это бессмысленно и искажает выводы. One-hot encoding лишает категории ложной иерархии, превращая каждую в отдельное измерение.
Как это работает интуитивно? Допустим, у нас есть столбец «цвет» с тремя значениями: красный, зелёный, синий. Вместо одного столбца мы создаём три новых: «красный», «зелёный», «синий». Для красного объекта запишем 1 в столбец «красный» и 0 в остальные. Для зелёного — 1 в «зелёный», и так далее. Вектор получается разреженным: почти все нули и одна единица. Это похоже на кодирование маршрута: из трёх возможных дорог мы отмечаем только ту, по которой поехали.
Прикладной пример: сервис доставки хочет предсказать, приедет ли заказ вовремя. В данных есть поле «город»: Москва, Питер, Казань. Модель не понимает слова, поэтому one-hot encoding превращает город в три бинарных признака. Для заказа из Москвы вектор будет [1, 0, 0], из Питера [0, 1, 0]. Алгоритм по тренировочным примерам учится: при единице в «Москва» риск опоздания выше, чем при единице в «Казань». При этом модель не думает, что Москва «больше» или «лучше» Питера — просто разные признаки.
Вывод: one-hot encoding — незаменимый инструмент для работы с категориальными данными. Он сохраняет информацию без ложных числовых отношений, хотя и увеличивает размерность. Это простой, надёжный и понятный способ объяснить машине, что «яблоки» и «груши» — это просто разные вещи, а не ступеньки одной лестницы.
Поделиться