Machine learning 为什么scikit学习';随机森林使用了这么多内存?

Machine learning 为什么scikit学习';随机森林使用了这么多内存?,machine-learning,classification,scikit-learn,decision-tree,random-forest,Machine Learning,Classification,Scikit Learn,Decision Tree,Random Forest,我正在使用scikit的随机林实现: sklearn.ensemble.RandomForestClassifier(n_estimators=100, max_features="auto", max_depth=10) 调用rf.fit(…)后,进程的内存使用量增加了80MB,或每棵树增加了0.8MB(我还尝试了许多其他设置,结

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

sklearn.ensemble.RandomForestClassifier(n_estimators=100, 
                                        max_features="auto", 
                                        max_depth=10)
调用
rf.fit(…)
后,进程的内存使用量增加了80MB,或每棵树增加了0.8MB(我还尝试了许多其他设置,结果类似。我使用
top
psutil
来监视内存使用情况)

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

每个元素都需要分割和截止中使用的功能的索引,或者6-16字节,这取决于程序员的经济性。在我的例子中,这转化为每棵树0.01-0.03MB

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

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


您可以查看源代码中的详细信息。

如果我使用10个估计器(默认值)对某些数据进行培训,大约使用了2.2 GB,如果我使用200个估计器对相同的数据进行训练,内存使用量大约是2.2 GB。你知道为什么树的数量是树的20倍时,内存使用量几乎相同吗?这很奇怪。也许你可以尝试使用来理解这是如何发生的/为什么发生的。谢谢你的建议。我之前的研究中有部分是不正确的陈述。我真正观察到的是,估计数的两倍或三倍似乎没有什么不同,但确实有一些不同。事实上,将n_估计数增加20倍确实会有不同,但一个小的,可能会多使用10%的内存,而不是你可能预期的2000%。我只是想为未来的读者澄清这一点。