randomForest

Jun 30, 2015 10:55

Доброго времени суток! Проблемка с пакетом randomForest. Для начала, я разделил датасет на обучающую и тестовую выборку, но ошибка прогноза на тестовой выборке оказалась намного выше, чем на обучающей - то есть модель переобучена :( Как я понимаю, причина в том, что во-первых - маленькие группы, во-вторых - пердикторов больше, чем наблюдений... ( Read more... )

Leave a comment

Comments 16

p2004r June 30 2015, 06:35:38 UTC
1. Вы делите данные на обучающую и тестирующую не обращая внимание на сохранение соотношения между классифицируемыми исходами.

2. Сделать правильную выборку трудно ещё потому, что исходов крайне мало. Случайный лес крайне плохо экстраполирует на области не покрытые данными. Вам лучше использовать любой линейный метод.

Например просто сделать biplot(prcomp(data[,-1]), xlabs=data[,1]) И увидеть четко разделимые естественные группировки. Использовать модель через predict(prcomp(data[,-1]), newdata).

Ну или линейный дискриминантный анализ использовать.

3. Проверить можно кроссвалидацией (только выбрать метод который извлекает семплы с оглядкой на data[,1])

> data <- read.csv2("data.csv ( ... )

Reply

vladhr_1989 June 30 2015, 07:22:50 UTC
Главные компоненты использовал, там-то всё сработало очень хорошо. После шкалирования и центрирования вообще всё разделилось. Через randomForest просто хотел попробовать узнать вклады предикторов в модель... А сто делает функция predict(prcomp(data[,-1]), newdata) ?

Reply

p2004r June 30 2015, 09:23:25 UTC
Эта функция помещает в пространство PC новые данные. Вклады предикторов видны по стрелочкам на biplot и в таблице нагрузок первых двух компонент. Всё что слабо нагружает можно выкидывать.

Узнать степень вклада и выбрать занчимые предикторы можно использовав пакет Boruta или менее строгая var.select из randomForestSRC (есть ещё варианты)

Reply

vladhr_1989 June 30 2015, 09:36:35 UTC
как я понимаю, для начала главные компоненты рассчитываются по исходным данным, а функция predict располагает тестовые данные (newdata) в полученном пространстве главных компонент? В остальном анализ главных компонент довольно понятен и нагляден. Спасибо за исчерпывающие ответы :)

Reply


vladhr_1989 June 30 2015, 07:03:21 UTC
Можете 3 пункт насчёт кроссвалидации объяснить?

Reply

p2004r June 30 2015, 09:28:34 UTC
Есть традиция бить данные на уравновешенные по исходам куски (например на 10) и каждый раз объявлять тестовым один кусок из 10, а остальные обучающей. Выводится среднее качество прогноза по 10 моделям.

Если это всё (методы, кроссвалидацию их, подбор параметров, выделение оптимального набора предикторов) перебирать, то лучше сразу использовать мета пакет типа caret, там встроено всё, включая корректный семплинг.

Reply

vladhr_1989 June 30 2015, 09:50:57 UTC
То есть после кроссвалидации и randomForest можно юзать?

Reply

p2004r June 30 2015, 10:14:17 UTC
Нет, он не работает на пространстве в котором нет точек-случаев, и ничего по своей природе (дерево правил) экстраполировать не способен. Надо применить любой линейный метод (или обучить-выбрать в caret по ошибке кроссвалидации достаточно зарегуляризированный нелинейный (типа SVM))

Reply


Leave a comment

Up