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