Подтвердить что ты не робот

Случайный лес с очень неустойчивыми классами

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

strata 

sampsize

Документация по этим параметрам разрежена (или мне не повезло найти ее), и я действительно не понимаю, как ее реализовать. Я использую следующий код:

randomForest(x=predictors, 
             y=response, 
             data=train.data, 
             mtry=lista.params[1], 
             ntree=lista.params[2], 
             na.action=na.omit, 
             nodesize=lista.params[3], 
             maxnodes=lista.params[4],
             sampsize=c(250000,2000), 
             do.trace=100, 
             importance=TRUE)

Ответ - это класс с двумя возможными значениями, первый - чаще, чем второй (10000: 1 или более)

list.params - это список с разными параметрами (я знаю...)

Ну, вопрос (опять): как я могу использовать параметр "strata"? Я правильно использую sampsize?

И, наконец, иногда я получаю следующую ошибку:

Error in randomForest.default(x = predictors, y = response, data = train.data,  :
  Still have fewer than two classes in the in-bag sample after 10 attempts.

Извините Если я делаю так много (и, может быть, глупых) вопросов...

4b9b3361

Ответ 1

Вам следует попробовать использовать методы выборки, которые уменьшают степень дисбаланса от 1:10000 до 1:100 или 1:10. Вы также должны уменьшить размер генерируемых деревьев. (На данный момент это рекомендации, которые я повторяю только из памяти, но я увижу, могу ли я отследить больше полномочий, чем моя губчатая кора.)

Один из способов уменьшения размера деревьев - установить "nodeize" больше. С такой степенью дисбаланса вам может потребоваться размер node действительно большой, скажем, 5-10 000. Здесь поток в rhelp: https://stat.ethz.ch/pipermail/r-help/2011-September/289288.html

В текущем состоянии вопроса у вас есть sampsize=c(250000,2000),, тогда как я бы подумал, что что-то вроде sampsize = c (8000,2000), больше соответствует моим предложениям. Я думаю, вы создаете образцы, в которых у вас нет какой-либо группы, которая была отобрана только с 2000.

Ответ 2

Есть несколько вариантов.

Если у вас много данных, отложите случайную выборку данных. Создайте свою модель на одном наборе, а затем используйте другую, чтобы определить правильное обрезание для вероятностей класса с использованием кривой ROC.

Вы также можете увеличить данные в классе меньшинства. Алгоритм SMOTE может помочь (см. Ссылку ниже и пакет DMwR для функции).

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

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

Последняя мысль: максимизация моделей, основанных на точности, не заставит вас нигде (вы можете получить 99,99% с места в карьер). Карет может настраивать модели, основанные на статистике Kappa, что является гораздо лучшим выбором в вашем случае.

Ответ 3

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

Я полагаю, что проблема вызвана высоким дисбалансом набора данных (слишком мало случаев одного из классов). Для каждого дерева в РФ алгоритм создает образец бутстрапа, который является обучающим набором для этого дерева. И если у вас слишком мало примеров одного из классов в вашем наборе данных, тогда выборка бутстрапов будет выбирать примеры только одного класса (основного класса). И, таким образом, дерево нельзя выращивать только на примерах одного класса. Кажется, что существует предел 10 неудачных попыток выборки. Таким образом, предложение DWin уменьшить степень дисбаланса до более низких значений (1:100 или 1:10) является наиболее разумным.