Відбір проб із заміною на 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

Оскільки я очікував, що метод буде брати зразки завантажувальної програми, коли дано заміну = TRUE в обох випадках, я не очікував цього обмеження.

Моя мета полягає у використанні цього варіанту стратифікованої вибірки для того, щоб отримати досить великий зразок із відносно рідкісного класу.


Я не впевнений у тому, що є справжньою причиною, але зразок завантажувального пристрою, як правило, такого ж розміру, як і ваш вихідний зразок, тому така поведінка здається ідеально відповідною до того, що я очікував би від чогось, що вимагає взяти зразки завантажувального завантаження.
Джоран

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

Відповіді:


5

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

Два недоліки такого підходу, порівняно з "природним" перевибором:

  • оцінки з сумки вже не мають сенсу
  • потрібно більше ресурсів для зберігання об'єкта та взяття випадкових зразків

але це дозволить побудувати ліс із бажаними співвідношеннями класів.


4

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

Зміни в 4.1-0:

  • У randomForest (), якщо дається вибірка, вибірка тепер проводиться без заміни, крім стратифікованої за класом. Тому вибірка не може бути більшою за частоту класу.

Налаштування заміни = TRUE вручну також, схоже, не перекриває це.


2
Можливо, параметр заміни просто ігнорується, але пізніше в цьому журналі змін: Зміни в 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.