随机森林中tuneGrid参数存在问题

8

我一直在处理一些极度不平衡的数据,我想使用分层抽样来创建更平衡的随机森林。

目前,我主要使用caret包对随机森林进行调参。因此,我尝试设置一个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可以传入参数。 我是否能够通过caret将sampsize传入随机森林中?
2个回答

13

看起来您的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不能传递到train()中。好吧,谢谢! - mortonjt
@Garnieje,有什么好的资源可以了解每种方法可以调整哪些参数(例如,rfmtry)?我在想我可以添加ntree,但可能会遇到同样的问题... - toto_tico
没事了,我找到了它:http://topepo.github.io/caret/train-models-by-tag.html#random-forest - toto_tico
@toto_tico 如果您不想阅读文档:caret::modelLookup(model = "rf") - Seanosapien

0

我怀疑直接向 train 函数传递 sampsizestrata 是不可能的。但是从这里得出,解决方法是使用 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")中的一个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接