Я обучаю классификационную модель случайному лесу, чтобы различать 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 год, я подумал, что могу взять номер месяца из даты в качестве веса. Кто-нибудь видит проблему с этим методом?
Спасибо заранее!
источник
Ответы:
ranger
Пакет в R ( в формате PDF ), который является относительно новым, будет делать это. Реализация случайных лесов в рейнджере имеетcase.weights
аргумент, который принимает вектор с индивидуальными весами наблюдений / наблюдений.источник
Вы можете пересчитать данные, чтобы представить более свежие точки данных. В любом случае Rf включает в себя этап сампеля с заменой, а «грубо сбалансированный пакет» для несбалансированных классов использует выборку для перепредставления класса меньшинства и дает результаты, которые являются хорошими или лучше, чем случайный лес, взвешенный по классу в моем опыте.
Вы можете выполнить повторную выборку на уровне построения своей обучающей матрицы ( справочной ), а не во время упаковки в пакеты, чтобы упростить реализацию, хотя я бы предложил сделать много повторов в этом случае.
Внутренне некоторые реализации случайного леса, включая scikit-learn, фактически используют веса выборки, чтобы отслеживать, сколько раз каждая выборка находится в сумке, и это должно быть эквивалентно избыточной выборке на уровне упаковки и близкой к избыточной выборке на уровне обучения при перекрестной проверке.
источник
Вы должны посмотреть на параметр "classwt". Кажется, это не то, что вас непосредственно интересует, но это может дать вам представление о том, что вы хотите сделать.
Смотрите здесь: Stack Exchange вопрос № 1
А здесь: Stack Exchange, вопрос № 2
Статья о взвешенных случайных лесах: PDF
Основная идея состоит в том, чтобы подобрать весовые категории таким образом, чтобы редко встречающиеся группы / классификации с большей вероятностью выбирались в ваших выборках начальной загрузки. Это полезно для несбалансированных данных (когда априорные вероятности разных классов сильно различаются).
Мне кажется, что вы хотите сделать что-то подобное, но для недавних событий (не для определенных групп / классификаций). Простой способ сделать это - создать дубликаты наблюдений (т.е. поместить в повторяющиеся идентичные строки) для более поздних наблюдений. Однако это потенциально может быть неэффективным. Я не знаю способа непосредственно взвесить каждое наблюдение в R, но я мог не знать об этом.
Вы можете попробовать поискать альтернативные реализации, например, в C - в худшем случае, их можно настроить с помощью небольшого количества кода.
источник