scikit-learn 随机森林过多的内存使用
Posted
技术标签:
【中文标题】scikit-learn 随机森林过多的内存使用【英文标题】:scikit-learn Random Forest excessive memory usage 【发布时间】:2015-04-16 07:22:13 【问题描述】:我在 Windows 7 64 位中使用 python 3.4 运行 scikit-learn(版本 0.15.2)随机森林。我有这个非常简单的模型:
import numpy as np
from sklearn.ensemble import RandomForestClassifier
#Data=np.genfromtxt('C:/Data/Tests/Train.txt', delimiter=',')
print ("nrows = ", Data.shape[0], "ncols = ", Data.shape[1])
X=np.float32(Data[:,1:])
Y=np.int16(Data[:,0])
RF = RandomForestClassifier(n_estimators=1000)
RF.fit(X, Y)
X 数据集有大约 30,000 x 500 个元素,格式如下:
139.2398242257808,310.7242684642465,...
即使没有并行处理,内存使用量最终也会攀升至 16 GB!我想知道为什么内存使用量这么大。
我知道之前有人问过这个问题,但在 0.15.2 版本之前...
有什么建议吗?
【问题讨论】:
您的估算器参数非常高,您没有控制树的深度。 谢谢。对于约 100 个类的多分类情况,您对树的深度范围和 n_estimator 有什么建议? 您是否尝试过减少估算器的数量并查看它是否会减少使用的内存?恐怕这只是一个猜测——我想知道你是否正在创建许多非常深的树。 是的,它正在减少内存使用量。而且由于树木的深度尚未确定,我想它会变得疯狂。我有一个包含许多特性和类的大数据集,我认为我需要使用许多树。我需要做更多的实验...... 您还可以尝试通过增加每次拆分所需的数据点数量来控制树的深度。我认为默认是两个。增加此值可能会增加估算器的数量。 【参考方案1】:不幸的是,内存消耗与类的数量成线性关系。由于您有 100 多个样本和相当数量的样本,内存爆炸也就不足为奇了。解决方案包括控制树的大小(max_depth
、min_samples_leaf
、...)、它们的数量(n_estimators
)或减少问题中的类数量(如果可能的话)。
【讨论】:
谢谢。我已经对你提到的所有这些进行了试验,现在内存问题已经好了。罪魁祸首是没有控制树木的深度。【参考方案2】:尝试通过设置较小的 n_estimators 参数来减少树的数量。然后,您可以尝试使用 max_depth 或 min_samples_split 来控制树的深度,并用深度换取更多的估计器。
【讨论】:
以上是关于scikit-learn 随机森林过多的内存使用的主要内容,如果未能解决你的问题,请参考以下文章