学习GBDT的原理和细节(二)
在GBDT的原理之后,拓展GBDT相关的细节,包括和Adaboost的异同,以及GBDT基础上优化的XGB和LightGBM
Adaboost简述
Adaboost与GBDT一样,同样是加法模型,同样需要解决的两个问题,权重和第 m 轮迭代基函数
,与GBDT不同的是,Adaboost并没有规定基函数的类型。
Adaboost的提升思路是,改变数据分布,然后训练的模型会强化上一次错误的样本,而GBDT是改变拟合目标
Adaboost中最核心的是样本权重,每一次迭代中,都会更新,然后在计算误差时,采用加权误差,侧面改变数据分布
- 回归问题
- 初始化样本权重向量
- 基于当前数据集D
,训练基模型
- 计算最大误差
,即所有样本中最大的误差
- 对于所有样本,根据最大误差,调整相对误差
线性误差:
平方差误差:
指数误差:..感觉这个在回归没啥用
- 通过所有样本的权重和相对误差,计算当前迭代的模型的误差
- 通过上面的加权误差,计算当前模型权重
- 到这里当次迭代已经基本完成,根据当前结果,更新样本权重,Z为权重和,用来归一
- 初始化样本权重向量
- 分类问题
与GBDT不同,对于Adaboost来说,分类是更natural的事情。一个重要是的事情,在基分类和整个模型中,输出只是单纯的类目,即-1或1。在分类算法中,损失函数采用了指数损失函数,即
但是为啥是这个,似乎没有理论支持,其实这个只有符号不同( y==H(x)->1/ y!=H(x)->-1)- 同回归,初始化样本权重
- 基于数据集,训练基模型
- 对于
的结果,计算当前迭代的加权错误率
- 基于错误率(准确率高于50%),计算当前模型的权重
由于损失函数是,所以可以推到在第 t 轮迭代时,损失为
上式显然是一个累乘式子,从0~t-1~t,令样本呢权重
整体数据中,两种情况,预测正确=1 或者预测错误
=-1
- 基于权重,更新样本权重向量,由于上式中,唯一可变的就是权重
,对上式求偏导,置零并求解(
是常数值,可以直接提取出累加)
即上面的替换成了加权误差的公式 - 更新权重,上面已经写了
,所以,新一轮的权重为
- 同回归,初始化样本权重
GBDT的优化
- XGboost
在GBDT中,基函数就是CART,节点的分裂方式是完全按照最小二乘法去筛选的,但是在XGBoost中,引入了全新的目标函数和节点分裂方式,在分裂时就考虑结构化损失,同时梯度采用了二阶导。
在第k轮迭代的时候,不再单纯的用CART去拟合损失函数的一阶导,而是在结构和值上面,整体考虑Obj函数为一阶,
为二阶,这个在求的时候是固定值,因为样本固定,损失函数固定
在GBDT中,一般很难实现并发,因为需要依赖上一轮的残差,所以基本上都只能串行,然后其实XGBoost也是串行建树的,只是在生成单棵树里面,实现了并行。
更多的后续再研究
参考
https://en.wikipedia.org/wiki/AdaBoost
https://blog.csdn.net/pxhdky/article/details/84857366
http://zhanpengfang.github.io/418home.html
网友评论