我使用下面的代码来保存随机森林模型。我正在使用 cPickle 保存训练后的模型。当我看到新数据时,我可以增量训练模型吗?
目前,训练集大约有2年的数据。有没有办法再训练两年并将其(某种程度上)附加到现有保存的模型中。
rf = RandomForestRegressor(n_estimators=100)
print ("Trying to fit the Random Forest model --> ")
if os.path.exists('rf.pkl'):
print ("Trained model already pickled -- >")
with open('rf.pkl', 'rb') as f:
rf = cPickle.load(f)
else:
df_x_train = x_train[col_feature]
rf.fit(df_x_train,y_train)
print ("Training for the model done ")
with open('rf.pkl', 'wb') as f:
cPickle.dump(rf, f)
df_x_test = x_test[col_feature]
pred = rf.predict(df_x_test)
编辑 1:我没有计算能力来一次性使用 4 年的数据训练模型。
你所说的,用额外的数据增量更新模型,在 sklearn 中讨论过用户指南 https://scikit-learn.org/stable/modules/computing.html#strategies-to-scale-computationally-bigger-data:
尽管并非所有算法都可以增量学习(即无需
一次看到所有实例),所有估计器都实现了
partial_fit API 是候选者。其实,学习能力
从小批量实例中逐步增量(有时称为“在线
学习”)是核心外学习的关键,因为它保证在任何时候
在给定的时间内,主程序中只会出现少量实例
记忆。
它们包括实现分类器和回归器的列表partial_fit()
,但 RandomForest 并不在其中。您还可以确认 RFRegressor 没有实现部分拟合在 RandomForestRegressor 的文档页面上 http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html.
一些可能的前进方向:
- 使用确实实现的回归器
partial_fit()
,例如 SGDRegressor
- 检查您的随机森林模型
feature_importances_
属性,然后在删除不重要的特征后,使用 3 或 4 年的数据重新训练模型
- 如果只能使用两年的数据,则仅使用最近两年的数据训练模型
- 使用从所有四年的数据中抽取的随机子集来训练您的模型。
- 改变
tree_depth
参数来限制模型的复杂程度。这节省了计算时间,因此可以让您使用所有数据。它还可以防止过度拟合。使用交叉验证为您的问题选择最佳的树深度超参数
- 设置 RF 模型的参数
n_jobs=-1
如果您还没有在您的计算机上使用多个核心/处理器。
- 使用更快的基于集成树的算法,例如 xgboost
- 在云中的大型机器(例如 AWS 或 dominodatalab)上运行模型拟合代码
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)