我正在使用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倍的内存来存储随机森林的树?