使用python sklearn增量训练随机森林模型

时间:2017-05-19 02:23:30

标签: python pickle random-forest training-data

我使用以下代码保存随机森林模型。我正在使用cPickle来保存训练有素的模型。当我看到新数据时,我可以逐步训练模型吗? 目前,列车组有大约2年的数据。有没有办法在另外两年训练,并且(有点)将它附加到现有的已保存模型。

$ ./a.out 2 "Soa" "8" "m" "4" "8"
48
4Soa
4m
84
88
8Soa
8m
Soa4
Soa8
Soam
m4
m8
mSoa

编辑1:我没有计算能力来同时训练模型4年的数据。

1 个答案:

答案 0 :(得分:5)

sklearn User Guide中讨论了您正在谈论的内容,以及逐步更新其他数据的模型:

  

虽然所有算法都无法逐步学习(即没有   一次看到所有实例),所有估算器都实现了   partial_fit API是候选者。实际上,学习的能力   从一小批实例中逐步增加(有时称为“在线”   学习“)是核心学习的关键,因为它保证了任何   给定时间主要内容中只有少量实例   存储器中。

它们包含一个实现partial_fit()的分类器和回归程序列表,但RandomForest不在其中。您还可以确认RFRegressor未实现部分适合on the documentation page for RandomForestRegressor

一些可能的前进方式:

  • 使用实现partial_fit()的回归程序,例如SGDRegressor
  • 检查您的RandomForest模型的feature_importances_属性,然后在删除不重要的功能后,在3年或4年的数据上重新训练模型
  • 仅使用最近两年的数据训练您的模型,如果您只能使用两年
  • 使用从所有四年数据中抽取的随机子集训练您的模型。
  • 更改tree_depth参数以限制模型的复杂程度。这节省了计算时间,因此可以允许您使用所有数据。它还可以防止过度拟合。使用交叉验证为您的问题选择最佳树深度超参数
  • 如果您还没有设置RF模型的参数n_jobs=-1,请在您的计算机上使用多个核心/处理器。
  • 使用更快的基于集合树的算法,例如xgboost
  • 在云中的大型计算机上运行模型拟合代码,例如AWS或dominodatalab