【问题标题】:How can I reduce the memory footprint of large Random Forest models (sklearn)?如何减少大型随机森林模型 (sklearn) 的内存占用?
【发布时间】:2018-11-24 18:57:58
【问题描述】:

我有 100 种不同的随机森林模型。它们每个的大小平均为 300 MB(每个都经过 300 多个课程训练)。我正在使用 sklearn 的 (v0.19.1) 实现的随机森林。这会导致超过 30 GB 的内存使用。我需要内存中的所有模型,并尝试减少树的深度,但准确性的降低相当大。有没有人有任何想法和/或建议(实施?)可以帮助我减少内存占用?

【问题讨论】:

  • 投反对票的人,请留下评论,以便我了解问题的问题所在。
  • 为什么有100种不同的型号?既然 RF 已经是一个集合,那么更多地集合输出通常没有什么好处?
  • 您是否尝试过使用min_samples_split 而不是max_depth 来限制树木生长?这允许不同的树具有不同的深度,这在尝试使树更紧凑时很有用。
  • 不同的模型,因为我要处理大量的类。所以我正在拆分训练。 min_samples_split 不是我尝试过的,我会尝试让您知道。
  • 你总共有几节课?内存使用是在训练时出现问题,还是仅在推理时出现问题?

标签: machine-learning scikit-learn out-of-memory random-forest


【解决方案1】:

我没有任何先进而优雅的解决方案。但是由于您使用 RF,因此总是有一种解决方法:您可以使用不同的随机种子一个接一个地训练 100 个 DT(或 RF)模型,并将每个模型存储在磁盘上(存储后从内存中删除它)。这样,您在任何给定时间最多只有 300 MB 的内存。要进行预测,您需要逐一阅读模型和预测,并平均预测概率。您可以将此建议概括为在每个此类模型中使用 N (N=1..5) 棵树以使用一些适度的内存但减少实际模型的数量

【讨论】:

  • 这正是我目前的解决方案。但我一直在寻找一些方法来减小每个模型的大小而不影响准确性。也许使用与 sklearn 不同的实现
  • 您是否尝试了解您的树为什么这么大?它们有多深?是不是因为班级太多。原则上,xgboost 和 lightgbm 中都有 RF 实现,但我不知道它们是否会更小
  • max_depth 为 10,我尝试减小深度,但这样会大大降低准确性。这可能是因为课程的数量。我会试试 lightbm 和 xgboost。
猜你喜欢
  • 2019-08-02
  • 2016-07-31
  • 2017-05-14
  • 2019-11-08
  • 2017-05-14
  • 2018-10-09
  • 2017-10-19
  • 1970-01-01
  • 2016-01-03
相关资源
最近更新 更多