Выборка с заменой в R randomForest

11

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

Работает отлично:

rf <- randomForest(Species ~ ., iris, sampsize=c(1, 1, 1), replace=TRUE)
rf <- randomForest(Species ~ ., iris, sampsize=3, replace=TRUE)

Что я хочу сделать:

rf <- randomForest(Species ~ ., iris, sampsize=c(51, 1, 1), replace=TRUE)
Error in randomForest.default(m, y, ...) : 
  sampsize can not be larger than class frequency

Аналогичная ошибка без стратифицированной выборки:

rf <- randomForest(Species ~ ., iris, sampsize=151, replace=TRUE)
Error in randomForest.default(m, y, ...) : sampsize too large

Так как я ожидал, что метод будет брать образцы начальной загрузки, когда задано replace = TRUE в обоих случаях, я не ожидал этого предела.

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

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

Ответы:

5

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

Два недостатка этого подхода по сравнению с «естественной» передискретизацией:

  • оценки вне сумки больше не имеют смысла
  • требуется больше ресурсов для хранения объекта и отбора случайных выборок

но это позволит построить лес с желаемым соотношением классов.

cohoz
источник
4

У меня точно такой же вопрос, и я нашел его в журнале изменений для randomForest :

Изменения в 4.1-0:

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

Установка replace = TRUE вручную также, похоже, не отменяет это.

hgcrpd
источник
2
Может случиться так, что параметр replace просто игнорируется, но позже в этом журнале изменений: Изменения в 4.5-12: * Добавлен аргумент 'strata' в randomForest, который в сочетании с 'sampsize' разрешает выборку (с или без замены) в соответствии с переменной страты (которая может отличаться от переменной класса). В настоящее время работает только в классификации.
cohoz
Например, такая же ошибка генерируется черезrf <- randomForest(Species ~ ., iris, sampsize=c(51, 1, 1), strata=iris$Species, replace=TRUE)
cohoz
Более того, некоторые тесты с текущей версией (4.6-7) показывают, что образцы берутся с заменой, так что это не объяснение.
cohoz
1
Я закончил выборку перед запуском randomForest. Возможно, что-то не так с этой методологией, но, похоже, она работает, когда я проверяю результаты.
hgcrpd
1
Нет, это обходной путь, который я использую, и он делает именно то, что хочет. Специально для случая использования одного относительно редкого класса хорошо работает дублирование данных для этого класса на тренировочном наборе и перед взятием стратифицированной выборки, и «стоимость» с точки зрения дополнительной памяти / ЦП не слишком высока. Я думаю, что стоит написать «ответ», хотя это действительно не так ...
cohoz