随机森林中的 tuneGrid 参数问题

Posted

技术标签:

【中文标题】随机森林中的 tuneGrid 参数问题【英文标题】:Issues with tuneGrid parameter in random forest 【发布时间】:2015-01-08 19:05:11 【问题描述】:

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

现在,我正在使用 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

我遇到过像this 这样的讨论,建议应该可以传入这些参数。

另一方面,这个page表明唯一可以传入的参数是mtry

我什至可以通过插入符号将 sampsize 传入随机森林吗?

【问题讨论】:

【参考方案1】:

您的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()。那好吧。谢谢! @Garnieje,有什么好的资源可以了解您可以为每种方法调整哪些参数(例如,mtry 用于 rf)?我在想我可以添加ntree 并遇到同样的问题...... 没关系,I found it @toto_tico 如果您不想通读文档:caret::modelLookup(model = "rf")【参考方案2】:

我怀疑可以直接将sampsizestrata 传递给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") 之一。

【讨论】:

以上是关于随机森林中的 tuneGrid 参数问题的主要内容,如果未能解决你的问题,请参考以下文章

随机森林中的超参数调整

sklearn随机森林中的引导参数

sklearn库学习----随机森林(RandomForestClassifier,RandomForestRegressor)

随机森林参数说明

如何调整管道内随机森林分类器中的参数?

R中的随机森林(y中的空类和参数legth 0)