2014-11-12 3 views
7

Я имел дело с некоторыми чрезвычайно несбалансированными данными, и я хотел бы использовать стратифицированную выборку для созданных более сбалансированных случайных лесовПроблем с параметром tuneGrid в случайном лесе

Прямо сейчас, я использую пакет каре, в основном для настройки случайных лесов. Итак, я пытаюсь настроить tuneGrid для передачи параметров mtry и sampsize в метод каретки, как показано ниже.

mtryGrid <- data.frame(.mtry = 100),.sampsize=80) 
rfTune<- train(x = trainX, 
       y = trainY, 
       method = "rf", 
       trControl = ctrl, 
       metric = "Kappa", 
       ntree = 1000, 
       tuneGrid = mtryGrid, 
       importance = TRUE) 

Когда я запускаю этот пример, я получаю следующую ошибку

The tuning parameter grid should have columns mtry 

Я Попадаюсь обсуждение, как this предполагая, что передача этих параметров в должно быть возможными.

С другой стороны, это page предполагает, что единственный параметр, который может быть передан в это mtry

Могу ли я пройти даже в sampsize в случайных лесах через каретку?

ответ

12

Похоже, что есть проблема с вашим mtryGrid. В качестве альтернативы вы также можете использовать expand.grid, чтобы дать разные значения mtry, которые вы хотите попробовать. По умолчанию единственным параметром, который вы можете настроить для случайного леса, является mtry. Однако вы можете передать остальные параметры train. Но у них будет фиксированное значение, поэтому он не будет настроен на train. Но вы все равно можете попросить использовать стратифицированный образец в train. Ниже, как я хотел бы сделать, если предположить, что trainY является логическим переменным согласно которому вы хотите стратифицировать свои образцы, и что вы хотите образцы размером 80 для каждой категории:

mtryGrid <- expand.grid(mtry = 100) # you can put different values for mtry 
rfTune<- train(x = trainX, 
       y = trainY, 
       method = "rf", 
       trControl = ctrl, 
       metric = "Kappa", 
       ntree = 1000, 
       tuneGrid = mtryGrid, 
       strata = factor(trainY), 
       sampsize = c(80, 80), 
       importance = TRUE) 
+0

По какой-то причине, я думал, что сметал не может быть передан в поезд(). Ну что ж. Благодаря! – mortonjt

+0

@ Garnieje, что является хорошим ресурсом для определения параметров, которые вы можете настроить для каждого метода (например, 'mtry' для' rf')? Я думал, что могу добавить 'ntree' и столкнуться с тем же вопросом ... –

+0

Nevermind, [я нашел его] (http://topepo.github.io/caret/train-models-by-tag.html# random-forest) –

0

я сомневаюсь, можно непосредственно передать sampsize и strata - train. Но от here Я считаю, что решение должно использовать trControl(). То есть,

mtryGrid <- data.frame(.mtry = 100),.sampsize=80) 
rfTune<- train(x = trainX, 
       y = trainY, 
       method = "rf", 
       trControl = trainControl(sampling=X), 
       metric = "Kappa", 
       ntree = 1000, 
       tuneGrid = mtryGrid, 
       importance = TRUE) 

где X может быть один из c("up","down","smote","rose").

Смежные вопросы