4.2 细节4.2.1 损失函数
adaboost 模型是加法模型,学习算法为前向分步学习算法,损失函数为指数函数的分类问题。
加法模型:最终的强分类器是由若干个弱分类器加权平均得到的。
前向分布学习算法:算法是通过一轮轮的弱学习器学习,利用前一个弱学习器的结果来更新后一个弱学习器的训练集权重。第 k 轮的强学习器为:
定义损失函数为 n 个样本的指数损失函数:
利用前向分布学习算法的关系可以得到:
因为 已知,所以令 ,随着每一轮迭代而将这个式子带入损失函数,损失函数转化为:
我们求 ,可以得到:
将 带入损失函数,并对求导,使其等于 0,则就得到了:
其中, 即为我们前面的分类误差率。
最后看样本权重的更新。利用 和 ,即可得:
这样就得到了样本权重更新公式。
4.2.2 正则化
为了防止 adaboost 过拟合,我们通常也会加入正则化项,这个正则化项我们通常称为步长(learning rate)。对于前面的弱学习器的迭代
加上正则化项 我们有:
的取值范围为 0<≤1 。对于同样的训练集学习效果,较小的 意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。
4.3 优缺点4.3.1 优点
分类精度高;可以用各种回归分类模型来构建弱学习器,非常灵活;不容易发生过拟合。4.3.2 缺点
对异常点敏感,异常点会获得较高权重。5. gbdtgbdt(gradient boosting decision tree)是一种迭代的决策树算法,该算法由多棵决策树组成,从名字中我们可以看出来它是属于 boosting 策略。gbdt 是被公认的泛化能力较强的算法。
5.1 思想gbdt 由三个概念组成:regression decision tree(即 dt)、gradient boosting(即 gb),和 shrinkage(一个重要演变)
5.1.1 回归树(regression decision tree)
如果认为 gbdt 由很多分类树那就大错特错了(虽然调整后也可以分类)。对于分类树而言,其值加减无意义(如性别),而对于回归树而言,其值加减才是有意义的(如说年龄)。gbdt 的核心在于累加所有树的结果作为最终结果,所以 gbdt 中的树都是回归树,不是分类树,这一点相当重要。
回归树在分枝时会穷举每一个特征的每个阈值以找到最好的分割点,衡量标准是最小化均方误差。
5.1.2 梯度迭代(gradient boosting)
上面说到 gbdt 的核心在于累加所有树的结果作为最终结果,gbdt 的每一棵树都是以之前树得到的残差来更新目标值,这样每一棵树的值加起来即为 gbdt 的预测值。
模型的预测值可以表示为:
为基模型与其权重的乘积,模型的训练目标是使预测值 逼近真实值 y,也就是说要让每个基模型的预测值逼近各自要预测的部分真实值。由于要同时考虑所有基模型,导致了整体模型的训练变成了一个非常复杂的问题。所以研究者们想到了一个贪心的解决手段:每次只训练一个基模型。那么,现在改写整体模型为迭代式:
这样一来,每一轮迭代中,只要集中解决一个基模型的训练问题:使 逼近真实值 y 。
举个例子:比如说 a 用户年龄 20 岁,第一棵树预测 12 岁,那么残差就是 8,第二棵树用 8 来学习,假设其预测为 5,那么其残差即为 3,如此继续学习即可。
那么 gradient 从何体现?其实很简单,其残差其实是最小均方损失函数关于预测值的反向梯度(划重点):
也就是说,预测值和实际值的残差与损失函数的负梯度相同。
但要注意,基于残差 gbdt 容易对异常值敏感,举例:
很明显后续的模型会对第 4 个值关注过多,这不是一种好的现象,所以一般回归类的损失函数会用绝对损失或者 huber 损失函数来代替平方损失函数。
gbdt 的 boosting 不同于 adaboost 的 boosting,gbdt 的每一步残差计算其实变相地增大了被分错样本的权重,而对与分对样本的权重趋于 0,这样后面的树就能专注于那些被分错的样本。
5.1.3 缩减(shrinkage)
shrinkage 的思想认为,每走一小步逐渐逼近结果的效果要比每次迈一大步很快逼近结果的方式更容易避免过拟合。即它并不是完全信任每一棵残差树。
shrinkage 不直接用残差修复误差,而是只修复一点点,把大步切成小步。本质上 shrinkage 为每棵树设置了一个 weight,累加时要乘以这个 weight,当 weight 降低时,基模型数会配合增大。
5.2 优缺点5.2.1 优点
可以自动进行特征组合,拟合非线性数据;可以灵活处理各种类型的数据。5.2.2 缺点
对异常点敏感。5.3 与 adaboost 的对比5.3.1 相同:
都是 boosting 家族成员,使用弱分类器;都使用前向分布算法;5.3.2 不同:
迭代思路不同:adaboost 是通过提升错分数据点的权重来弥补模型的不足(利用错分样本),而 gbdt 是通过算梯度来弥补模型的不足(利用残差);损失函数不同:adaboost 采用的是指数损失,gbdt 使用的是绝对损失或者 huber 损失函数;6. 参考机器学习算法中 gbdt 与 adaboost 的区别与联系是什么? - frankenstein 的回答 - 知乎
为什么说bagging是减少variance,而boosting是减少bias
ensemble learning - 周志华
分析物联网架构下支付产业的发展趋势
令人拍案称绝的世界上最薄触屏:厚度与头发丝相当
浅谈5G的发展趋势与如何推动5G融入千行百业加快数字化转型步伐
英特尔宣布将建造第一台每秒可进行百亿亿次浮点运算的超级计算机 预计2021年交付
跨链加密货币交易秒完成,首个闪电网络交易所SparkSwap问世
基于集成学习的决策介绍(下)
iPhone XR线下发售无人问津iPhone XR销售将冷门
一种新型的锗化硅(SiGe)干式选择性各向同性原子层蚀刻技术
工业级双轴倾角传感器采用牛顿第二定律
SQLServer AlwaysOn在阿里云的前世今生
新iPhone充电器大改款 工厂火力全开赶工出货
在2018CES上,咪咕与科大讯飞合作发布首款全语音人工智能耳机“莫比斯”
12种用于数据分析的Pandas技巧可用来学习Python详细概述
led倒装芯片和正装芯片差别
python调用windows命令
PCBA产品质量的执行标准介绍
华为欲用Mate10狙击iPhone8, 配置大开眼界
美国招聘网站最新报告:AI碾压金融成薪资最高行业 35位数据科学家透露做好PPT比懂技术更重要
一加7Pro5G版通过3C认证 充电头功率最高30W
脉冲电源属于直流还是交流?为什么呢?