Случайный лес на многоуровневых / иерархически структурированных данных


13

Я довольно новичок в машинном обучении, методиках CART и тому подобном, и я надеюсь, что моя наивность не слишком очевидна.

Как случайный лес обрабатывает многоуровневые / иерархические структуры данных (например, когда интерес представляет межуровневое взаимодействие)?

То есть наборы данных с единицами анализа на нескольких иерархических уровнях ( например , ученики, вложенные в школы, с данными как о учениках, так и о школах).

В качестве примера рассмотрим многоуровневый набор данных с отдельными лицами на первом уровне ( например , с данными о поведении при голосовании, демографией и т. Д.), Вложенными в страны на втором уровне (с данными на уровне страны; например , по населению):

ID voted age female country population
1 1 19 1 1 53.01
2 1 23 0 1 53.01
3 0 43 1 1 53.01
4 1 27 1 1 53.01
5 0 67 0 1 53.01
6 1 34 1 2 47.54
7 0 54 1 2 47.54
8 0 22 1 2 47.54
9 0 78 0 2 47.54
10 1 52 0 2 47.54

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

Подзапросы: Может ли Random Forest каким-то образом явно обработать этот тип структуры данных? Если используется независимо от того, какой уклон это вводит? Если Случайный Лес не подходит, есть ли другой метод ансамблевого типа?

(Вопрос Случайный лес на сгруппированных данных , возможно, похож, но на самом деле не отвечает.)


Привет @MikaelAndersson, вы нашли решение поставленных вопросов? Я сталкиваюсь с подобной ситуацией и надеюсь услышать ваш опыт. Благодарю.
NoviceProg

Ответы:


4

Случайные леса будут работать нормально, но вы должны быть очень осторожны при настройке гиперпараметров (особенно если вы хотите реалистичный показатель производительности обобщения). Традиционные оценки ошибок OOB будут намного оптимистичнее, поскольку в ваших данных наблюдается безудержное «двойникование».

Чтобы получить правильные оценки настройки и обобщения, вам необходимо понять, каковы характеристики любых новых данных, с которыми вы ожидаете столкнуться. Если вы хотите экстраполировать на новые страны, то вам нужно настроить какой-либо способ повторной выборочной настройки (такой как перекрестная проверка по k-кратному критерию), который делает стратифицированную выборку по странам.

Вы также должны быть осторожны при кодировании данных в случайный лес. Похоже, что countryэто категориальная переменная. Вводить это как цифру было бы немного грубо, но не безнадежно (особенно если вы заказали идентификаторы чем-то полезным).


Не могли бы вы немного рассказать, почему оценки ошибок OOB будут слишком оптимистичными?
dmartin

2
Я полагаю, что их оптимизм зависит от того, как могут выглядеть новые данные. Если новые данные поступают из других стран, то этот случайный лес, скорее всего, не будет работать так же хорошо, как указывают его ошибки OOB. Это связано с тем, что ошибки OOB по-прежнему поступают, например, из выборок из того же набора округов.
Ши Паркс

3

На самом деле я работаю над пакетом R, который запускает randomForest в качестве локального классификатора по заранее определенной иерархии классов. Пакет можно найти в R Forge в разделе «hie-ran-forest». Пакет уже работает, хотя он не проходит ни одного из испытаний крана (для MAC), я точно не знаю, почему. Помимо фактического запуска randomForest для каждого родительского узла в иерархии, пакет также содержит функции прогнозирования и функции производительности. Одна из мер производительности фактически учитывает иерархическую структуру классов.

Пакет обращается к межуровневому взаимодействию, сначала запустив случайный лес в качестве локального классификатора на каждом родительском узле иерархии классов. Затем функция прогнозирования извлекает долю голосов «вне сумки», которую каждый случай получил в каждом локальном классификаторе. Затем есть два способа превратить пропорцию голосов в четкую классификацию: 1. правило пошагового большинства - начните с локального классификатора, ближайшего к корню дерева, и выберите дочернего элемента этого классификатора, который получил наибольшую долю голосов. Затем посмотрите на всех дочерних элементов выбранного узла и снова выберите дочерний элемент, получивший наибольшую долю голосов в соответствующем локальном классификаторе. Продолжайте, пока не будет достигнут конечный узел. 2.

Мультипликативная пропорция голосов сопоставима с долей голосов, полученных с помощью обычной случайной оценки.


2
Можете ли вы уточнить, что ваш пакет адресован "межуровневым взаимодействиям", и если да, то как он это делает? Просто сказать, что пакет существует, не так уж много ответа (я не хочу быть здесь слишком критичным, но CV ищет создание постоянного хранилища высококачественной информации по ML, а тот факт, что пакет существует, не вполне соответствует этому стандарту.)
бандит - восстановите Монику

Обратите внимание, что ваше имя пользователя со ссылкой на вашу страницу автоматически прикрепляется к каждому сообщению, которое вы здесь делаете. Таким образом, нет необходимости подписывать свои сообщения - на самом деле, мы предпочитаем, чтобы вы этого не делали. Если вы хотите, чтобы люди могли с вами связаться, вы можете опубликовать метод (например, ваш адрес электронной почты) на своей странице пользователя.
gung - Восстановить Монику

Это здорово, спасибо @YoniGavish. Почему бы не отредактировать свой ответ и не добавить эту информацию в него?
gung - Восстановить Монику

Это лучше @gung?
Йони Гавиш

Да, это сделает, @YoniGavish, +1. Добро пожаловать на сайт.
gung - Восстановить Монику

3

В одном дереве классификации эти группы кодируются так же, как и любая другая категориальная переменная. Это часто делается либо в виде двоичного кода, либо просто с использованием целого числа. Есть разные аргументы для использования либо. В случайных лесах, если вы используете двоичное кодирование, некоторые группы будут включены / исключены для любого данного дерева. Так что у вас может быть индикатор, country_2но нет country_3. Если вы оставите переменную группы как целое число, то порядок также может повлиять на результат. Что это значит для country > 5и country < 12? Как это изменится, если вы случайно пометите страны новыми целыми числами?

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

Как и большинство других алгоритмов машинного обучения, CART и случайные леса не обязательно учитывают зависимость между наблюдениями внутри групп так, как вы ожидаете в модели иерархической регрессии. Если есть зависимость между наблюдениями, она должна быть захвачена с помощью алгоритма случайного леса через поколение многих дерев , которые используют переменные группировки. Однако если другие переменные демонстрируют большую дискриминацию, тогда группирующая переменная может быть проигнорирована.

В твоем случае countryи populationидеально коллинеарны. Нет информации, полученной при использовании обеих переменных в вашей модели. Таким образом, вы можете думать о том, как модель случайного леса будет обрабатывать эти переменные в ваших данных.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.