不确定您是否找到了您要找的东西,但我发现其中一些表格没有什么帮助。
如果您使用的是 caret 包,下面描述了所需的参数: > getModelInfo()$gbm$parameters
他是运行 GBM 的一些经验法则:
- interaction.depth 为 1,在大多数数据集上似乎
足够的,但在一些我发现测试结果
最大值的奇数倍会产生更好的结果。最大值我
已经看到这个参数是 floor(sqrt(NCOL(training)))。
- 收缩率:数字越小,预测值越好,
需要的树越多,计算成本就越高。测试
一小部分数据上的值,例如收缩 =
shrinkage = seq(.0005, .05,.0005) 有助于定义
理想值。
- n.minobsinnode:默认为 10,一般我不会乱用它。
我在小数据集上尝试过 c(5,10,15,20),但并没有
看到足够的计算成本回报。
- 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 内核上运行。