Я изучаю различные методы классификации для проекта, над которым я работаю, и заинтересован в попытках использовать «Случайные леса». Я стараюсь обучаться сам по себе, и буду признателен за любую помощь, предоставленную сообществом CV.
Я разделил свои данные на тренировочные / тестовые наборы. После экспериментов со случайными лесами в R (с использованием пакета randomForest) у меня возникли проблемы с высокой ошибочной классификацией для моего меньшего класса. Я читал эту статью о производительности случайных лесов на несбалансированных данных, и авторы представили два метода борьбы с дисбалансом классов при использовании случайных лесов.
1. Взвешенные случайные леса
2. Сбалансированные случайные леса
Пакет R не позволяет взвешивать классы (из справочных форумов R я прочитал, что параметр classwt не работает должным образом и запланирован как исправление будущей ошибки), поэтому у меня остается опция 2. Я могу указать количество объектов, выбранных из каждого класса для каждой итерации случайного леса.
Мне неловко задавать одинаковые размеры выборки для случайных лесов, так как я чувствую, что потерял бы слишком много информации о большем классе, что привело бы к снижению производительности будущих данных. Показатели неправильной классификации при понижении выборки для большего класса показали улучшение, но мне было интересно, есть ли другие способы борьбы с несбалансированными размерами классов в случайных лесах?
Ответы:
Если вам не нравятся эти варианты, вы решили вместо этого использовать метод повышения? При соответствующей функции потерь, повышение автоматически перекалибрует вес по мере продвижения. Если вам нравится стохастическая природа случайных лесов, то в этом учитывается и увеличение стохастического градиента.
источник
gbm
пакетеR
есть функционирующий термин «весовые коэффициенты», и вы можете увеличить случайность очень похожим образом на случайные леса, уменьшив с помощью термина «bag.fraction». Кажется, стоит попробовать.Я думаю, что взвешивание объектов как-то эквивалентно дублированию их. Возможно, вам следует попробовать изменить шаг начальной загрузки, выбрав соответствующие классы.
источник
Вместо выборки больших классов вы можете расширить маленькие классы! Если у больших классов наблюдений во много раз больше, чем у маленьких, то уклон будет маленьким. Я надеюсь, что вы справитесь с этим расширенным набором данных.
Вы также можете определить подмножества наблюдений, которые обрабатывают большую часть информации о больших классах, существует много возможных процедур, самая простая, я думаю, основана на методе ближайших соседей - выборка наблюдений, обусловленная структурой графа соседей, гарантирует, что выборка будет иметь плотность вероятности, более похожую на оригинальный.
randomForest написан на Fortran и c, исходный код доступен (http://cran.r-project.org/src/contrib/randomForest_4.6-2.tar.gz), но я не могу определить место, где вычисляется энтропия, пс. взлеты, что случайные леса используют Джини вместо энтропии
источник
(1) Вы правы, весовая функция не работает, и вы не уверены, была ли она когда-либо исправлена.
(2) Большинство используют вариант 2 со сбалансированными данными. Ключом к тому, чтобы не потерять слишком много данных, является стратифицированная выборка. Вы случайным образом выбираете уникальный сбалансированный набор для каждого дерева.
источник
Синтетическая избыточная выборка меньшинства (SMOTE) генерирует новые наблюдения класса меньшинства как случайные выпуклые комбинации соседних наблюдений. Документ находится здесь: https://bmcbioinformatics.biomedcentral.com/articles/10.1186/1471-2105-14-106
источник