1、首先是模型
基学习器为树模型、采用boosting集成方法
2、接下来设定目标函数=损失函数+正则项。
2.1 不限定损失函数的具体形式,只要其二阶可导。这样我们不需要为每一个具体的损失函数单独推导一个模型,而是得到一个通用的模型
2.2 再看正则项
用这个来控制树的复杂度。
后一项是L2,是树的每个节点的L2正则的平方。前一项是xgboost的主要贡献,gamma相当于预剪枝,T是叶子节点数。
γ和λ是需要手动调整的超参,它们值越大那么树的模型就越简单。
3、如何得到树
在第t轮,只考虑本轮的优化目标
然后通过泰勒展开,将f拿出来
令
并忽略可视为常数的第一项,即得到了
:
这样就实现了工程上的模块化,只有g、h与损失函数有关,而树的结构无关。这样一方面f可以自定义,一方面g和h可以并行计算。
3.1 树怎么转换成权重
对于f的定义做一下细化,把树拆分成结构函数q(输入x输出叶子节点索引)和叶子权重部分w(输入叶子节点索引输出叶子节点分数),结构函数q把输入映射到叶子的索引号上面去,而w给定了每个索引号对应的叶子分数是什么。
这样,目标函数可以改写成
再令
目标函数改为
求偏导得出:
参考:
https://zhuanlan.zhihu.com/p/91817667
https://www.jianshu.com/p/dcb75ec3145e
https://blog.csdn.net/guoxinian/article/details/79243307