使用caret包寻找GBM的最佳参数

13

我正在使用R GBM包进行提升,对一些生物数据进行回归,其尺寸为10,000 X 932。我想知道什么是GBM包的最佳参数设置,特别是(n.trees、shrinkage、interaction.depth和n.minobsinnode)。当我在网上搜索时,发现R中的CARET包可以找到这样的参数设置。然而,我很难使用Caret包与GBM包结合,所以我想知道如何使用caret来找到之前提到的参数的最佳组合?我知道这可能是一个非常典型的问题,但我已经阅读了Caret手册,对于将Caret与gbm集成仍然存在困难,特别是因为我对这两个包都非常陌生。

2个回答

25

不确定您是否找到了想要的内容,但我认为其中一些表并不是很有用。

如果您正在使用caret软件包,则以下内容描述了所需的参数:> getModelInfo() $ gbm $ parameters

下面是运行GBM的一些经验法则:

  1. interaction.depth为1,在大多数数据集上似乎足够,但在少数情况下,测试结果与最大值的奇数倍相比较会得到更好的结果。此参数的最大值我见过的是floor(sqrt(NCOL(training)))。
  2. 收缩:数字越小,预测价值越高,需要更多的树和更高的计算成本。在类似shrinkage = shrinkage = seq(.0005, .05,.0005)的数据子集上测试这些值可以帮助定义理想值。
  3. n.minobsinnode:默认值为10,通常我不会更改它。我曾尝试在小型数据集上使用c(5,10,15,20),但并没有真正看到足够的回报来支付计算成本。
  4. n.trees:缩小得越小,则应该拥有更多的树。从n.trees =(0:50)* 50开始,然后根据需要进行调整。

使用caret软件包的示例设置:

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"))

事情可能会根据您的数据(如分布)而改变,但我发现关键是要通过调整 gbmgird 直到得到您想要的结果。现在的设置需要很长时间才能运行,因此请根据您的计算机和时间进行修改。

为了给您一个大致的计算量,我在 Mac PRO 上使用了 12 核和 64GB 的内存。


16

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

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


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