【问题标题】:scikit-learn Random Forest excessive memory usagescikit-learn 随机森林过多的内存使用
【发布时间】: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 有什么建议?
  • 您是否尝试过减少估算器的数量并查看它是否会减少使用的内存?恐怕这只是一个猜测——我想知道你是否正在创建许多非常深的树。
  • 是的,它正在减少内存使用量。而且由于树木的深度尚未确定,我想它会变得疯狂。我有一个包含许多特性和类的大数据集,我认为我需要使用许多树。我需要做更多的实验......
  • 您还可以尝试通过增加每次拆分所需的数据点数量来控制树的深度。我认为默认是两个。增加此值可能会增加估算器的数量。

标签: python scikit-learn random-forest


【解决方案1】:

不幸的是,内存消耗与类的数量成线性关系。由于您有 100 多个样本和相当数量的样本,内存爆炸也就不足为奇了。解决方案包括控制树的大小(max_depthmin_samples_leaf、...)、它们的数量(n_estimators)或减少问题中的类数量(如果可能的话)。

【讨论】:

  • 谢谢。我已经对你提到的所有这些进行了试验,现在内存问题已经好了。罪魁祸首是没有控制树木的深度。
【解决方案2】:

尝试通过设置较小的 n_estimators 参数来减少树的数量。然后,您可以尝试使用 max_depth 或 min_samples_split 来控制树的深度,并用深度换取更多的估计器。

【讨论】:

    猜你喜欢
    • 2015-08-26
    • 2013-12-23
    • 2015-03-28
    • 2017-12-10
    • 2019-04-01
    • 2013-04-26
    • 2015-02-20
    • 2014-11-12
    • 2015-09-16
    相关资源
    最近更新 更多