Зважування останніх даних у моделі Random Forest


14

Я треную класифікаційну модель із випадковим лісом для розмежування між 6 категоріями. Мої трансакційні дані мають приблизно 60 К + спостережень та 35 змінних. Ось приклад того, як це приблизно виглядає.

 _________________________________________________
|user_id|acquisition_date|x_var_1|x_var_2| y_vay  |
|-------|----------------|-------|-------|--------|
|111    | 2013-04-01     | 12    | US    | group1 |
|222    | 2013-04-12     | 6     | PNG   | group1 |
|333    | 2013-05-05     | 30    | DE    | group2 |
|444    | 2013-05-10     | 78    | US    | group3 |
|555    | 2013-06-15     | 15    | BR    | group1 |
|666    | 2013-06-15     | 237   | FR    | group6 |

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

Хтось знає, чи здатний пакет randomForest в R обробляти ваги за спостереженням?

Також, чи можете ви підказати, що є хорошим методом створення вагової змінної? Наприклад, оскільки мої дані з 2013 року, я думав, що я можу прийняти число місяця від дати як вагу. Хтось бачить проблему з цим методом?

Заздалегідь дякую!


Можливо, ви можете розмістити запитання про переповнення стека. Вони допоможуть вам більше з питаннями впровадження. У центрі уваги цього сайту є більш теоретична.
Алекс Вільямс

Мені, напевно, недостатньо зрозуміло, але мої запитання не стосуються питання впровадження. Наприклад, у частині, де я запитую про створення змінної ваги, я не маю на увазі запитувати, яка команда в R може допомогти мені зробити це. Мені просто було цікаво, чи тим самим я буду порушувати будь-яке з припущень випадкового лісу.
Микола Ненов

1
Відповідь - ні, я вважаю. Ви можете призначити ваги різним групам, як я пояснив у своїй відповіді нижче. Я розумію, що це не те, що вас цікавить, але це схожа ідея. Ви можете спробувати використати повторювані спостереження, як я пропоную.
Алекс Вільямс

Відповіді:


5

rangerПакет в R ( в форматі PDF ), який є відносно новим, буде робити це. Більш рідка реалізація випадкових лісів має case.weightsаргумент, який приймає вектор з індивідуальними ваговими / ваговими спостереженнями.


Акуратно! Шви, як рішення, яке я шукав. Чи є у вас посилання на деталі того, як обчислюється вірогідність випадкових ваг?
Микола Ненов

1
Я не на 100% впевнений у тому, як вони обчислюють ймовірності - але я думаю, якщо ви хочете почати, подивіться на цей документ: Маллі, Дж. Д., Круппа, Дж., Дасгупта, А., Маллі, КГ та Зіглер , А. (2012). Машини ймовірностей: послідовне оцінювання ймовірності з використанням непараметричних машин навчання. Методи Inf Med 51: 74-81. dx.doi.org/10.3414/ME00-01-0052
GrantRWHumphries

7

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

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

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


4

Ви повинні вивчити параметр "classwt". Здається, це не те, що вас безпосередньо цікавить, але це може дати вам відчуття того, чого ви хочете робити.

Дивіться тут: Питання обміну стеками №1

І ось: питання обміну стеками №2

Стаття про зважених випадкових лісах: PDF

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

Мені здається, ви хочете зробити щось подібне, але для останніх подій (не для певних груп / класифікацій). Простий спосіб зробити це - створити повторювані спостереження (тобто скласти повторні, однакові рядки) для останніх спостережень. Однак це потенційно може бути неефективним. Я не знаю способу безпосередньо зважити кожне спостереження в R, але я могла цього не знати.

Ви можете спробувати оглянути альтернативні реалізації, наприклад, в C - в гіршому випадку, їх можна налаштувати за допомогою трохи кодування.


1
Дякую за посилання, Алекс. У статті наведено хороші приклади випадків, коли ви хочете зважити класифікатори. Я боюся, що це не працює для мене, оскільки не можна використовувати параметр "classwt" ні для чого, крім зважування класифікаторів - тобто вам потрібна одна вага на клас, інакше randomForest поверне помилку.
Микола Ненов

1
Так, я не думаю, що ви можете використовувати "classwt" безпосередньо. Ви хочете якийсь параметр, наприклад, "ваги спостереження", але я не думаю, що він існує.
Алекс Вільямс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.