使用插入包来找到GBM的最佳参数

时间:2013-03-25 11:03:18

标签: r optimization r-caret gbm

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

2 个答案:

答案 0 :(得分:20)

不确定您是否找到了您要找的东西,但我发现其中一些不太有用。

如果您使用的是插入符号包,则下面介绍了所需的参数:> getModelInfo()$ $ GBM参数

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

  1. interaction.depth为1,在大多数数据集上都是如此 足够,但有几个我发现测试结果反对 奇数倍上升最大值给出了更好的结果。最大值I 已经看到这个参数是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开始并相应调整。
  5. 使用插入符包进行示例设置:

    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,直到您获得所需的结果。现在的设置需要很长时间才能运行,因此请修改为您的机器,并且时间允许。 为了给你一个计算的大概,我运行一个带有64GB内存的Mac PRO 12内核。

答案 1 :(得分:15)

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

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