问题
我有一个包含900,000行和8列数据的数据集。其中6列是整数,另外两列是浮点数。当我尝试拟合1/4的数据集(200,000行)时,代码可以正常运行且不到30秒就能完成。但是,当我尝试运行400,000行或更多的数据时,我的电脑会永久性地冻结,因为python.exe进程占用了超过5GB的RAM。
尝试过的方法
首先,我尝试将warm_state参数设置为True,并分批处理数据,每次处理50,000行。
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
这没有解决任何问题,我遇到了同样的问题。
接下来我尝试找出是否有一部分数据需要更多的内存来处理。我记录了python.exe进程中的内存增加量以及处理完成所需的时间(如果确实完成了)。
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])
尽管某些数据处理时间比其他数据长,但它们中的任何一个都不足以解释为什么会占用5 Gb的内存。
这些数据的大小只有几兆字节,因此我不明白它如何需要如此大量的内存来处理。