xgboost 学习笔记
决策树算法的好坏需要一个标准来评估,对于分类问题,可以用信息增益(ID3)、信息增益率(C4.5)、基尼系数(CART)等等;对于回归问题,可以用均方误差、对数误差等。
所谓集成学习,是指构建多个分类器(弱分类器)对数据集进行预测,然后用某种策略将多个分类器预测的结果集成起来,作为最终预测结果。
xgboost 是由多颗 CART 树集成,xgboost 本质上还是一个 GBDT,但是力争把速度和效率发挥到极致。
GBDT
- 原理
所有弱分类器的结果相加等于预测值,然后下一个弱分类器去拟合误差函数对预测值的梯度/残差(这个梯度/残差就是预测值与真实值之间的误差)。
回归任务时,损失函数为均方差损失函数。
残差 = 负梯度 = 真实值 - 预测值
xgboost
- 核心思想
- 不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数,去拟合上次预测的残差
- 当我们训练完成得到 k 棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数
- 最后只需要将每棵树对应的分数加起来就是该样本的预测值
实质是把样本分配到叶子结点会对应一个 obj,优化过程就是 obj 优化。也就是分裂节点到叶子不同的组合,不同的组合对应不同 obj,所有的优化围绕这个思想展开。
- 目标函数
训练误差
正则化项
T 表示叶子节点的个数,w 表示叶子节点的分数。直观上看,目标要求预测误差尽量小,且叶子节点 T 尽量少(γ 控制叶子结点的个数),节点数值 w 尽量不极端(λ 控制叶子节点的分数不会过大),防止过拟合。
目标函数的化简
复杂度
- 用叶子节点集合以及叶子节点得分表示
- 每个样本都落在一个叶子节点上
- q(x)表示样本x在某个叶子节点上,wq(x)是该节点的打分,即该样本的模型预测值
复杂度包含两部分
- 树里面叶子节点的个数 T
- 树上叶子节点的得分 w 的 L2 模平方(对 w 进行 L2 正则化,相当于针对每个叶结点的得分增加 L2 平滑,目的是为了避免过拟合)
目标函数变形
函数变形的原理是从样本所有叶节点求和转换为每个叶节点的所有样本求和,统一到都是按照叶节点来优化目标函数
树的形状
分裂节点的方法
- 贪心算法
- 近似算法
整体流程
问题
- GBDT 引入回归树( CART )(classification and regression trees)。在 XGBoost 中不仅使用 CART 同时包括分类线性回归。线性回归是在哪里体现的?
- 为什么使用二阶泰勒展开?
- 精准性:相对于GBDT的一阶泰勒展开,XGBoost采用二阶泰勒展开,可以更为精准的逼近真实的损失函数
- 可扩展性:损失函数支持自定义,只需要新的损失函数二阶可导。
参考链接