【问题标题】:A way to drop cross validation models in GridSearch?在 GridSearch 中删除交叉验证模型的方法?
【发布时间】:2018-07-19 07:02:21
【问题描述】:

我在 Jupyter 笔记本中的 H2O 中构建随机森林模型的内存不断不足。我发现使用我的 20 GB 内存实例,在引发“树模型不适合驱动程序节点的内存”异常之前,我可以构建大约两个具有 10 倍交叉验证的 50 树模型(总共 22 个模型)。使用 for 循环,我可以在计算和显示指标后删除交叉验证模型,但是使用 GridSearch,似乎没有任何方法可以在搜索时删除无关的 CV 模型。是这样吗?有什么解决方法吗? (我总是可以增加分配的内存量,但这最终将是在我的本地机器上运行的有限值)。有没有人有任何关于 GridSearch 和有限内存的提示?谢谢。

【问题讨论】:

    标签: h2o


    【解决方案1】:

    这是一个合理的请求,目前在 H2O 的网格搜索功能中没有办法做到这一点,但是我已经创建了一张票 here。还有另一个 ticket open 用于类似的请求,即在您继续运行网格搜索时将“前 k”模型保留在网格中(并删除其余模型)。

    我们已通过 keep_cross_validation_models 参数为 H2O AutoML 实现了此功能,因此如果您愿意使用 H2O AutoML(主要是 GBM),您可以使用它来代替随机森林网格。如果将此参数设置为FALSE,则将删除 CV 模型,但是当前实现的唯一 problem 是在 AutoML 运行结束时删除 CV 模型,而不是在创建和 CV 后立即删除指标被保存。

    因此,与此同时,为了解决问题,我建议以下方法:

    您可以通过使用grid_id 参数多次执行网格。每次执行后,您可以手动删除 CV 模型。然后您可以再次“训练”网格并将grid_id 设置为与以前相同,它将向同一网格添加更多模型。如果您使用笛卡尔网格搜索,则应更改搜索空间,如果您使用随机网格搜索,则只需更改种子,以便第二次获得不同/新模型。它是手动的,但它仍然比编写循环并从头开始创建网格要容易一些。

    Python 示例:

    import h2o
    from h2o.estimators.random_forest import H2ORandomForestEstimator
    from h2o.grid.grid_search import H2OGridSearch
    
    h2o.init()
    
    # Import a sample binary outcome training set into H2O
    train = h2o.import_file("https://s3.amazonaws.com/erin-data/higgs/higgs_train_10k.csv")
    x = train.columns
    y = "response"
    x.remove(y)
    
    # For binary classification, response should be a factor
    train[y] = train[y].asfactor()
    
    # RF hyperparameters
    rf_params = {'max_depth': list(range(5, 30)),
                 'sample_rate': [i * 0.1 for i in range(5, 11)],
                 'min_rows': list(range(1, 25))}
    
    # Search criteria
    search_criteria = {'strategy': 'RandomDiscrete', 'max_models': 20}
    
    rf_grid = H2OGridSearch(model=H2ORandomForestEstimator,
                            grid_id='rf_grid',
                            hyper_params=rf_params,
                            search_criteria=search_criteria)
    rf_grid.train(x=x, y=y, 
                  training_frame=train, 
                  nfolds=5, 
                  ntrees=300,
                  seed=1)
    
    # Code to delete CV models (you'll have to do this part)
    
    rf_grid.train(x=x, y=y, 
                  training_frame=train, 
                  nfolds=5, 
                  ntrees=300,
                  seed=2)  #change seed for second random grid search run
    

    【讨论】:

      猜你喜欢
      • 2018-04-02
      • 2013-05-19
      • 2014-02-18
      • 1970-01-01
      • 2016-05-24
      • 2023-03-15
      • 2013-12-08
      • 1970-01-01
      • 2019-11-27
      相关资源
      最近更新 更多