【问题标题】:using caret package to find optimal parameters of GBM使用 caret 包找到 GBM 的最佳参数
【发布时间】:2013-03-14 20:20:01
【问题描述】:

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

【问题讨论】:

    标签: r optimization r-caret gbm


    【解决方案1】:

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

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

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

    1. interaction.depth 为 1,在大多数数据集上似乎 足够的,但在一些我发现测试结果 最大值的奇数倍会产生更好的结果。最大值我 已经看到这个参数是 floor(sqrt(NCOL(training)))。
    2. 收缩率:数字越小,预测值越好, 需要的树越多,计算成本就越高。测试 一小部分数据上的值,例如收缩 = 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 内核上运行。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-02-10
        • 2015-04-22
        • 2015-04-03
        • 2019-02-27
        • 2015-06-10
        • 2020-01-28
        • 2020-10-12
        • 2018-07-08
        • 2020-03-17
        相关资源
        最近更新 更多