目录
XGBoost
XGBoost的目标函数是损失加正则项Ω,损失的含义是yi和最后一棵树的预测的损失,最后一棵树的损失是yi^(t-1)+ft(xi)即前t-1棵树和最后一棵树(最后一棵树可以相当于拟合前t-1棵树的残差)相加。
然后对损失进行泰勒展开取前三项,可以得到下面的目标函数,前面的l没有了,是因为l是前t-1棵树的已知量,可以作为常量。并且其中gi和hi也都是常量,是xi样本对应的前t-1棵树的结果求导数和二阶导数的常量。
然后解释Ω,Ω是用来限制树的复杂度的,分别从叶节点个数和叶节点权值对树的复杂度进行考量
然后得到欧米伽的公式,我们要与前面的loss进行整合,我们需要把loss内的fk(xi)转化为和后面Ω变量相同的形式进行合并
一步一步分析上图,
第一步到第二步,fk(xi)等于样本xi最终预测对应的节点q(xi)的权值,即w^q(xi),所有的w^q(xi)相加其实就是将所有样本xi对应的叶节点进行分类,然后再分别按节点求和(每个节点对应的样本有几个就),也就是这个,然后将按样本预测值求和转为按不同节点求和后就可以和Ω合并了,并且gi和hi虽然对于每个样本xi都是不同的值,但都是已知的在求前面t-1棵树时就已知的量,所以我们用一个Gj和Hj的符号表示。
最后得到一个一元二次目标函数即
这个一元二次函数的最小值点很容易看出来就是每个都取极值点(最小值)即每个wj都取
,就可以得到简化后的目标函数
。
这个目标函数的意思是,已知一个二叉决策树的形状,我们就会知道最小目标函数是这个,然后我们要更新这棵决策树,让他是否划分新的叶子结点,划分哪个叶子结点,就是要看哪个划分对应的决策树形状的目标函数值最小。然后XGBoost是采用贪心算法一个节点一个节点进行枚举划分的。
不断划分后如何停止呢?
可以设定一个阈值:1、新的划分的目标函数增益小于一个阈值时就停止划分。2、决策树的深度达到一定的时候停止划分。3、样本权重和小于设定阈值时则停止建树。什么意思呢,即涉及到一个超参数-最小的样本权重和min_child_weight,和GBM的 min_child_leaf 参数类似,但不完全一样。大意就是一个叶子节点样本太少了,也终止同样是防止过拟合。