Проблемы с параметром tuneGrid в случайном лесу

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

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

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

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

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

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

2 ответов


похоже, что с вашим 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)

Я сомневаюсь, что можно напрямую передать sampsize и strata to train. Но от здесь Я считаю, что решение заключается в использовании 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").