我正在使用scikit的随机森林实现:
sklearn.ensemble.RandomForestClassifier(n_estimators=100,
max_features="auto",
max_depth=10)调用rf.fit(...)后,进程的内存使用量增加了80‘s,或每棵树的为0.8MB(我还尝试了许多具有类似结果的其他设置。我使用top和psutil来监视内存的使用)
深度为10的二叉树最多应该有2^11-1 = 2047元素,这些元素都可以存储在一个密集的数组中,这样程序员就可以很容易地找到任何给定元素的父母和子元素。
每个元素都需要在拆分和切断中使用的特性索引,即6-16字节,这取决于程序员的经济性。在我的例子中,这转化为每个树的0.03MB。
为什么scikit的实现使用20-60x的内存来存储随机森林的树?
发布于 2013-12-06 00:56:29
每个决策(非叶)节点存储左、右支路整数索引(2x8字节)、用于拆分的特征索引(8个字节)、决策特征阈值的浮动值(8个字节)、杂质减少(8个字节)。此外,叶节点存储由叶预测的常量目标值。
您可以查看源代码中的Cython class definition以获得详细信息。
https://stackoverflow.com/questions/20413392
复制相似问题