Многие алгоритмы обучения либо изучают один вес для каждой функции, либо используют расстояния между выборками. Первое относится к линейным моделям, таким как логистическая регрессия, которые легко объяснить.
Предположим, у вас есть набор данных, содержащий только одну категориальную характеристику «национальность» со значениями «Великобритания», «Французский» и «США». Предположим, без потери общности, что они закодированы как 0, 1 и 2. Затем у вас есть вес w для этой функции в линейном классификаторе, который примет какое-то решение на основе ограничения w × x + b> 0 , или, что то же самое, w × x <b.
Проблема в том, что вес w не может кодировать трехсторонний выбор. Три возможных значения w × x: 0, w и 2 × w. Либо эти три варианта приводят к одному и тому же решению (все они <b или ≥b), либо «Великобритания» и «французский язык» приводят к одному и тому же решению, либо «французы» и «США» принимают одно и то же решение. Модель не может узнать, что «Великобритания» и «США» должны иметь один и тот же ярлык, а «французский» - лишний.
Посредством однократного кодирования вы эффективно увеличиваете пространство функций до трех функций, каждая из которых получит свой собственный вес, поэтому функция принятия решения теперь будет w [UK] x [UK] + w [FR] x [FR] + w [US] x [US] <b, где все x являются логическими. В этом пространстве такая линейная функция может выражать любую сумму / дизъюнкцию возможностей (например, «Великобритания или США», что может быть предиктором для говорящего по-английски).
Точно так же любой учащийся, основанный на стандартных показателях расстояния (например, k-ближайших соседей) между выборками, запутается без однократного кодирования. При наивном кодировании и евклидовом расстоянии расстояние между французским и американским языками равно 1. Расстояние между США и Великобританией равно 2. Но при однократном кодировании попарные расстояния между [1, 0, 0], [0, 1 , 0] и [0, 0, 1] все равны √2.
Это верно не для всех алгоритмов обучения; деревья решений и производные модели, такие как случайные леса, если достаточно глубокие, могут обрабатывать категориальные переменные без однократного кодирования.
Что касается увеличения возможностей за счет однократного горячего кодирования, можно использовать хеширование функций. Когда вы выполняете хеширование, вы можете указать, чтобы количество сегментов было намного меньше количества новых функций.
источник
Когда вы хотите предсказать категории, вы хотите предсказать элементы набора. Отказ от однократного кодирования сродни тому, что категории имеют соседние категории (например, если вместо этого вы выполнили регрессию с целыми числами категорий), организованные определенным образом и в определенном порядке.
Теперь, что произойдет, если вы назначите категорию 0 на 0, категорию 1 на 1 и категорию 2 на 2 без однократного кодирования, и что прогноз вашего алгоритма не уверен, должен ли он выбрать 0 или 2: должен ли он прогнозировать 1, несмотря на он думает либо 0, либо 2?
Вы видите, куда он идет. То же самое и с вашими входными данными: если они не должны быть соседями, то не показывайте их вашему алгоритму как соседей.
источник