XGBOOST整理
来源:互联网 发布:云计算 政策 编辑:程序博客网 时间:2024/06/05 10:58
1、目标函数
首先说一下目标函数,机器学习常见的目标函数主要由两部分组成:损失函数和正则化项。
其中
平方损失函数:
逻辑损失函数:
正则化函数主要有两种:
L1正则化:
L2正则化:
其中损失函数的主要作用是衡量模型拟合训练数据的能力;正则化项的主要作用是使得模型更加简单一些。
2、Regression tree(CAST)和Regression Tree Ensemble
2.1. Regression tree (also known as classification and regression tree):
Decision rules same as in decision tree
Contains one score in each leaf value
2.2 Regression Tree Ensemble
2.3 集成方法(Tree Ensemble methods)的优点:
(1)被广泛的应用,如GBDT,随机森林等;
(2)对于输入的范围不是很明感,因而你不必需要细致的去做特征的归一化;
(3)可以学得特征间的相互关系;
(4)可以规模化,广泛应用于工业界。
3、模型和参数
3.1 模型
假定我们有K棵树:
其中
Think: regression tree is a function that maps the attributes to the score
3.2 参数
(1)每棵树的的结构,树上叶子的分数;
(2)或者使用树的函数作为参数:
我们该如何学得一棵树呢?
定义一个目标函数,并且去优化它!!
3.3 集成方法的目标函数
模型:
目标函数:
4、Gradient Boosting
目标函数:
其中
在这里我们不能通过SGD(随机梯度下降)来最优化这个目标函数,从而
找到
解决方案:加法模型(Boosting)
通过每次在原函数上添加一个新的函数来进行迭代:
那现在的问题是我们该怎么得到每次迭代中所添加的
答案就是最优化目标函数。
在第t轮时,模型函数变为
对于平方损失函数:
对于平方损失函数,目标函数的形式并不是很复杂,但是对于其它形式的损失函数,我们该怎么办呢?
在这里我们通过泰勒展开式来近似目标函数。
函数的泰勒展开式:
令
则目标函数的近似为:
我们把固定值移除,则目标函数近似为:
然后我们来重新定义一下需要学习的树,我们使用一系列的叶子分数来表示树的结构:
其中
树的结构复杂度表示为:
其中
定义:
则目标函数可以表示为:
定义:
目标函数变为:
则可求得
上式第一项可以用来衡量模型的好坏。
枚举所有不同树结构的贪心法
通过上面的推论我们可以得出寻找最佳树的方法。
(1)列举可能的树结构q;
(2)通过公式
(3)找到最佳的树的结构(分数最小的那个树结构),并计算得到叶子的权重
年轻人,想法是好的,但是树的结构空间是无穷大的,因而这种方法果断不行。。
通常,我们可以通过贪心算法来得到比较好的树结构。
(1)从一颗深度为0的树开始操作。
(2)对于树上的每个叶子节点,试图来添加一个分裂点将原来的叶子节点进行细分。通过添加分裂点,原来的目标函数变化为:
现在的最优问题变为:如何找到最好的分裂点?对于每次扩展,我们
还是要枚举所有可能的分割方案,如何高效地枚举所有的分割呢?我
假设我们要枚举所有
找最优分裂点的方法:
(1)对于每个叶子节点,枚举在其上的所有特征;
(2)对于每个特征,根据特征值来对样本进行排序;
(3)线性扫描每个分裂点,找到该特征的最优分裂点;
(4)从所有特征中找到最优的分裂点作为该叶子节点的分裂点。
时间复杂度(树的深度为K):
时间复杂度为
从添加分裂点之后的增益可以看出,添加分裂点之后,增益可能为负,这说明添加分裂点不一定使得模型变好。我们需要在模型的复杂度和预测效果上做一个权衡。
在计算模型时,可以通过预剪枝或后剪枝来使得模型变得越来越好。
预剪枝:
如果某个叶子节点的最好的特征增益为负时则停止分裂,但是这可能有一些坏处:也许当前的这个分裂点对于当前是不好的,但是对于未来的一些分裂是有好处的。
后剪枝:
将树长到最大深度,依次减掉所有获得负增益的叶子分裂点。
参考资料:
xgboost陈天奇课件
XGBoost 与 Boosted Tree
- XGBOOST整理
- adaboost xgboost gbdt 三个boosting方法整理
- RF、GBDT、XGBoost面试级整理
- RF,GBDT,xgboost调参方法整理
- python Anaconda安装pandas,xgboost方法整理
- xgboost
- xgboost
- xgboost
- xgboost
- xgboost
- xgboost
- xgboost
- XGBoost
- xgboost
- xgboost
- xgboost
- XGBoost
- xgboost
- 矩阵快速幂专题【完结】
- 网络工具中的瑞士军刀——netcat工具简介
- 经典模型简介
- 基于深度学习的目标检测研究进展
- Eclipse 构建Maven项目详细流程(图文并茂)
- XGBOOST整理
- 设计模式(三)
- 数据库总结(一)
- 动态库
- bzoj 4997: [Usaco2017 Feb]Why Did the Cow Cross the Road III
- #Deep Learning回顾#之基于深度学习的目标检测
- Android小项目————聊天室(网络编程篇)
- 周末训练笔记
- mac上终端命令行下载东西