跟着专注于计算机视觉的AndyJ的妈妈我学机器学习-V2

我不生产博客,我是优质博客的搬运工。因为机器学习设计知识面太广了,所以本文先写写并发布,供粉丝浏览,后续会不断补充。

提升树(boosting tree)

提升树被认为是统计学习中性能最好的方法之一。
提升树利用加法模型前向分步算法实现学习的优化过程。对于回归问题的提升树,需要 m + 1 m+1 时刻的树去拟合当前 m m 时刻模型的残差。

梯度提升树(Gradient Boosting Tree)

梯度提升树:对于提升树来说,当损失函数是平方损失(回归)或者是指数损失(分类)函数时,每一步优化都比较容易。但是对一般损失函数,往往每一步优化并不容易。所以提出了梯度提升(gradient boosting)算法。利用最速下降法的近似方法,关键是利用损失函数的负梯度在当前模型的值,作为回归问题提升树算法中的残差的近似值。计算损失函数的负梯度在当前模型的值,将它作为残差的估计。对于平方损失函数,它就是通常所说的残差,对于一般的损失函数,它就是残差的近似。

面试问题:Random Forest 与 GBDT的异同
异:

  1. Random Forest对数据进行了随机采样,对特征进行了随机选择,GBDT没有(RF是bagging方法,GBDT是boosting方法。)。
  2. GBDT是前向分步算法,模型训练时是级联的,RF不是。即GBDT的个体学习器之间存在强依赖关系,必须串行生成,而RF可以并行生成,个体学习器之间不存在强依赖关系。
  3. 预测时,RF通常使用简单的投票法/平均法。GBDT是加权平均。GBDT的精度进一补提升,优于RF。
  4. GBDT只能是回归树,RF回归树和分类树都可以。
  5. 其中GBDT中的核心是通过用分类器(如CART、RF)拟合损失函数梯度,而损失函数的定义就决定了在子区域内各个步长,其中就是期望输出与分类器预测输出的差,即bias;而RF的核心就是自采样(样本随机)和属性随机(所有样本中随机选择K个子样本选择最优属性来划分),样本数相同下的不同训练集产生的各个分类器,即数据的扰动导致模型学习性能的变化,即variance。随机森林是通过减少模型方差提高性能,GBDT是通过减少模型偏差提高性能。
  6. 随机森林对异常值不敏感,GBDT对异常值非常敏感;

同:

  1. 都是加法模型,都属于集成学习,很多个基模型加起来的,基模型都是树。

GBDT

GBDT的推导
GBDT最经常问到的四个部分:

  1. GBDT的算法的流程
  2. GBDT如何选择特征:遍历所有的特征与切分点,找到使损失最小的特征与切分点。
  3. 如何产生特征的组合。参考1参考2
  4. 以及GBDT如何用于分类:每轮构建 k 颗树。k 为类别数。然后做boosting。每棵树都是回归树,去回归1/0,然后将 k 棵树的结果用softmax,得出最后的预测概率。也就是说,对每个类别训练 M 个分类器。假设有 K 个类别,那么训练完之后总共有 M*K 颗树

XGBoost

XGBoost的算法的流程
参考1参考2

XGBoost树的结构如何确定,分裂前后的增益如何计算?
参考

XGBoost如何学习下一棵树?
每棵树不需要拟合值,根据XGBoost特有的gain构造树结构,同时 w w* 作为叶子节点的输出。

XGBoost的特点:参考1

  1. 传统的GBDT在优化的时候,使用的是一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,**同时用到了一阶导数和二阶导数。**XGBoost工具支持自定义代价函数,只要函数可一阶和二阶求导。(相对于GBDT的一阶泰勒展开,XGBoost采用二阶泰勒展开,可以更为精准的逼近真实的损失函数。)
  2. 在目标函数中加入正则项,使用叶子节点的数目和节点权重的L2损失,控制树的复杂度。
  3. 传统的GBDT算法以CART作为基分类器,xgboost还可以支持线性分类器,相当于带L1和L2的逻辑斯谛回归或者线性回归。
  4. xgboost在训练之前,预先对数据进行排序,然后保存成block结构,后面的迭代中重复的使用这个结构,大大的减少了计算量。这个结构也使并行成为可能。在进行节点分裂时,需要计算每个特征的信息增益,最终选择增益最大的那个特征去分裂,那么各个特征的增益计算就可以开多线程计算。

常见问题:
5. xgboost的正则项表达式
6. xgboost的特征重要性计算

LightGBM

GBDT模型的另一个进化版本:LightGBM。LigthGBM是boosting集合模型中的新进成员,由微软提供,它和XGBoost一样是对GBDT的高效实现,原理上它和GBDT及XGBoost类似,都采用损失函数的负梯度作为当前决策树的残差近似值,去拟合新的决策树。
LightGBM的优势。
参考1参考2
在这里插入图片描述

Bootstrap

Bootstrap方法是:一种抽样方法,从一个数据集中有放回的抽取N次,每次抽取M个。
Bagging:bootstrap aggregation。采样时用的就是bootstrap的方法。

优化算法

参考1
参考2
参考3

学习率非自适应:
SGD
缺点:(1)可能陷入局部最小值;(2)下降速度慢;(3)学习率选择困难。

Momentum
在SGD的基础上引入一阶动量;一阶动量指的是各个时刻梯度的指数加权平均。
优点:(1)抑制SGD的震荡,增加稳定性;(2)收敛速度变快;(3)有一定摆脱局部最优的能力。

NAG
momentum当前更新时考虑了历史梯度和当前梯度的合并。NAG则是先利用历史梯度进行一次更新,然后再计算当前梯度,进行更新。
优点:收敛速度更快

学习率自适应:
AdaGrad
二阶动量的引入,是“自适应学习率”算法的代表。二阶动量:至今为止所有梯度的平方和。目的是:经常更新的参数希望学习率可以小点(不希望被单个样本影响太大),对于偶尔更新的参数,希望学习率大点(希望从偶然出现的样本中多学一点)。
优点:(1)不同更新频率的参数具有不同的学习率,减少震荡;(2)允许使用大的学习率,加快学习速度。
缺点:(1)学习率不断变小,最后变为0,会使训练提前结束,无法学到更多知识。

AdaDelta/RMSProp
由于AdaGrad二阶动量持续累积,学习率单调递减。所以使用指数加权平均来计算二阶累积动量。
避免了二阶动量持续累积而导致训练提前结束。

Adam
是Momentum和RMSProp的结合。既引入了一阶动量,又引入了二阶动量。beat1/beat2就是一阶/二阶动量的参数,默认0.9/0.999。
优点:(1)自动调整参数学习率(因为二阶动量的引入);(2)提升训练速度(一阶/二阶动量引入都有关);(3)提高训练的稳定性。
缺点:(1)二阶动量使用指数加权平均来计算,并不只一直增大,可能会时大时小,并不是单调变化,会在训练后期引起学习率震荡,导致模型不收敛;(2)学习后期学习率可能会过小,导致过早停止学习。

猜你喜欢

转载自blog.csdn.net/mianjiong2855/article/details/107493440
今日推荐