Сокращение количества уровней неупорядоченной категориальной предикторной переменной

11

Я хочу обучить классификатор, скажем SVM, или случайный лес, или любой другой классификатор. Одной из функций в наборе данных является категориальная переменная с 1000 уровнями. Каков наилучший способ уменьшить количество уровней в этой переменной. В R есть функция, называемая combine.levels()в пакете Hmisc , которая объединяет нечастые уровни, но я искал другие предложения.

sabunime
источник
Категориальная переменная неупорядочена? Примерно сколько у вас дел? Каково распределение частот по категориальной переменной?
Джером Энглим
Уровни не упорядочены. У меня есть около 10000 наблюдений. Распределение частот выглядит следующим образом: уровень А появляется примерно в 11% наблюдений. Уровень B появляется в 8%. Уровень с появляется в 5%. Около 15 из этих уровней покрывают 50% наблюдений в наборе данных.
Сабуниме

Ответы:

9

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

Есть две простые вещи, чтобы попробовать, если ваши уровни являются порядковыми:

  1. Бен их. Например, 0 = (0 250), 1 = (251 500) и т. Д. Возможно, вы захотите выбрать пределы, чтобы в каждой корзине было одинаковое количество элементов.
  2. Вы также можете взять лог-преобразование уровней. Это сократит диапазон вниз.

Если уровни не являются порядковыми, вы можете кластеризовать уровни на основе других функций / переменных в вашем наборе данных и заменить идентификаторы кластера для предыдущих уровней. Существует так много способов сделать это, как и алгоритмов кластеризации, поэтому поле широко открыто. Когда я это читаю, это то, что combine.levels()мы делаем. Вы можете сделать то же самое, используя kmeans()или prcomp(). (Вы могли / должны впоследствии обучить классификатор, чтобы предсказывать кластеры для новых точек данных.)

детеныш
источник
3
Я не знаю действительно хорошего способа справиться с этим, кроме как рассматривать категориальную переменную как случайный эффект. Вы можете эмулировать это с помощью квадратичного (ребристого) процесса штрафования для переменной. Моя книга по стратегии регрессионного моделирования и примечания к курсам входят в это.
Фрэнк Харрелл
1
@FrankHarrell На ум приходят два подхода: анализ скрытых переменных POlytomous будет один (cran.r-project.org/web/packages/poLCA/poLCA.pdf), анализ соответствия - другой (например, statmethods.net/advstats/ca. HTML).
Майк Хантер