树家族集成篇-梯度提升决策树篇(基于spark)

目录

1、数据质量要求

2、原理解释

(1)白话原理

(2)场景

(3)特点

3、代码相关


1、数据质量要求

算法机器学习类别缺失值连续值不平衡数据离群点数据归一离散特征处理树形特征选择依据spark实现过拟合处理、参数
决策树-ID3多分类无法处理无法处理不敏感不敏感不敏感可处理多叉树信息增益no
决策树-C4.5多分类不敏感不敏感不敏感不敏感不敏感one-hot 或  K值编码多叉树信息增益率no后剪枝,计算大
决策树-CART多分类

spark中敏感,需处理

不敏感不敏感不敏感不敏感one-hot 或  K值编码二叉树Gini系数yes

超参数:

maxdepth、

maxbins、mininfogain、impurity

决策树-CART回归spark中敏感,需处理不敏感--敏感不敏感one-hot 或  K值编码二叉树mseyes

超参数:

没具体使用,暂不清楚
随机森林(rf)多分类、回归

敏感,

spark需处理

不敏感不敏感不敏感不敏感one-hot 或  K值编码--树的特征选择依据yes

超参数:

在上述决策树的基础上,增加树的个数nums、featuresaction一般不调

梯度提升决策树(GBDT)spark支持二分类、回归

敏感,

spark需处理

不敏感分类可能敏感敏感不敏感one-hot 或  K值编码二叉树

mse

yes

超参数:

loss类型、nums、learningrate一般不调

2、原理解释

转载一条比较清晰的文章:https://blog.csdn.net/lanyuelvyun/article/details/88736692

(1)白话原理

树的集成+结果认定

不管分类问题还是回归问题,都是(cart回归树+一般损失函数

每棵树的拟合目标:

负梯度:负偏导,对损失函数求负偏导(算法提出的核心理念,可证明可以使模型收敛得到最小;对F(x)求偏导)),求到的偏导方程在Fm-1(x)(当前已有加法模型)处的值

比较清晰的对于回归问题:集成过程:单颗树是cart回归树,利用mse进行特征选择;集成方式串行,每棵树拟合前面已拟合模型的负梯度;结果认定:每棵树的预测值相加作为整体的预测值。因此,gbdt对数据的要求也就是cart回归树的要求。

对于分类问题:单颗树仍然是回归树,实现分类可形式上参考逻辑回归,也是先实现回归然后做转换并且损失函数是对数损失函数。

(2)场景

spark中的gbdt目前支持二分类和回归预测;调参要求高(不好掌握规律,不像随机森林增加数数量是个好选择)、训练时间长(串行的原因,所以每棵树深度也比较小1-5),适合机器学习竞赛等高性能要求的场景。

Gradient-Boosted Trees (GBTs) are ensembles of decision trees. GBTs iteratively train decision trees in order to minimize a loss function. The spark.ml implementation supports GBTs for binary classification and for regression, using both continuous and categorical features.

(3)特点

       总的来说,随机森林不易过拟合,好调参提升性能,而gbdt调参要求高,但训练时间长、最终的效果也更好。所以通常的做法是先尝试随机森林,它的鲁棒性好,如果效果不错,但是有更高精度要求可以尝试gbdt。

一些copy来的有用的说法:

GBDT和随机森林虽然都是决策树的组合算法,但是两者的训练过程还是很不相同的。 
  GBDT训练是每次一棵,一棵接着一棵(串行),因此与随机森林并行计算多棵树相比起来,会需要更长的训练时间。 
  在GBDT中,相对于随机森林而言(随机森林中的树可以不做很多的剪枝),一般会选择更浅(depth更小)的树,这样运算时间会减少。 
  随机森林更不容易过拟合,而且森林中包含越多的树似乎越不会出现过拟合。用统计学的语言来讲,就是说越多的树包含进来,会降低预测结果的方差(多次预测结果会更加稳定)。但是GBDT则恰好相反,包含预测的树(即迭代的次数越多),反而会更倾向于过拟合,用统计学的语言来将,就是GBDT迭代次数的增加减少的是偏差(预测结果和训练数据label之间的差异)。(偏差和方差这两个概念是不同的概念,见后面的图) 
  随机森林参数相对更容易调试一些,这是由于随着所包含的决策树的个数增加,其预测效果一般是单调的向好的方向变。而GBDT则不同,一开始预测表现会随着树的数目增大而变好,但是到一定程度之后,反而会随着树的数目增加而变差。

1、组成随机森林的树可以是分类树,也可以是回归树;而GBDT只由回归树组成

2、组成随机森林的树可以并行生成;而GBDT只能是串行生成

3、对于最终的输出结果而言,随机森林采用多数投票等;而GBDT则是将所有结果累加起来,或者加权累加起来

4、随机森林对异常值不敏感,GBDT对异常值非常敏感

5、随机森林对训练集一视同仁,GBDT是基于权值的弱分类器的集成

6、随机森林是通过减少模型方差提高性能,GBDT是通过减少模型偏差提高性能

3、代码相关

有三个关键参数:loss,numIterations,learningRate

loss(损失函数的类型)

Spark中已经实现的损失函数类型有以下三种,注意每一种都只适合一类问题,要么是回归,要么是分类。
分类只可选择 Log Loss,回归问题可选择平方误差和绝对值误差。分别又称为L2损失和L1损失。绝对值误差(L1损失)在处理带有离群值的数据时比L2损失更加具有鲁棒性。
 

numIterations(迭代次数)

GBDT迭代次数,每一次迭代将产生一棵树,因此numIterations也是算法中所包含的树的数目。增加numIterations会提高训练集数据预测准确率。如何选择合适的参数防止过拟合,一定需要做验证。将数据分为两份,一份是训练集,一份是验证集。
随着迭代次数的增加,一开始在验证集上预测误差会减小,迭代次数增大到一定程度后误差反而会增加,那么通过准确度vs.迭代次数曲线可以选择最合适的numIterations。

learningRate(学习率)

一般不需要调试。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值