网站建设培训 店,seo常见优化技术,常州青竹网络做网站,导航条 Wordpress1.什么是XGBoost XGBoost(eXtreme Gradient Boosting)极度梯度提升树#xff0c;属于集成学习中的boosting框架算法。对于提升树#xff0c;简单说就是一个模型表现不好#xff0c;继续按照原来模型表现不好的那部分训练第二个模型#xff0c;依次类推。本质思想与GBDT一致…1.什么是XGBoost XGBoost(eXtreme Gradient Boosting)极度梯度提升树属于集成学习中的boosting框架算法。对于提升树简单说就是一个模型表现不好继续按照原来模型表现不好的那部分训练第二个模型依次类推。本质思想与GBDT一致构建多个基学习器使用加法模型学习前面基学习器的结果与真实值的偏差通过多个学习器的学习不断降低模型值和实际值的差。 最终模型的预测结果是由所有基学习器预测结果的加和。
2.XGBoost的目标函数 XGBoost整体思想就是直接把损失函数和正则项加起来合成一个整体的损失函数对这个损失函数求二阶导得到最终的obj通过obj计算得到一个分数这个分数越小越好最终通过obj计算得到的分数确定了树的结构和整个强学习器的分数。所以XGBoost不是通过拟合残差实现的而是计算obj函数直接得到的树结构。 目标函数由两部分组成第一部分是模型误差即样本真实值和预测值之间的差值第二部分是模型的结构误差即正则项通过使用超参数乘以结点个数和节点值限制模型的复杂度。 正则项公式如下 参数说明 优化目标: 由于是加法模型所以可以将正则项进行改写整体的正则项就等于前面t-1棵树的正则项加上当前回归树的正则项。 而在计算时前面t-1棵树正则项中的T和w是已经确定的整体优化目标可以近似表示: 正则项的确定只与要优化的当前的这颗回归树的叶子结点的w值和叶子结点的个数T有关。 由于树模型是阶跃的是不连续的不适合用梯度下降法所以需要将目标函数改写按照样本的顺序做遍历更改为按照叶子结点的顺序做遍历。例如叶子结点有w1、w2....wn。经过回归后落到w1叶子结点下的样本集合K1中包含有不同的预测值w1的损失值就是w1(叶子结点的值)的值与K1中不同预测值的损失加和以此类推。 已经将损失函数转化为与叶子结点的值w有关的多项式因为损失函数根据不同的任务定义所以无法提前预知损失函数的形式。接下来的任务是将抽象的损失函数分解为包含w的多项式通过泰勒二阶展开将w进行提取。
3.公式推导 使用泰勒二阶对目标函数展开。 泰勒二阶展开后的损失函数。 通过分步贪婪的到树的结构。确定树的结构就是来确定树的叶子结点的值w。 4. XGBoost的优缺点
4-1 优点
1精度更高GBDT 只用到一阶泰勒展开而 XGBoost 对损失函数进行了二阶泰勒展开。XGBoost 引入二阶导一方面是为了增加精度另一方面也是为了能够自定义损失函数二阶泰勒展开可以近似大量损失函数
2灵活性更强GBDT 以 CART 作为基分类器XGBoost 不仅支持 CART 还支持线性分类器使用线性分类器的 XGBoost 相当于带 L1 和 L2 正则化项的逻辑回归分类问题或者线性回归回归问题。此外XGBoost 工具支持自定义损失函数只需函数支持一阶和二阶求导
3正则化XGBoost 在目标函数中加入了正则项用于控制模型的复杂度。正则项里包含了树的叶子节点个数、叶子节点权重的 L2 范式。正则项降低了模型的方差使学习出来的模型更加简单有助于防止过拟合这也是XGBoost优于传统GBDT的一个特性。
4防止过拟合 1.Shrinkage缩减相当于学习速率。XGBoost 在进行完一次迭代后会将叶子节点的权重乘上该系数主要是为了削弱每棵树的影响使每棵树的影响不会过大让后面有更大的学习空间。主要用于传统GBDT的实现也有学习速率 2.Column Subsampling(列采样)类似于随机森林选区部分特征值进行建树其中又分为两个方式:方式一按层随机采样在对同一层结点分裂前随机选取部分特征值进行遍历计算信息增益方式二在建一棵树前随机采样部分特征值然后这棵树的所有结点分裂都遍历这些特征值计算信息增益。这也是XGBoost异于传统GBDT的一个特性
5缺失值处理XGBoost和LightGBM是支持缺失值的并且XGBoost和LightGBM对缺失值的处理方法相同。xgboost为缺失值设定了默认的分裂方向对于存在某一维特征缺失的样本XGBoost会先将其划入左子树计算增益再划入右子树计算训练增益对比放在左右子树增益的大小决定放在哪个子树。
4-2 缺点
1计算量大:虽然利用预排序和近似算法可以降低寻找最佳分裂点的计算量但在节点分裂过程中仍需要遍历数据集 (2)内存消耗大预排序过程的空间复杂度过高不仅需要存储特征值还需要存储特征对应样本的梯度统计值的索引相当于消耗了两倍的内存。
5. XGBoost与GBDT的联系和区别有哪些
1GBDT是机器学习算法XGBoost是该算法的工程实现。
2正则项在使用CART作为基分类器时XGBoost显式地加入了正则项来控制模型的复杂度有利于防止过拟合从而提高模型的泛化能力。
3导数信息GBDT在模型训练时只使用了代价函数的一阶导数信息XGBoost对代价函数进行二阶泰勒展开可以同时使用一阶和二阶导数。
4基分类器传统的GBDT采用CART作为基分类器XGBoost支持多种类型的基分类器比如线性分类器。
5子采样传统的GBDT在每轮迭代时使用全部的数据XGBoost则采用了与随机森林相似的策略支持对数据进行采样。
6缺失值处理传统GBDT没有设计对缺失值进行处理XGBoost能够自动学习出缺失值的处理策略。
7并行化传统GBDT没有进行并行化设计注意不是tree维度的并行而是特征维度的并行。XGBoost预先将每个特征按特征值排好序存储为块结构分裂结点时可以采用多线程并行查找每个特征的最佳分割点极大提升训练速度。 Reference 115.【近似算法】加权分位法_哔哩哔哩_bilibili 2XGBoost算法介绍_月落乌啼silence的博客-CSDN博客_xgboost 3深入理解XGBoost - 知乎