Для классификации со случайными лесами в R, как следует приспособиться к несбалансированным размерам классов?

17

Я изучаю различные методы классификации для проекта, над которым я работаю, и заинтересован в попытках использовать «Случайные леса». Я стараюсь обучаться сам по себе, и буду признателен за любую помощь, предоставленную сообществом CV.

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

1. Взвешенные случайные леса

2. Сбалансированные случайные леса

Пакет R не позволяет взвешивать классы (из справочных форумов R я прочитал, что параметр classwt не работает должным образом и запланирован как исправление будущей ошибки), поэтому у меня остается опция 2. Я могу указать количество объектов, выбранных из каждого класса для каждой итерации случайного леса.

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

ialm
источник
1
Также сталкиваюсь с аналогичной проблемой. Не могли бы вы предоставить сценарий для взвешенного случайного леса и метрического случайного леса, если у вас есть ?? Ждем вашего ответа

Ответы:

5

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

Дэвид Дж. Харрис
источник
Привет, Дэвид, спасибо за предложение. Будет ли повышение возможно в / в сочетании со случайными лесами? Кроме того, я прочитал, что повышение не может быть применимо с шумными данными. Данные, с которыми я работаю, содержат много «шумных» переменных - в настоящее время я запускаю случайные леса без выбора объектов, понижая выборку для более крупного класса, чтобы справиться с дисбалансом. Я получаю приемлемые результаты (правильно классифицируя 85% меньшего класса и 93% большего класса в учебном наборе), но улучшения всегда приветствуются.
ialm
@Jonathan У меня нет четкого представления о том, сколько шума требуется, прежде чем случайные леса начнут превосходить различные методы повышения, но у меня сложилось впечатление, что это очень много. В gbmпакете Rесть функционирующий термин «весовые коэффициенты», и вы можете увеличить случайность очень похожим образом на случайные леса, уменьшив с помощью термина «bag.fraction». Кажется, стоит попробовать.
Дэвид Дж. Харрис
@ DavidJ.Harris Boosting также страдает от дисбаланса классов, особенно в случае абсолютной редкости, когда информация о классах меньшинства скудна
Антуан
2

Я думаю, что взвешивание объектов как-то эквивалентно дублированию их. Возможно, вам следует попробовать изменить шаг начальной загрузки, выбрав соответствующие классы.

0,5

0asa
источник
0

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

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

randomForest написан на Fortran и c, исходный код доступен (http://cran.r-project.org/src/contrib/randomForest_4.6-2.tar.gz), но я не могу определить место, где вычисляется энтропия, пс. взлеты, что случайные леса используют Джини вместо энтропии

Qbik
источник
Выявление подмножеств наблюдений в более широком классе кажется интересной идеей. Вторая часть проекта фактически дифференцирует большой класс на более мелкие, полезные подгруппы, которые могут быть полезны для дальнейшего изучения. Что касается вычисления энтропии в коде, я на самом деле не углубился в код и только рассмотрел некоторые теории, лежащие в основе rf, поэтому я не могу это прокомментировать.
Ялм
Я хотел изменить этот код давным-давно, но для этого не хватало времени, добавление весов должно быть концептуально сложным.
Qbik
Случайный лес в R можно использовать как инструмент регрессии, возможно, он полезен и для неконтролируемой классификации. Я давно хотел изменить код randomForest, но для этого не хватало времени, добавление весов не должно быть концептуально трудным. Некоторое время назад мне самому было интересно, как использовать случайный лес для неконтролируемой кластеризации, и у меня возникла идея, но я ее еще не проверял, к сожалению, она кажется довольно требовательной с вычислительной точки зрения - нумероблокирования ^ 2.
Qbik
0

(1) Вы правы, весовая функция не работает, и вы не уверены, была ли она когда-либо исправлена.

(2) Большинство используют вариант 2 со сбалансированными данными. Ключом к тому, чтобы не потерять слишком много данных, является стратифицированная выборка. Вы случайным образом выбираете уникальный сбалансированный набор для каждого дерева.

Чарльз
источник