#r #статистика #машинное_обучение
Нужно построить множественный классификатор (5 классов) на сильно несбалансированной
выборке.
> table(d$class)
0 0.3 0.5 0.7 1
12385 736 733 25 1869
Если просто запустить RandomForest, то ничего получается.
Значит, надо как-то её балансировать. А вот этого я делать-то и не умею.
Все найденные пакеты по балансировке предполагают лишь бинарную классификацию.
Смотрел пакеты:
unbalanced
ROSE
Читал эту статью.
Думал, может в самом RandomForest есть возможность задать cost или сэмплинг — тоже
не нашлось. Как можно решить эту проблему?
Ответы
Ответ 1
В пакете "caret" существуют две функции: upSample() и downSample(), которые решают эту проблему. Балансировать классы необходимо независимо от применяемых методов классификации. Обновление Если отвечать широко,то нужно указать, что балансировка классов один из многих важных этапов, которые нужно выполнить прежде чем начать обучать модель. Просто перечислю: выбор и оценка входных переменных, разделение на тренировочную и тестовую выборку(желательно стратифицированную), балансировка классов(только тренировочного набора), препроцессинг (нормализация,стандартизация и т.л.), перемешивание тренировочного набора и др. От качества проведения этих работ на 80% зависит качество получаемого результата моделирования. Если отвечать так широко потребуется статья хорошего объема. Необходимость балансировки классов подтверждается многочисленными экспериментами (не только моими) с многими моделями. Просто сравните результаты классификации одинаковых наборов с и без балансировки Вы убедитесь в этом сами..Ответ 2
Вот такая функция решает эту проблему my.strata <- function(v) { tmp <- as.vector(table(v)); num_clases <- length(tmp); min_size <- tmp[order(tmp,decreasing=FALSE)[1]]; rep(min_size,num_clases); } randomForest(.... sampsize=my.strata( ) ... )
Комментариев нет:
Отправить комментарий