BOOST
ADABOOST
简介版本:
ADABOOST VS GBDT.
GBDT
XGBOOST
1. Regression Tree (CART)
分类树
为什么是回归树
GBDT的核心在于累加所有树的结果作为最终结果,就像前面对年龄的累加(-3是加负3),而分类树的结果显然是没办法累加的,所以GBDT中的树都是回归树,不是分类树
解释树为什么有这些特性
2. 模型函数形式:
给定数据集D=(xi,yi)D = {(x_i ,y_i)}D=(xi?,yi?),XGBoost进行additive training,学习K棵树:
采用以下函数对样本进行预测:
这里是F\mathcal{F}F假设空间,f(x)是回归树(CART):
q(x)表示将样本x分到了某个叶子节点上,w是叶子节点的分数(leaf score),所以 q( x) 表示回归树对样本的预测值 w
3. 原理
对于additive training,在t次迭代时,如何确定ft(xi)f_t(x_i)ft?(xi?)呢?可以通过优化目标函数来得到。
目标函数:
- 当回归树的结构确定时,我们前面已经推导出其最优的叶节点分数以及对应的最小损失值,问题是怎么确定树的结构?
树节点分裂方法(Split Finding) - 暴力枚举
*遍历所有特征的所有可能的分割点,计算gain值,选取值最大的(feature,value)去分割
- 近似方法
- 对于每个特征,只考察分位点,减少计算复杂度
- 对于值为连续值的特征,当样本数非常大时,该特征取值过多,遍历所有取值复杂度较高,而且容易过拟合。因此,考虑将特征值分桶,即找到ll个分位点,将位于相邻分位点之间的样本分在一个桶中,在遍历该特征的时候,只需要遍历各个分位点,从而计算最优划分。注意到上面算法流程中说明了有全局的近似(global)和局部(local)的近似,所谓全局就是在新生成一棵树之前就对各个特征计算分位点并划分样本,之后在每次分裂过程中都采用近似划分,而局部就是在具体的某一次分裂节点的过程中采用近似算法。
缺失值处理
当特征出现缺失值时,XGBoost可以学习出默认的节点分裂方向
XGBOOST的其他特点
? 行抽样(row sample)
? 列抽样(column sample)
借鉴随机森林
? Shrinkage(缩减),即学习速率
将学习速率调小,迭代次数增多,有正则化作用
? 支持自定义损失函数(需二阶可导)
参考:https://blog.csdn.net/zwqjoy/article/details/80424783
https://www.cnblogs.com/pinard/p/6140514.html
LightGBM——提升机器算法(图解+理论+安装方法+python代码).
如何玩转LightGBM.