Python Scikit学习随机林占用太多内存 问题

Python Scikit学习随机林占用太多内存 问题,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,我有一个数据集,有900000行和8列。其中6列是整数,另外两列是浮点。当试图适应大约1/4的数据集(200000)时,代码运行良好,耗时不到30秒。当我尝试运行400000行或更多行时,我的计算机会永久冻结,因为python.exe进程占用超过5GB的RAM 尝试 我尝试的第一件事是将warm_state参数设置为True,然后一次遍历50000行数据 n = 0 i = 50,000 clf = sk.RandomForestClassifier(oob_score = True,n_j

我有一个数据集,有900000行和8列。其中6列是整数,另外两列是浮点。当试图适应大约1/4的数据集(200000)时,代码运行良好,耗时不到30秒。当我尝试运行400000行或更多行时,我的计算机会永久冻结,因为python.exe进程占用超过5GB的RAM

尝试 我尝试的第一件事是将warm_state参数设置为True,然后一次遍历50000行数据

n = 0
i = 50,000  
clf = sk.RandomForestClassifier(oob_score = True,n_jobs=-1, n_estimators = n, warm_start=True)
While i<= 850,000:
    clf.fit(X.ix[n:i],Y.ix[n:i])
    n += 50,000
    i += 50,000
虽然有些数据确实比其他数据需要更长的处理时间,但没有一个数据可以占用5GB的内存


数据的大小只有几兆字节,所以我看不出它怎么会占用这么多内存来处理

您正在构建的模型太大了。获取更多ram或构建更小的模型。若要构建较小的模型,请创建较少的树,或限制教学树的深度,例如使用“最大深度”(max_depth)。尝试使用max_depth=5,看看会发生什么。 还有,你们有几节课?更多的课程会让一切变得更昂贵


另外,您可能想试试这个:

对于太大的随机林模型,我也遇到了类似的情况。问题是树太深了,占用了很多内存。为了处理它,我设置了
max_depth=6
,这样可以减少内存。我甚至把它写在日记里。在本文中,我使用了32k行数据集,共有15列。设置
max_depth=6
可将内存消耗降低66倍,并保持类似的性能(在本文中,性能甚至会提高)。

一个简单的带浮点数的numpy矩阵,900000 x 8 x 4字节=2880000只需要约28mb的内存。我看到随机森林使用的估计数大约是50。尽量减少到10。如果仍然不起作用,对数据集进行PCA并将其提供给RF@pbu好主意,但没用。PCA到底是什么?PCA是一种降维:。将PCA的前100个功能输入RF,看看它是如何运行的。应该很快。另一个想法是将列车分成10k行的批次。我认为随机森林支持批量训练。
n = 50
clf = sk.RandomForestClassifier(oob_score = True,n_jobs=-1, n_estimators = n, warm_start=True)
Z = X[['DayOfWeek','PdDistrict','Year','Day','Month']] # takes 15s and additional ~600mb RAM (800 total)
Z = X[['X','Address','Y']] # takes 24.8s and additional 1.1GB RAM (1389mb total)
Z = X # never finishes peaks at 5.2GB
%time clf.fit(Z.ix[0:400000],Y.ix[0:400000])