R пакеты машинного обучения для работы с факторами с большим количеством уровней - PullRequest
11 голосов
/ 22 декабря 2011

Я пытаюсь сделать некоторые вещи машинного обучения, которые включают много переменных типа фактора (слова, описания, времена, в основном нечисловые вещи). Я обычно полагаюсь на randomForest, но он не работает с коэффициентами> 32.

Кто-нибудь может предложить несколько хороших альтернатив?

Ответы [ 3 ]

15 голосов
/ 22 декабря 2011

Методы дерева не будут работать, потому что количество возможных разбиений увеличивается экспоненциально с количеством уровней. Однако со словами это обычно решается путем создания индикаторных переменных для каждого слова (описания и т. Д.) - таким образом, для разбиений можно использовать слово за раз (да / нет) вместо выбора всех возможных комбинаций. В общем, вы всегда можете расширить уровни в индикаторы (и некоторые модели делают это неявно, например, glm). То же самое относится и к ML для обработки текста с помощью других методов, таких как SVM и т. Д. Таким образом, ответ может заключаться в том, что вам нужно думать о структуре входных данных, а не о методах. Кроме того, если у вас есть какой-то порядок на уровнях, вы можете линеаризовать его (таким образом, существует только c-1 разбиений).

5 голосов
/ 10 марта 2013

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

Может обрабатывать до 1024 уровней факторов.

Если существует более 1024 уровней, я обычно изменяю данные, сохраняя 1023 наиболее часто встречающихся факторных уровня, а затем кодирую оставшиеся уровни как один уровень.

3 голосов
/ 20 января 2013

В теории нет ничего плохого в использовании метода randomForest для переменных классов, которые имеют более 32 классов - это вычислительно дорого, но не невозможно обрабатывать любое количество классов с использованием методологии randomForest.Обычный R-пакет randomForest устанавливает 32 как максимальное количество классов для данной переменной класса и, таким образом, запрещает пользователю запускать randomForest для чего-либо с> 32 классами для любой переменной класса.

Линеаризация переменной является очень хорошим предложением - я использовал метод ранжирования классов, а затем равномерно разбил их на 32 мета-класса.Так что если на самом деле существует 64 разных класса, метакласс 1 состоит из всех вещей в классе 1 и 2 и т. Д. Единственная проблема здесь - это найти разумный способ ранжирования - и если вы работаете, скажем, сслова, очень трудно понять, как каждое слово должно быть ранжировано против любого другого слова.

Способом обойти это является создание n различных наборов предсказаний, где каждый набор содержит все экземпляры с любым конкретным подмножеством из 31 класса в каждой переменной класса с более чем 32 классами.Вы можете сделать прогноз, используя все наборы, а затем с помощью мер переменной важности, которые поставляются с пакетом, найти реализацию, где используемые классы были наиболее прогнозирующими.После того, как вы обнаружили 31 наиболее прогнозирующих классов, внедрите новую версию RF, используя все данные, которые обозначают эти наиболее прогнозирующие классы от 1 до 31, а все остальное в «другом» классе, предоставляя вам максимум 32 класса длякатегориальная переменная, но, надеюсь, сохраняющая большую часть предсказательной силы.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...