【问题标题】:Is RandomForestRegressor predict() fundamentally slow?RandomForestRegressor predict() 从根本上来说很慢吗?
【发布时间】:2017-11-20 13:45:21
【问题描述】:

使用这个超级慢的模型,我每秒只能做出 2-3 次预测。 使用LinearRegression 模型时,我可以轻松实现 40 倍加速。

我正在使用 scikit-learn python 包和一个非常简单的数据集,其中包含 3 列(dayhourresult),所以基本上有 2 个功能。
dayhour 是分类的变量。
自然有 7 个day 和 24 个hour 类别。
训练样本相对较小(大约 5000 个样本)。
训练它只需几秒钟。
但是当我继续预测某些事情时,它会非常缓慢。

所以我的问题是:这是RandomForrestRegressor 的基本特征还是我实际上可以对此做些什么?

from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor(n_estimators=100,
                              max_features='auto',
                              oob_score=True,
                              n_jobs=-1,
                              random_state=42,
                              min_samples_leaf=2)

【问题讨论】:

  • 你能给我们提供数据和完整的代码来复制行为吗?还发布有关 python、scikit-learn、numpy 和您的系统版本的信息。
  • 你正在经历什么时代?您是在循环中单独预测示例还是一次全部预测?
  • @ChesterVonWinchester 嗯,好问题...由于更广泛的程序要求,目前我在 for 循环中执行此操作,但我可以更改它以使其一次预测...让我测试一下会尽快回复您。
  • @ChesterVonWinchester 你是对的......我想我在线性回归上逃脱了,但对于随机森林,在每次预测之前都有一些重要的设置时间。我运行了 280 个预测。平均时间是 29.2s 同时运行相同的预测(通过单个 DataFrame)-> avg。时间为 117 毫秒。 Ans 的加速超过 200 倍。
  • 如果我没记错的话,预测代码是cython,所以你可以同时传递给predict的数据越多,你花在纯python代码上的时间就越少。

标签: python scikit-learn random-forest


【解决方案1】:

以下是使用 sklearn 优化 RandomForest 的一些步骤

  1. 通过将多个数据点传递给predict() 进行批量预测。这减少了 Python 开销。
  2. 减少树的深度。使用min_samples_leafmin_samples_split 之类的东西来避免有很多小的决策节点。要使用 5% 的训练集,请使用 0.05
  3. 减少树的数量。在经过一些修剪的树的情况下,RF 通常只需 n_estimators=10 就可以正常运行。
  4. 使用优化的射频推理实现,例如emtrees。最后一件事要尝试,也取决于之前的步骤才能表现良好。

必须使用交叉验证或类似方法验证优化模型的性能。第 2 步和第 3 步是相关的,因此可以进行网格搜索以找到最能保持模型性能的组合。

【讨论】:

  • 第 1 点解决了我的问题...谢谢
猜你喜欢
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
相关资源
最近更新 更多