Кажется, вы понимаете, что вы можете иметь n
уровни, а не n-1
потому, что в отличие от линейной регрессии вам не нужно беспокоиться о совершенной колинеарности.
(Я подхожу к этому с точки зрения R, но я предполагаю, что в Python то же самое.) Это зависит от нескольких моментов, таких как: 1) какой пакет вы используете и 2) сколько у вас уровней факторов.
1) Если вы используете randomForest
пакет R , то если у вас <33 факторных уровня, вы можете оставить их в одной функции, если хотите. Это связано с тем, что в реализации случайного леса R он будет проверять, какие уровни факторов должны быть на одной стороне разделения, а какие на другой (например, 5 ваших уровней могут быть сгруппированы на левой стороне, а 7 могут быть сгруппированы вместе справа). Если вы разделите категорический признак на n
пустышки, то алгоритм не будет иметь этой опции в своем распоряжении.
Очевидно, что если конкретный пакет, который вы используете, не может обрабатывать категориальные функции, вам просто нужно создать n
фиктивные переменные.
2) Как я упоминал выше, реализация случайного леса R может обрабатывать только 32 факторных уровня - если у вас их больше, вам нужно либо разделить ваши факторы на меньшие подмножества, либо создать фиктивную переменную для каждого уровня.
randomForest
кодируются автоматически, я должен пойти сn
пустышками, потому что коллинеарность не проблема для RF?sklearn
... Практически говоря, есть ли доказательства (практический опыт, исследования и т. Д.), Что «дублированные» переменные будут работать хуже, чем «сгруппированные» категориальные переменные [в R]Существует другой подход к работе с категориальными переменными, который называется целевым / ударным кодированием.
В этой схеме идея заключается в кодировании объекта с использованием одного столбца с плавающей точкой, в котором значение является средним значением целевой переменной по всем строкам, которые разделяют категорию. Это особенно полезно для моделей на основе дерева, поскольку оно накладывает порядок порядка внутри объекта (т. Е. Значения справа от категории имеют более высокий средний отклик, чем значения слева), и это облегчает разделение пространства предиктора.
Вот хорошее объяснение предмета:
https://towardsdatascience.com/why-you-should-try-mean-encoding-17057262cd0
А вот ссылка на документ, в котором изначально была предложена кодировка: http://helios.mm.di.uoa.gr/~rouvas/ssi/sigkdd/sigkdd.vol3.1/barreca.pdf
Есть еще некоторые подробности, чтобы избежать оценки среднего значения в категориях с низким количеством, а также есть другая модель, CatBoost, предлагающая решение смещения, представленного этим кодированием, но по моему опыту это простой и очень полезный способ кодирования категориальных переменных с высокой кардинальностью. ,
источник