Boosting知识点整理(adaBoost,GBDT,XGBoost)
关于Boosting
概括
从减小偏差的角度,将若干个弱学习器按照一定的策略整合成一个强学习器(针对弱项逐个击破,不断降低偏差);
问题:
(1)泛化误差的分解(噪声,方差,偏差),各自代表什么含义?;
(2)bagging vs boosting?(减小方差vs减小偏差);
(3)为什么bagging可以提高泛化能力?(证明公式)
(4)为什么boosting可以提高泛化能力?
(5)如何“好而不同”(样本,特征,输出,参数)
四个基本原则
对于任意的boosting算法模型,四个基本点牢牢抓住:
(1)如何计算学习误差率?
(2)如何得到弱学习器权重?
(3)如何更新弱学习器样本权重?
(4)如何结合多个弱学习器?
关于AdaBoost(分类回归)
基本原理
基于上一个弱学习器的学习结果,对其中分类错误的样本,在下一个弱学习器中,提高他们的权重;
基本步骤
(1)计算当前弱学习器的错误率alpha(分类:指数损失; 回归:绝对损失,平方损失,指数损失);
(2)基于alpha计算当前弱学习器的权重w;
(3)
3.1 基于alpha以及样本判断结果更新下一轮学习器中样本的权重;
3.2 样本权重规范化;
(4)将所有弱学习器整合(加法模型);
损失函数
分类:指数损失
回归:绝对损失,平方损失,指数损失
正则化
- 调节学习率
未正则化模型:
hk(x)=hk-1(x) + alphak * estimatork
含正则化项目的模型
hk(x)=hk-1(x) + V * alphak * estimatork
其中,V为学习率(步长)
注意:要达到同样的学习效果,意味着正则化后的模型需要更多的迭代次数(n_estimators) - 调节树参
缺陷
对异常值敏感,如果异常样本获得权重会影响模型效果
调参
常调:n_estimators + learning_rate, 两者同时调
loss: 只针对回归,选择不同损失函数(linear:绝对误差 square:平方误差 exponetial:指数误差)计算各个样本相对误差,最后计算加权损失
关于GBDT(Cart分类回归)
GBDT:gradient boosting decision tree 梯度提升树,注意只能用Cart作为基学习器
基本原理
(1)利用当前学习器来ht(x)拟合上一步得到的学习器ft-1(x)预测样本损失函数对预测值的负梯度,目的是使得加入当前学习器ht(x)后当所有样本代价函数能够最快速地减小;
ps:特例
当模型中,损失函数取“平方损失”时,GBDT可以理解为:
利用当前学习器来ht(x)拟合上一步得到的学习器ft-1(x)预测样本 残差,目的是使得加入当前学习器ht(x)后当所有样本代价函数能够最快速地减小
(2)GBDT的思想可以用一个通俗的例子解释,假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。
损失函数
分类:指数损失,对数似然损失
回归:绝对损失,平方损失,huber损失(异常值鲁棒),quantile损失(异常值鲁棒)
正则化
- 调节学习率(步长)
未正则化:
hk(x) = hk-1(x) + estimatorsk
正则化后:
hk(x) = hk-1(x) + V * estimatorsk
其中:V为学习率,表示步长 - 调节树参
(1) 子采样比例正则化
针对树参,调节subsample(小于1),使得每一棵树信息有所差异,减小方差
(2) 正则化剪枝
问题:过拟合如何处理?
调参
常用参数
(1)boost参:
- n_estimators,learning_rate
- loss:
分类:deviance(对数似然损失),exponential(指数损失)
回归:ls(均方差),lad(绝对损失),huber,quantile(分位数损失) ,后两种针对噪音较多情况,调节alpha值
(2)树参:
3. max_depth:
4. max_features:
5. min_samples_leaf:
6. min_samples_split:
7. subsample: 注意此处为非放回抽样,子采样比例
(3)全局参:
random_state:
调参步骤
n_estimators
max_depth + min_samples_split,
min_samples_split + min_samples_leaf
subsample
n_estimators + learning_rate
优缺点
优点:
(1)灵活处理连续值,缺失值
(2)准确度高
(3)使用健壮的损失函数,对异常值鲁棒性强(如huber损失和quantile损失函数)
缺点:
无法并行
关于XGBoost
基本原理
基于GBDT改进:
(1)算法本身优化:成本函数加入正则化项,基于对成本函数2阶泰勒展开来同时计算样本划分规则以及树叶节点输出值;
(2)运行优化:允许并行(问题:允许什么计算并行?);
(3)增加了对缺失值的处理,增强鲁棒性:分别加入左子树与右子树,并选择最优处理方式;
损失函数
回归:MSE(均方差)
二分类:对数损失函数
多分类:softmax函数
正则化
树参:
学习率:
正则化项:
调参
常用参数
boosting参:
- n_estimators + learning_rate
- objective(损失函数):
回归:均方差
分类:对数损失
多分类:softmax
树参:
3. max_depth:
4. min_child_weight: 类似min_samples_leaf
5. gamma: 分裂节点时评估指标增益的最小阈值(可以理解为类似信息增益的阈值)
6. subsample: 注意此处为非放回抽样,子采样比例
7. ==colsample_bytree/colsample_bylevel/colsample_bynode:==列抽样
8. reg_alpha/reg_lambda: l1,l2正则化系数
全局参数:
9. random_state:
10. n_jobs: 注意xgboost可以并行!!
调参步骤
n_estimators
min_child_weight + gamma
n_estimators + learning_rates
过拟合如何处理?