h2o.GBM在小型数据集上花费的时间太长

时间:2017-06-15 04:10:02

标签: r h2o categorical-data gbm bigdata

我有一个相当小的数据集(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" 
  )

2 个答案:

答案 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,但可能需要一段时间。