为什么scikit-learn的随机森林使用了如此多的内存?

 孙一诺她爹_480 发布于 2023-02-12 15:46

我正在使用scikit的Random Forest实现:

sklearn.ensemble.RandomForestClassifier(n_estimators=100, 
                                        max_features="auto", 
                                        max_depth=10)

调用之后rf.fit(...),进程的内存使用量增加了80MB,或者每棵树增加了0.8MB(我还尝试了许多其他类似结果的设置.我使用toppsutil监视内存使用情况)

深度为10的二叉树最多应该有一个2^11-1 = 2047元素,这些元素都可以存储在一个密集的数组中,这样程序员就可以轻松地找到任何给定元素的父元素和子元素.

每个元素都需要分割和截止中使用的特征的索引,或6-16个字节,具体取决于程序员的经济程度.在我的情况下,这转化为每棵树0.01-0.03MB.

为什么scikit的实现使用20-60x的内存来存储随机森林的树?

1 个回答
  • 每个决策(非叶子)节点存储左和右分支整数索引(2 x 8字节),用于分割的特征的索引(8个字节),决策特征的阈值的浮点值(8个字节) ,杂质减少(8字节).此外,叶节点存储由叶预测的恒定目标值.

    您可以在源代码中查看Cython类定义以获取详细信息.

    2023-02-12 15:48 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有