Быстрое кодирование (One-Hot Encoding)

Быстрое кодирование (One-Hot Encoding) – процесс, с помощью которого категориальные переменные преобразуются в подходящую алгоритмам Машинного обучения (ML) форму.
Первое, что вы делаете при создании любой Модели (Model), – это, как правило, предварительная подготовка данных (Data Preparation). Мы еще не достигли такого уровня ИИ, чтобы просто передать модели таблицу и ожидать точных предсказаний.
Большая часть предварительной обработки – это кодирование в понятный компьютеру язык чисел. Отсюда и название 'encode', что буквально означает «преобразовать в [компьютерный] код». Существует множество различных способов кодирования, таких как Ярлычное (Label Encoding) или Быстрое кодирование.
Предположим, мы работаем с категориальными данными (кошки и собаки):

Легко догадаться, что столбец "Категория" представляет в виде чисел столбец "Вид", и кодирование просто означает присвоение числа 1 собакам, а 2 – кошкам. Получив числа, компьютер теперь может их обработать. Но есть проблема: числа имеют естественные упорядоченные отношения (3 > 1), и это дает бо́льшим числам бо́льший вес.
Пример. Представьте, что у вас есть 3 категории продуктов: яблоки, курица и брокколи. Используя Ярлычное кодирование, вы должны присвоить каждому из них номер, чтобы разделить на категории: яблоки – 1, курица – 2 и брокколи – 3. Теперь, если Вашей модели предстоит рассчитать среднее арифметическое (Mean), она по умолчанию сделает так: 1+ 3 = 4/2 = 2. В соответствии с Вашей моделью, нечто среднее между яблоками и курицей – это брокколи. Обнаруженные корреляции будут совершенно неверны.
Вместо того, чтобы обозначать вещи целыми положительными числами (1..3), мы воспользуемся бинарным стилем категоризации, 'One-Hot' – это как раз про это. Визуализируем разницу между ярлыком и Быстрым кодированием. Акцентируйте внимание на разнице:

Наши категории раньше были строками, теперь они столбцы. Однако наш числовой признак (Feature) – калории, остался прежним. Ячейка A2 ('1') таблицы справа сообщит компьютеру категорию продукта правильным способом.
Этот способ не всегда лучше Ярлычного кодирования, хотя бы потому, что является низкоэффективным способом хранения данных (число столбцов резко увеличивается). Просто у него своя специализация.
OneHotEncoder
Посмотрим, как Дата-сайентисты (Data Scientist) научились мгновенно выполнять Быстрое кодирование:
import numpy as np
import pandas as pd
Импортируем Датасет (Dataset):
df = pd.read_csv('https://www.dropbox.com/s/orj5fgqzqsgsi87/googleplaystore.csv?dl=1')
df.head()
Это датасет приложений с Google Play Store, включающий название, категорию, рейтинг, стоимость и прочие параметры.

Для простоты восприятия опустим все столбцы, кроме автоиндекса, названия и категории ('CATEGORY'):
df = df.drop(columns=['Rating', 'Reviews', 'Size', 'Installs', 'Installs', 'Type', 'Price', 'Content Rating', 'Genres', 'Last Updated', 'Current Ver', 'Android Ver'])
df.head()

Теперь займемся кодированием. Используем встроенный метод get_dummies(), чтобы получить такую же таблицу, как и в примере с пищей:
s = pd.Series(df.Category)
pd.get_dummies(s)

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