XGBoost推导过程
2017-03-04 00:35
387 查看
参考:http://www.52cs.org/?p=429
模型:
目标函数:
模型学习:additive training:
如何选择每一轮加入什么 f 呢?答案是非常直接的,选取一个 f 来使得我们的目标函数尽量最大地降低。
这个公式可能有些过于抽象,我们可以考虑当l是平方误差的情况。这个时候我们的目标可以被写成下面这样的二次函数:
泰勒展开近似:
更加一般的,对于不是平方误差的情况,我们会采用如下的泰勒展开近似来定义近似的目标函数,方便我们进行这一步的计算。
这一个目标函数只依赖于每个数据点的在误差函数上的一阶导数和二阶导数
树的复杂度
对于f的定义做一下细化,把树拆分成结构部分q和叶子权重部分 w
树的复杂度:
关键步骤
通过这个目标函数来求解出最好的w,以及最好的w对应的目标函数最大的增益:
这里只涉及到了如何求一个一维二次函数的最小值的问题:
枚举所有不同树结构的贪心法
枚举所有可能的分割方案。要枚举所有 x<a 这样的条件,对于某个特定的分割a我们要计算a左边和右边的导数和。
观察这个目标函数,大家会发现第二个值得注意的事情就是引入分割不一定会使得情况变好,因为我们有一个引入新叶子的惩罚项。优化这个目标对应了树的剪枝, 当引入的分割带来的增益小于一个阀值的时候,我们可以剪掉这个分割。
模型:
目标函数:
模型学习:additive training:
如何选择每一轮加入什么 f 呢?答案是非常直接的,选取一个 f 来使得我们的目标函数尽量最大地降低。
这个公式可能有些过于抽象,我们可以考虑当l是平方误差的情况。这个时候我们的目标可以被写成下面这样的二次函数:
泰勒展开近似:
更加一般的,对于不是平方误差的情况,我们会采用如下的泰勒展开近似来定义近似的目标函数,方便我们进行这一步的计算。
这一个目标函数只依赖于每个数据点的在误差函数上的一阶导数和二阶导数
树的复杂度
对于f的定义做一下细化,把树拆分成结构部分q和叶子权重部分 w
树的复杂度:
关键步骤
通过这个目标函数来求解出最好的w,以及最好的w对应的目标函数最大的增益:
这里只涉及到了如何求一个一维二次函数的最小值的问题:
枚举所有不同树结构的贪心法
枚举所有可能的分割方案。要枚举所有 x<a 这样的条件,对于某个特定的分割a我们要计算a左边和右边的导数和。
观察这个目标函数,大家会发现第二个值得注意的事情就是引入分割不一定会使得情况变好,因为我们有一个引入新叶子的惩罚项。优化这个目标对应了树的剪枝, 当引入的分割带来的增益小于一个阀值的时候,我们可以剪掉这个分割。
相关文章推荐
- 机器学习18-XGBoost的推导过程
- XgBoost推导与总结
- BOOST_PP_CAT / BOOST_PP_SEQ_CAT / BOOST_PP_SEQ_SIZE / BOOST_PP_SEQ_HEAD / BOOST_PP_LESS_EQUAL 等 模拟编译器的推导过程
- 通俗易懂的Xgboost原理推导
- python环境下Xgboost的安装过程
- 安装xgboost过程中的一些坑
- AUX778076_SEQUENCE_NAME(假设为boost::mpl::vector)模拟编译器的推导过程
- 理解XGBoost机器学习模型的决策过程
- Windows下安装xgboost的过程总结及dll问题解决方案
- 遗传算法应用于XGBoost的调参过程
- XGBoost设计思路与数学推导
- Xgboost推导及分析
- python3.6中安装xgboost过程及遇到的问题解决
- CentOS6安装xgboost方法
- 最小二乘法矩阵求导过程的推导
- ALS过程推导
- anacondas 下 安装xgboost & keras
- EM算法推导过程
- win10安装XGBoost,遇到XGBoostLibraryNotFound错误
- 安装Xgboost的一些坑