Xgboost通俗理解和总结

目标函数:其中的误差函数可以自定义(满足二阶可导),正则项可以L1或L2
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
gi = 前t-1棵树的预测与真实值的损失函数在y(t-1)处的导数
在这里插入图片描述
在这里插入图片描述
q(x)就是 输入在叶子节点上的映射,w(qx) 就是映射对应的打分
在这里插入图片描述就是对将要生成的树的打分的惩罚项
在这里插入图片描述
将样本数换算为每个节点上的样本数j,总共T个节点,每个节点的得分w是一样的
在这里插入图片描述

在这里插入图片描述
w衡量打多少分是最好,L就是衡量一个树有多好
在这里插入图片描述

正则化在这里插入图片描述
直观上看,节点数值尽量不极端(这个怎么看,如果某个样本label数值为4,那么第一个回归树预测3,第二个预测为1;另外一组回归树,一个预测2,一个预测2,那么倾向后一种,为什么呢?前一种情况,第一棵树学的太多,太接近4,也就意味着有较大的过拟合的风险)(可以理解为第二组的两个专家给出了一致意见,都给2分)

总结来说可能就是:在前1棵树的预测基础上 比较和真实值的区别,以此来影响当前树的生成,(假设结构确定)
当优化方法确定后,树的结构就是依据优化方法的指导,采用贪心算法尝试不同的分裂,寻找一个能使Gain较大的分裂方法,以此确定相对较好的结构。

Xgboost的特点:
1.w是最优化求出来的,不是啥平均值或规则指定的
2.支持自定义loss function
3.支持并行化,boosting技术中下一棵树依赖上述树的训练和预测,所以树与树之间应该是只能串行!那么大家想想,哪里可以并行?! 没错,在选择最佳分裂点,进行枚举的时候并行!(据说恰好这个也是树形成最耗时的阶段)
4.Shrinkage,你可以是几个回归树的叶子节点之和为预测值,也可以是加权,比如第一棵树预测值为3.3,label为4.0,第二棵树才学0.7,….再后面的树还学个鬼,所以给他打个折扣,比如3折,那么第二棵树训练的残差为4.0-3.3*0.3=3.01,这就可以发挥了啦,以此类推,作用是啥,防止过拟合

Xgboost参数:
1)eta:shrinkage参数,更新叶子节点权重时,乘以该系数避免步长过大。
2)min_child_weight:default=1]参数默认是 1,每个叶子里面 h 的和至少是多少,对正负样本不均衡时的 0-1 分类而言,假设 h 在 0.01 附近,min_child_weight 为 1 意味着叶子节点中最少需要包含 100 个样本。这个参数非常影响结果,控制叶子节点中二阶导的和的最小值,该参数值越小,越容易 overfitting。
3) max_depth [default=6]:每颗树最大深度
4)max_leaf_nodes:最大叶结点数
5) gamma [default=0]:后剪枝时,用于控制是否后剪枝的参数。
6)subsample [default=1]:样本随机采样,较低的值使得算法更加保守,防止过拟合,但是太小的值也会造成欠拟合。
7)colsample_bytree [default=1]:列采样,对每棵树的生成用的特征进行列采样。一般设置为: 0.5-1。
8) lambda [default=1]:控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。
9)alpha [default=0]:控制模型复杂程度的权重值的 L1 正则项参数,参数值越大,模型越不容易过拟合。 (叶节点个数)

在这里插入图片描述
增大树的数量的同时减小学习率

参考链接:
https://www.cnblogs.com/jiangxinyang/p/9248154.html
http://www.cnblogs.com/fujian-code/p/9018114.html
https://blog.csdn.net/u013648367/article/details/79726078
https://blog.csdn.net/ccblogger/article/details/81865540
https://blog.csdn.net/niaolianjiulin/article/details/76574216

猜你喜欢

转载自blog.csdn.net/weixin_43167121/article/details/88082657
今日推荐