我想运行一个随机森林分类器模型。我的数据集非常大,有100万行和300列。当然,最好不要连续运行这个模型3天。所以我想知道是否有一些好的实践可以在运行时间和预测质量之间找到最佳的权衡。
下面是一些a当时的想法:
我可以使用x行的随机子样本来调整参数,然后使用具有所有数据的模型的参数吗?(如果是,我如何找到x的最佳值?)
是否有一种方法可以知道在什么时候继续添加更多的数据是无用的,因为预测将停止改进?(即,在运行时间内能给我最好结果的最小行数是多少)
如何估计模型的运行时间?4000行模型需要4分钟,8000行需要10分钟,运行时间是指数型的,或多或少是线性的,我可以预期运行时间为1280分钟,有100万行?
-
随机子抽样然后对完整数据进行调优很少有效,因为小的子样本可能不能代表完整数据。
-
关于数据量与模型质量:尝试使用来自sklearn的学习曲线:https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.learning_curve.html
train_sizes, train_scores, test_scores, fit_times, _ = learning_curve(
estimator,
X,
y,
cv=cv,
n_jobs=n_jobs,
train_sizes=train_sizes,
return_times=True,
)
通过这种方式,您将能够绘制数据量与模型性能的关系。下面是一些绘图的例子:https://scikit-learn.org/stable/auto_examples/miscellaneous/plot_kernel_ridge_regression.html sphx-glr-auto-examples-miscellaneous-plot-kernel-ridge-regression-py
https://scikit-learn.org/stable/auto_examples/model_selection/plot_learning_curve.html sphx-glr-auto-examples-model-selection-plot-learning-curve-py
- 估计总时间是困难的,因为它不是线性的。
一些额外的实用建议:
- 设置
n_jobs=-1
在所有核上并行运行模型; - 使用任何特征选择方法来减少特征的数量。300个功能真的很多,应该可以去掉一半左右,而不会严重影响模型的性能。