Почему одна горячая кодировка улучшает производительность машинного обучения?

127

Я заметил, что когда кодирование One Hot используется для определенного набора данных (матрицы) и используется в качестве обучающих данных для алгоритмов обучения, оно дает значительно лучшие результаты в отношении точности предсказания по сравнению с использованием самой исходной матрицы в качестве обучающих данных. Как происходит это повышение производительности?

maheshakya
источник

Ответы:

260

Многие алгоритмы обучения либо изучают один вес для каждой функции, либо используют расстояния между выборками. Первое относится к линейным моделям, таким как логистическая регрессия, которые легко объяснить.

Предположим, у вас есть набор данных, содержащий только одну категориальную характеристику «национальность» со значениями «Великобритания», «Французский» и «США». Предположим, без потери общности, что они закодированы как 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.

Это верно не для всех алгоритмов обучения; деревья решений и производные модели, такие как случайные леса, если достаточно глубокие, могут обрабатывать категориальные переменные без однократного кодирования.

Фред Фу
источник
4
Спасибо за это, Ларс, но когда мы выполняем кодирование OneHotEncoding, которое эффективно увеличивает количество функций, разве нам не нужно также увеличивать количество сэмплов, чтобы убедиться, что они не перекрываются.
Manoj
@Manoj По сравнению с очевидным альтернативным представлением категориальных переменных, кодирующим каждый уровень как отдельное целое число, я не думаю, что это имеет значение: вам в любом случае нужна достаточная статистика.
Фред Фу,
7
Есть ли какая-нибудь литература, на которую вы могли бы указать, чтобы я мог прочитать это дальше? Спасибо.
Доктор Ноуиталл
1
Есть ли преимущество в использовании неполной матрицы рангов (чего вы не стали бы делать при построении обычной статистической модели) при использовании таких методов машинного обучения, как ускорение?
Steve S
2
На мой взгляд, это похоже на то, что статистик назвал бы «фиктивными переменными». Но, возможно, есть небольшая экономия места для хранения.
Soldalma
3

Что касается увеличения возможностей за счет однократного горячего кодирования, можно использовать хеширование функций. Когда вы выполняете хеширование, вы можете указать, чтобы количество сегментов было намного меньше количества новых функций.

user3764384
источник
0

Когда вы хотите предсказать категории, вы хотите предсказать элементы набора. Отказ от однократного кодирования сродни тому, что категории имеют соседние категории (например, если вместо этого вы выполнили регрессию с целыми числами категорий), организованные определенным образом и в определенном порядке.

Теперь, что произойдет, если вы назначите категорию 0 на 0, категорию 1 на 1 и категорию 2 на 2 без однократного кодирования, и что прогноз вашего алгоритма не уверен, должен ли он выбрать 0 или 2: должен ли он прогнозировать 1, несмотря на он думает либо 0, либо 2?

Вы видите, куда он идет. То же самое и с вашими входными данными: если они не должны быть соседями, то не показывайте их вашему алгоритму как соседей.

Гийом Шевалье
источник