python量化损失函数的简单介绍( 七 )


我们将上述场景数学化
设是样本的最终 预测分数 ,是第i颗树的叶子 打分映射  , 则 预测函数 为
所有树的叶子打分映射将共同构成模型的 函数空间 ,即
(PS:注意这里不再是模型的 参数空间,而是 函数空间)
六、XGBoost的目标函数
我们继续定义出模型的 损失函数 为
接下来我们再定义出模型的复杂度为
我们对上述模型的损失函数和复杂度进行线性组合,便得到了XGBoost的目标函数
显然,XGBoost的目标函数加入了 正则项  , 即: 用表示模型的偏度(期望),用表示模型的复杂度(方差)
七、优化目标函数
从数学角度看,目标函数的定义是一个 泛函 ,优化目标函数等价于 泛函最优化问题,这使得我们很难进行优化
(PS:的自变量包含K个函数,即是 函数的函数—泛函 )
我们将上述思想进行数学化,即
加入第0颗树,当前模型的预测结果为
加入第1颗树,当前模型的预测结果为
加入第2颗树,当前模型的预测结果为
根据数学归纳法,加入第t颗树,即第t次迭代,当前模型的预测结果为
将上述迭代结果带入目标函数,则目标函数改为 迭代版本 如下
下面我们需要对目标函数进行一些 数学上的近似处理
我们知道二阶泰勒公式的迭代形式为
这里我们将目标函数 类比 二阶泰勒公式,即
且定义和来 类比 二阶泰勒公式中的 一阶导数和二阶导数 ,即
有了上述近似类比,我们将目标函数在处进行 二阶泰勒展开 ,得
我们继续优化目标函数
由于目标函数 只受到基学习器的影响,上一次的误差是常数项,对本次迭代没有影响 (常量微分为0),于是我们可以 删除掉常数项 ,即
至此我们得到了迭代过程下,目标函数的 近似表达式 ,继续优化之前,我们需要先讨论每棵树的函数表达式
八、树的函数表达式的拆分
我们将第t颗树的函数表达式,拆分成 树结构部分q 和 叶子权重部分w  , 即
如上图,树的物理意义为:
我们将其数学化 , 即定义:
至此 , 我们可以将树的函数表达式写为
九、模型的复杂度定义
紧接着我们定义出模型的复杂度
我们用叶子节点的个数和每片叶子的权重的L2范数来共同描述模型的复杂度,即
其中和是超参数,用来 收缩叶子个数  , 控制叶子权重分数不会过 大,二者同时 防止模型过拟合
十、继续优化目标函数
有了树的函数表达式的拆分和模型的复杂度,我们继续优化目标函数
将二者带入目标函数,得
下面需要用到一个 数学技巧 ,仔细观察上式
上式中,红色部分表示: 对整个样本集合的遍历 ;蓝色部分表示: 对所有叶节点的遍历
为了将 二者的累加形式统一,我们有如下结论
因此我们定义表示树中 第j个叶子中样本的集合 ,即
将带入目标函数 , 我们就可以统一两个的物理意义和数学形式,即
紧接着我们定义和来简化目标函数
带入则目标函数最终可以化简为
至此,我们一步步推导出了XGBoost目标函数的最终表达式,接下来就可以求解其极值
十一、求解目标函数极值
此时弱学习器—树已经构造完成,即 树结构确定 ,为了使得目标函数达到最小值 , 我们令 对每个叶子的偏导数为0 ,即
求解上述偏导数,便可解出 每个叶子的最优权重为:
将其带入目标函数,便得到 模型的最小损失为:

推荐阅读