13

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

4

2 回答 2

25

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

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

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

  1. interaction.depth 为 1,在大多数数据集上似乎足够了,但在少数数据集上,我发现针对最大值的奇数倍测试结果会得到更好的结果。我看到的这个参数的最大值是 floor(sqrt(NCOL(training)))。
  2. Shrinkage:数字越小,预测值越好,需要的树越多,计算成本也越高。使用诸如 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"))

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

于 2016-06-06T01:20:40.400 回答
16

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

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

于 2013-03-26T08:35:10.693 回答