RandomForestRegressor predict() 从根本上来说是慢的吗?
Is RandomForestRegressor predict() fundamentally slow?
我每秒只能用这个超级慢的模型做出 2-3 次预测。
使用 LinearRegression
模型时,我可以轻松实现 40 倍加速。
我正在使用 scikit-learn
python 包和一个包含 3 列(day
、hour
和 result
)的非常简单的数据集,所以基本上是 2功能。
day
和 hour
是分类变量。
自然有7day
和24hour
类。
训练样本相对较小(cca 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)
以下是使用 sklearn 优化 RandomForest 的一些步骤
- 通过将多个数据点传递给
predict()
进行批量预测。这减少了 Python 开销。
- 减少树的深度。使用
min_samples_leaf
或 min_samples_split
之类的东西来避免有很多小的决策节点。要使用 5% 的训练集,请使用 0.05
.
- 减少树木的数量。通过稍微修剪树,RF 通常只需
n_estimators=10
. 就可以正常执行
- 使用像 emtrees 这样的优化 RF 推理实现。最后一件事要尝试,也取决于先前的步骤才能表现良好。
必须使用交叉验证或类似方法验证优化模型的性能。第 2 步和第 3 步是相关的,因此可以进行网格搜索以找到最能保持模型性能的组合。
我每秒只能用这个超级慢的模型做出 2-3 次预测。
使用 LinearRegression
模型时,我可以轻松实现 40 倍加速。
我正在使用 scikit-learn
python 包和一个包含 3 列(day
、hour
和 result
)的非常简单的数据集,所以基本上是 2功能。
day
和 hour
是分类变量。
自然有7day
和24hour
类。
训练样本相对较小(cca 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)
以下是使用 sklearn 优化 RandomForest 的一些步骤
- 通过将多个数据点传递给
predict()
进行批量预测。这减少了 Python 开销。 - 减少树的深度。使用
min_samples_leaf
或min_samples_split
之类的东西来避免有很多小的决策节点。要使用 5% 的训练集,请使用0.05
. - 减少树木的数量。通过稍微修剪树,RF 通常只需
n_estimators=10
. 就可以正常执行
- 使用像 emtrees 这样的优化 RF 推理实现。最后一件事要尝试,也取决于先前的步骤才能表现良好。
必须使用交叉验证或类似方法验证优化模型的性能。第 2 步和第 3 步是相关的,因此可以进行网格搜索以找到最能保持模型性能的组合。