在做阿里的o2o优惠券预测的时候学习了GBDT。听闻GBDT的威力,自然要学习学习。
接下来从以下几个方面记录下我对于GBDT的理解。
GBDT的用途,优势
GBDT的结构和算法流程
GBDT如何训练
Sklearn 的GBDT使用,参数意义
GBDT的用途,优势:
??训练一个提升树模型来预测年龄:
??训练集是4个人,A,B,C,D年龄分别是14,16,24,26。样本中有购物金额、上网时长、经常到百度知道提问等特征。提升树的过程如下:
图中是直接选取了平均值作为预测值,然后通过真实值减去预测值计算残差 。第二棵树学习上一棵树的残差。
在实际使用过程中GBDT算法还有一些问题,即如何划分树,如何确定预测的函数,如何计算残差,如何训练。
(1)如何划分树,也就是我们使用哪一个属性的哪一个值来作为划分条件进行划分。
对于每个特征,尝试这个特征的可能的值进行划分,(如果是连续值的话,可以参考西瓜书,对于连续值的处理)
选择的标准是最小化平方误差,但是也不都是这一个代价函数。
选择第J个变量xi 和他的取值S,作为切分变量和切分点。并且定义两个区域:
然后寻找最优的切分变量J和最优切分点S。具体的,求解:
(2)如何确定训练的函数
每一棵树都是一个回归树,用一个线性函数去拟合目标值,不一定是用平均值。
每迭代一轮就是多一个树,来对上次的残差进行训练。
(3)如何计算残差
使用梯度的绝对值拟合残差,还要乘以一个学习率
(4)如何训练
每轮迭代的时候,首先要使用上一轮训练完的残差来训练出本轮的决策树
要训练出来的这个决策树,加上之后,使得整体的代价函数的值最小。
关于GBDT的损失函数,正则化部分看明白了再继续写
参考资料:
shttps://www.jianshu.com/p/005a4e6ac775
《统计学习原理》