我有一个相当小的数据集(162个观测值,包含13个属性) 我正在尝试使用h2o.GBM进行建模。响应变量是分类的,具有大量级别(~20,000级) 该模型不会耗尽内存或出现任何错误,但它已经持续了近24小时没有任何进展(在H2o.GBM报告中说0%) 我终于屈服了并阻止了它。 我想知道我的超参数是否有问题,因为数据不是特别大。
这是我的代码:
library(h2o)
localH2O <- h2o.init(nthreads = -1, max_mem_size = "12g")
train.h20 <- as.h2o(analdata_train)
gbm1 <- h2o.gbm(
y = response_var
, x = independ_vars
, training_frame = train.h20
, ntrees = 3
, max_depth = 5
, min_rows = 10
, stopping_tolerance = 0.001
, learn_rate = 0.1
, distribution = "multinomial"
)
答案 0 :(得分:3)
H2O GBM多项分类的工作方式是,当您要求将一棵树作为参数时,它实际上会为引擎盖下的响应列中的每个级别构建一个树。
所以1棵树真的意味着你的情况下有20,000棵树。
2棵树真的意味着40,000,依此类推......
(注意二项分类案例采用快捷方式,并且只为这两个类构建一个树。)
所以...它可能会完成,但可能需要相当长的时间!
答案 1 :(得分:2)
培训具有20,000个类的分类器可能不是一个好主意 - 大多数GBM实现甚至不会让你这样做。您是否可以将类分组/聚类为较少数量的组,以便您可以训练具有较少数量类的模型?如果是这样,那么您可以在两个阶段的过程中执行培训 - 第一个模型将具有 K 类(假设您将类集群到 K 组中)。然后,您可以训练二级模型,进一步将观察分类为原始类。
如果您的类代表自然聚集成组的层次结构的组(例如邮政编码或ICD-10医疗诊断代码),则此类型的两阶段过程可能有意义。
如果您的用例确实要求您训练20,000级GBM(并且没有办法解决它),那么您应该在H2O群集中使用更大的机器群集(目前还不清楚您使用了多少CPU目前)。 H2O GBM应该能够完成培训,假设它有足够的内存和CPU,但可能需要一段时间。