网站首页 > 技术文章 正文
1.介绍
随机森林的方法是通过对多个决策树的预测求平均值来获得比单个决策树更好的性能。
我们把随机森林方法称为“集成方法”(ensemble methods)。根据定义,集成方法结合了几个模型的预测(例如,在随机森林的情况的几个树)。gradient boosting是另一种集成方法。
gradient boosting是一种通过循环将模型迭代添加到集合中的方法。
它首先用一个模型初始化集合,这个模型的预测可能相当幼稚(即使它的预测非常不准确,但随后加入到集合中也会解决这些错误。)
然后,我们开始循环:
- 首先,我们使用当前集合为数据集中的每个观测值生成预测。为了进行预测,我们将集合中所有模型的预测相加。
- 这些预测用于计算损失函数(例如,均方误差)。
- 然后,我们使用损失函数来拟合一个新的模型,该模型将被添加到集合中。具体来说,我们确定模型参数,以便将此新模型添加到集合中将减少损失(旁注:“gradient boosting”中的“梯度”指的是我们将使用损失函数的梯度下降来确定这个新模型中的参数。)
- 最后,我们将新模型加入到集成中,并且。。。
- ... 重复!
本例使用XGBoost库。XGBoost是extreme gradient boosting的缩写,它是gradient boosting的一个实现,具有几个额外的特性,主要关注性能和速度(Scikit-learn有另一个版本的gradient boosting,但XGBoost有一些技术优势。)
2.例子
3.调参
XGBoost有几个参数可以显著影响精确度和训练速度。以下列举了一些参数:
(1)n_estimators
n_estimators指定了上述建模周期的次数。它等于我们在集合中包含的模型的数量。
过低的值会导致欠拟合,从而导致对训练数据和测试数据的预测都不准确。
过高的值会导致过拟合,这会导致对训练数据的准确预测,但对测试数据的预测不准确(这是我们关心的)。
典型值范围为100-1000,但这在很大程度上取决于下面讨论的learning_rate参数。
(2)early_stopping_rounds
early_stopping_rounds提供了一种自动找到n_estimators的理想值的方法。当验证分数停止改善时,提前停止会导致模型停止迭代。明智的做法是,为n_estimators设置一个高值,然后使用early_stopping_rounds来找到停止迭代的最佳时间。
由于随机性有时会导致单轮验证分数没有提高,因此需要指定一个数字。设置early_stopping_rounds=5是一个合理的选择。在这种情况下,我们在连续5轮验证分数下降后停止。
当使用early_stopping_rounds时,还需要留出一些数据来计算验证分数-这是通过设置eval_set参数来完成的。
(3)learning_rate
我们不需要简单地将每个组件模型的预测相加,而是将每个模型的预测乘以一个小数字(称为learning_rate),然后再将它们相加。
这意味着我们添加到集合中的每一棵树对我们的帮助更少。因此,我们可以在不过度拟合的情况下为n_estimators设置一个更高的值。如果使用提前停止,将自动确定适当的树数。
一般来说,较小的学习率和大量的估计器将产生更精确的XGBoost模型,尽管由于该模型在整个周期中进行了更多的迭代,因此它也需要更长的时间来训练。默认情况下,XGBoost将learning_rate设置为0.1
(4)n_jobs
在考虑运行时的大型数据集上,可以使用并行性更快地构建模型。通常将参数n_jobs设置为机器上的内核数。在较小的数据集上,这将无济于事。
由此产生的模型不会更好,因此对拟合时间进行微观优化通常只会分散注意力。但是,它在大型数据集中很有用,否则在fit命令执行期间会花费很长时间等待。
4.总结
XGBoost是处理标准表格数据的领先软件库(存储在DataFrames中的数据类型,而不是图像和视频等的数据类型)。通过仔细的参数调整,可以训练出高精度的模型。
猜你喜欢
- 2024-10-08 一文了解RF,GBDT,XGBoost,lightGBM之间的异同
- 2024-10-08 Mars Remote API轻松分布式执行Python函数
- 2024-10-08 如何画XGBoost里面的决策树?(决策树 graphviz)
- 2024-10-08 AI算法机器学习常见面试题(四)(ai算法测试工程师面试)
- 2024-10-08 Python机器学习库Sklearn系列教程(21)-参数优化
- 2024-10-08 LightGBM的参数详解以及如何调优(lightgbm模型是什么)
- 2024-10-08 XGBoost在携程搜索排序中的应用(携程排名规则)
- 2024-10-08 94《风控炼丹炉模型调参-课程简介》(视频版)
- 2024-10-08 如何选择最佳模型:GBDT、LightGBM、XGBoost、AdaBoost 轻松上手
- 2024-10-08 年末奉送!数据分析利器:XGBoost算法最佳解析
- 1510℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 541℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 497℃MySQL service启动脚本浅析(r12笔记第59天)
- 477℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 475℃启用MySQL查询缓存(mysql8.0查询缓存)
- 454℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 434℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 432℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)