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



我正在使用scikit的随机森林实现:

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-60倍的内存来存储随机森林的树?

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

有关详细信息,您可以查看源代码中的Cython类定义。

相关内容

  • 没有找到相关文章

最新更新