首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用optimal软件包寻找GBM的最佳参数

利用optimal软件包寻找GBM的最佳参数
EN

Stack Overflow用户
提问于 2013-03-25 19:03:18
回答 2查看 22K关注 0票数 13

我正在使用R软件包的boosting对10,000×932的一些生物数据进行回归,我想知道GBM软件包的最佳参数设置是什么(n.trees,收缩,interaction.depth和n.minobsinnode)当我在网上搜索时,我发现R上的CARET软件包可以找到这样的参数设置。但是,我很难将Caret包与GBM包一起使用,所以我只想知道如何使用脱字符来找到前面提到的参数的最佳组合?我知道这个问题可能看起来很典型,但我读了插入符号手册,仍然很难将插入符号与gbm集成,特别是因为我对这两个包都是非常陌生的

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-26 16:35:11

这个链接有一个具体的例子(第10页)-- http://www.jstatsoft.org/v28/i05/paper

基本上,首先应该为超参数(如n.trees、interaction.depth和收缩)创建候选值的网格。然后像往常一样调用通用的训练函数。

票数 16
EN

Stack Overflow用户

发布于 2016-06-06 09:20:40

我不确定你是否找到了你想要的东西,但我发现这些表格中的一些没有什么帮助。

如果您使用的是脱字符软件包,下面描述了所需的参数:> getModelInfo()$gbm$parameters

他有一些运行GBM的经验法则:

  1. interaction.depth是1,在大多数数据集上似乎足够了,但在少数情况下,我发现用最大值的奇数倍测试结果会得到更好的结果。我看到的这个参数的最大值是floor(sqrt(NCOL(training))).
  2. Shrinkage:,数字越小,预测值越好,需要的树越多,计算成本就越高。在一小部分数据上测试值,例如subset =subset= seq(.0005,.05,.0005)可以帮助定义理想的value.
  3. n.minobsinnode:默认值为10,通常我不会对此感到困扰。我在小数据集上尝试了c(5,10,15,20),并没有真正看到足够的计算成本回报。
  4. n.trees:收缩越小,你应该拥有的树越多。从n.trees = (0:50)*50开始并相应地进行调整。

使用插入符号包的示例设置:

代码语言:javascript
复制
getModelInfo()$gbm$parameters
library(parallel)
library(doMC)
registerDoMC(cores = 20)
# Max shrinkage for gbm
nl = nrow(training)
max(0.01, 0.1*min(1, nl/10000))
# Max Value for interaction.depth
floor(sqrt(NCOL(training)))
gbmGrid <-  expand.grid(interaction.depth = c(1, 3, 6, 9, 10),
                    n.trees = (0:50)*50, 
                    shrinkage = seq(.0005, .05,.0005),
                    n.minobsinnode = 10) # you can also put something        like c(5, 10, 15, 20)

fitControl <- trainControl(method = "repeatedcv",
                       repeats = 5,
                       preProcOptions = list(thresh = 0.95),
                       ## Estimate class probabilities
                       classProbs = TRUE,
                       ## Evaluate performance using
                       ## the following function
                       summaryFunction = twoClassSummary)

# Method + Date + distribution
set.seed(1)
system.time(GBM0604ada <- train(Outcome ~ ., data = training,
            distribution = "adaboost",
            method = "gbm", bag.fraction = 0.5,
            nTrain = round(nrow(training) *.75),
            trControl = fitControl,
            verbose = TRUE,
            tuneGrid = gbmGrid,
            ## Specify which metric to optimize
            metric = "ROC"))

事情可能会根据你的数据而改变(比如分布),但我发现关键是尝试gbmgrid,直到你得到你想要的结果。现在的设置需要很长时间才能运行,因此请根据您的机器进行修改,时间允许。为了给你一个大概的计算空间,我在64 12内存的Mac PRO 12内核上运行。

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15613332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档