Проблемы с горячим кодированием и фиктивным кодированием


11

Мне известен тот факт, что категориальные переменные с k уровнями должны кодироваться с помощью k-1 переменных в фиктивном кодировании (аналогично для многозначных категориальных переменных). Мне было интересно, сколько проблем делает одноразовое кодирование (то есть использование вместо этого k переменных) вместо фиктивного кодирования для различных методов регрессии, в основном, линейной регрессии, штрафной линейной регрессии (Lasso, Ridge, ElasticNet), на основе дерева (случайные леса). Машины градиентного повышения).

Я знаю, что при линейной регрессии возникают проблемы с множественной коллинеарностью (хотя на практике я использовал линейную регрессию с использованием ОНЭ без каких-либо проблем).

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

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


10
Я утверждаю, что неправильно различать два. Фиктивные переменные и переменные типа one-hot являются полными синонимами. Первый термин старше и основан на статистике, а второй - моложе и связан с машинным обучением. Третий и более формальный синоним - это контрастные переменные типа индикатора . Вопрос о том, использовать ли все k или k-1 нередуцируемые переменные в наборе таких элементарных переменных, не имеет ничего общего с этой терминологией и зависит от типа анализа и от конкретного алгоритма или программы.
ttnphns

2
(продолжение) Например, программное обеспечение регрессии, как правило, не позволяет вводить все k из-за сингулярности, но эквивалентное общее программное обеспечение для линейного моделирования может позволить это, поскольку оно использует псевдообратный подход.
ttnphns

1
Я с @ttnphns, оба это просто ужасные имена. Я предпочитаю полное кодирование и кодирование без изменений .
Мэтью Друри

2
Извиняюсь за терминологию, это стандартные термины, которые я видел, используемые практикующими специалистами (и аналогично ориентированные книги). Проблема коллинеарности появляется только в линейных (непенализованных моделях)? Не все программное обеспечение останавливает ввод всех k (например, scikit-learn в Python, поправьте меня, если я ошибаюсь)
user90772

@MatthewDrury Одной из моих любимых мозолей являются дублирующие термины / фразы, попадающие в область статистического анализа, такие как «кодирование в одно касание» и «A / B-тестирование». Каждый должен придерживаться старого «фиктивного кодирования» и «проверки гипотез», чтобы избежать путаницы.
RobertF

Ответы:


7

Проблема с представлением категориальной переменной, которая имеет уровней с k переменными в регрессии, состоит в том, что, если модель также имеет постоянный член, то члены будут линейно зависимыми, и, следовательно, модель будет неидентифицируемой. Например, если модель µ = a 0 + a 1 X 1 + a 2 X 2 и X 2 = 1 - X 1 , то любой выбор ( β 0 , β 1 , β 2 )ККμ=a0+a1Икс1+a2Икс2Икс2знак равно1-Икс1(β0,β1,β2)вектора параметров неотличим от . Поэтому, хотя программное обеспечение может дать вам оценку этих параметров, они не определены однозначно и, следовательно, вероятно, не будут очень полезными.(β0+β2,β1-β2,0)

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

Эффект избыточного кодирования для дерева решений (или множества деревьев), вероятно, будет приводить к избыточному весу рассматриваемого признака по сравнению с другими, поскольку он представлен с избыточной избыточной переменной и поэтому будет выбираться чаще, чем в противном случае расщепляется.


1
Я не думаю, что есть какая-либо причина включать перехват в дереве или в ансамбле деревьев. Я считаю, что это особенность моделей линейного типа. Поэтому для моделей на основе дерева, я думаю, правильная идея - не перехват, а полное кодирование.
Мэтью Друри

@ MatthewDrury Я думаю, что вы правы насчет перехвата, но даже тогда для дерева избыточное кодирование кажется ограниченным. Например, если функция является бинарной, в чем разница между разбиением в первом классе и разбиением во втором классе? Ничего, насколько я могу судить.
Кодиолог

Это правда, но я думаю, что сохранение полной симметрии - это самый простой способ сохранить все очевидно справедливым и интерпретируемым.
Мэтью Друри

1

У кодиолога был отличный ответ (+1). Методы горячего кодирования и фиктивного кодирования одинаковы, с точки зрения дизайна матрицы находятся в одном и том же пространстве с разным основанием. (хотя у горячего кодирования больше столбцов)

Поэтому, если вы сосредоточены на точности, а не на интерпретации. Два метода кодирования не имеют значения.


1
Для того, чтобы быть педантичным, версия с одним обновлением не является основой (потому что она линейно зависима); это просто занимает то же место. Но вы уверены, что кодирование не имеет значения для точности? В частности, в случае наказанной регрессии, я думаю, что окончательно выбранная модель будет делать разные прогнозы.
Кодиолог

@ Kodiologist спасибо за поправку меня на основании вопроса.
Haitao Du

@ Кодиолог, почему точность будет отличаться в регуляризованном линейном методе?
Haitao Du

4
В регуляризованной регрессии вы всегда должны использовать полную кодировку (то есть не оставлять одно слово, я не могу сохранить имена, которые вы использовали, и предпочитаю не использовать их самостоятельно). Это связано с тем, что перехват не наказывается, поэтому, если вы делаете вывод о том, что уровень не является частью перехвата, трудно сказать, что вы штрафуете все уровни одинаково. Вместо этого всегда включайте все уровни, чтобы каждый был симметричным относительно штрафа.
Мэтью Друри

1
@ Мэтью Друри, спасибо за этот последний комментарий. Не могли бы вы расширить его в ответе? Так что это только для простой линейной регрессии, где фиктивное кодирование необходимо?
user90772

1

Я чувствую , что лучший ответ на этот вопрос утопает в комментариях @MatthewDrury, в котором говорится , что есть разница , и что вы должны использовать , казалось бы , избыточный столбец в любом регуляризованном подходе. @ MatthewDrury рассуждения

[В регуляризованной регрессии], перехват не штрафуется, поэтому, если вы делаете вывод о том, что уровень не является частью перехвата, трудно сказать, что вы штрафуете все уровни одинаково. Вместо этого всегда включайте все уровни, чтобы каждый был симметричным относительно штрафа.

Я думаю, что у него есть точка.


Таким образом, вы должны горячо закодировать переменную с kуровнями или с k-1уровнями в зависимости от ситуации. В дополнение к вашему заявлению (регламентированному / не регламентированному), будут ли рекомендации о том, что делать во всех случаях?
Дэн Чалтиэль

Мое правило: если нет регуляризации, как в классическом ANOVA, используйте уровни k-1. Если есть регуляризация, как в байесовских методах или регрессии с регуляризацией L2, используйте k уровней.
Бен Огорек
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.