使用随机森林回归器进行模型拟合会占用所有RAM,这会导致在线托管笔记本环境(Google colab或Kaggle内核)崩溃。你们可以帮我优化模型吗?
我已经尝试对参数进行超调,例如减少估计量,但是不起作用。 df.info()
显示火车数据的4446965条记录,这些记录占用约1GB的内存。
我无法在此处发布整个笔记本代码,因为它太长了,但是请您检查this link以获得参考。我在下面提供了一些与数据框有关的信息。
clf = RandomForestRegressor(n_estimators=100,min_samples_leaf=2,min_samples_split=3, max_features=0.5 ,n_jobs=-1)
clf.fit(train_X, train_y)
pred = clf.predict(val_X)
train_x.info()显示3557572条记录占用了近542 MB的内存
我仍然开始使用ML,我们将不胜感激。谢谢!
答案 0 :(得分:0)
posts
本质上给Random Forest
和CPU
带来了沉重的负担,这是它众所周知的缺点之一!因此,您的问题没有任何异常。
此外,更具体地说,此问题有不同的因素引起,例如:
RAM
)。n_estimators
)。max_depth
)上需要的最小样本数。此外,min_samples_leaf
已明确说明了此问题,我在这里引用:
控制尺寸的参数的默认值 树木(例如
Scikit-learn
,max_depth
等)导致完全生长 和未修剪的树,在某些数据上可能非常大 套。为了减少内存消耗,该方法的复杂性和大小 应该通过设置这些参数值来控制树。
尤其是 min_samples_leaf
并没有太多可以做的事情(据我所知)。
相反,您需要更改上述参数的值,例如:
只有在特征数量已经很高时,才尝试保留最重要的特征(请参见Feature Selection in Scikit-learn和Feature importances with forests of trees)。
尝试减少估计量。
Scikit-learn
的默认值为max_depth
,这意味着节点将一直扩展到所有叶子都是纯净的,或者直到所有叶子都包含少于None
个样本为止。
min_samples_split
默认为min_samples_leaf
:任何深度的分割点只有在其左右分支中至少留有1
个训练样本的情况下才会被考虑。这可能会平滑模型,尤其是在回归分析中。
因此,请尝试通过了解参数对性能的影响来更改参数,您需要的参考是this。
min_samples_leaf
并将元数据加载到硬盘上。.etc或进行任何优化,这很尴尬,但仅提及这样的选择,{{3 }}是基本实现的示例!旁注:
实际上,我在Random Forest
笔记本电脑上体验到将参数Core i7
设置为n_jobs
会使机器不堪重负,我总是发现保留默认设置{{1} }!尽管从理论上讲应该相反!