基于决策树的各种集成方法的总结
1.NP问题与NPC问题
NP问题: 多项式复杂程度的非确定性问题
NPC问题: 多项式时间可解的NP问题
2.决策树
决策树模型是一种树形结构模型, 由结点和有向边构成. 通过决策树模型, 能够对实例进行分类. 决策树本质上是从训练数据中归纳出一组分类规则, 与训练数据集不想矛盾的决策树可能有多个, 或者没有. 我们需要找到一个与训练数据矛盾较小的决策树, 同时具有很好的泛化能力. 从所有可能的决策树中选取最优决策树是NPC问题, 所以现实中决策树学习算法通常采用启发式方法, 近似求解这一优化问题.
决策树学习算法主要包括: 特征选择、决策树生成和决策树剪枝三个过程.决策树的常用算法有: ID3算法、C4.5算法、CART算法. ID3算法与C4.5算法分别通过信息增益和信息增益比进行特征选择. CART算法即为分类和回归树算法. 对于回归问题, 基于平方误差最小化准则; 对于分类问题, 基于基尼指数最小化准则. 对于决策树算法的细节, 可以参考统计学习方法(李航).
3.集成方法
将多个基学习器通过一定的策略结合生成强学习器用来实现学习任务的方法叫做集成学习.
集
成
学
习
=
基
学
习
器
+
结
合
策
略
集成学习=基学习器+结合策略
集成学习=基学习器+结合策略
集成学习主要分为: Bagging和Boosting. 前者为并行式集成学习方法, 代表算法有: 随机森林(RF算法). 后者为串行式集成学习方法, 主要有: Adaboost, GBDT, XGboost, LightGBM等.
4.随机森林
随机森林算法是一种并行式集成学习方法. 相较于决策树而言, 随机森林在决策树的训练中引入随机属性的选择. 随机性主要体现在以下两个方面:
1)对原数据集采用bootstrap sample method(自助法采样,又放回). m个样本数据集, m次随机采样得到采样集, 如此操作N次, 则有N个含m训练样本的采样集. 这样可以训练N个基学习器, 再结合得到最终学习器.
2)对于特征的选择引入随机性. 从K个特征中随机选择k个特征. 每次分裂时, 从k个中选取最优的.
引入的随机性, 使得RF的泛化能力提升, 不易陷入过拟合, 且抗噪能力强.
注: RF分类效果(error rate)与两个因素有关
- 任意两棵树的相关性: 相关性越大, 误差越大
- 每棵树的分类能力: 分类能力越大, 误差越小
关键点: 如何选取k值?
减小特征选择个数k, 树的分类能力和任两棵树相关性都会降低.
袋外误差率(out-of-bag error)
Bootstrap每次约有
1
3
\frac{1}{3}
31的样本不会出现在采集样本集合中, 称这部分数据为oob(out-of-bag).利用oob error估计作为泛化误差估计的一个组成部分. 利用袋外数据测试已经生成的随机森林.
5.Adaboost与GBDT算法
5.1Adaboost
加
法
模
型
+
指
数
损
失
函
数
+
前
向
分
布
算
法
加法模型+指数损失函数+前向分布算法
加法模型+指数损失函数+前向分布算法
方法: 在迭代过程中, 提高前一轮中分类错误样本的权值, 降低前一轮分类正确样本的权值, 采用加权多数表决的方法. 分类错误率低的分类器具有更大的权值, 反之则更小.
5.2GBDT
加
法
模
型
+
负
梯
度
拟
合
+
C
A
R
T
算
法
+
前
向
分
布
算
法
加法模型+负梯度拟合+CART算法+前向分布算法
加法模型+负梯度拟合+CART算法+前向分布算法
负梯度拟合:利用损失函数的负梯度来拟合残差的近似值.
5.3总结
Adaboost是对每个弱学习器分配权值生成的强学习器.
GBDT是将多个学习器叠加起来, 每次利用残差(或负梯度)来生成弱学习器, 再将多个弱学习器相加生成强学习器.
6.过拟合问题
6.1产生过拟合的原因
- 建模样本抽取错误
- 样本数量太少
- 抽取方法错误
- 抽样是没有足够正确考虑业务场景或特点
- 参数太多, 模型复杂度高, 泛化能力弱
- 建模时的"逻辑假设"到模型应用时已经不能成立
- 样本里噪声数据干扰过大(生成的模型在未知正常数据预测效果不好)
- 决策树模型能够完美拟合训练数据, 但对真实数据效果未必很好
- 神经网络模型
6.2解决方法(这里只针对决策树来考虑)
对于随机森林, 由于引入特征划分的随机, 有效提高了树的泛化能力, 不需要进行剪枝.正常生成的决策树由于能够完美拟合训练数据, 需要进行剪枝操作来提高泛化能力. 集成方法是将多个弱学习器通过一定策略结合得到强学习器, 相比单一模型具有更好的泛化能力, 并非学习器越多, 最终得到的强学习器效果越好. 对于Adaboost和GBDT算法而言, 可以通过设置一个阈值
ϵ
\epsilon
ϵ来使其提前终止(这也说明这两种算法弱学习器的个数是可定的), 这在一定程度上可以提高泛化能力.
RF中决策树的个数是超参, 树越多, 学习效果未必越好. 同时树越多, 计算量也会越大, 但由于是并行化集成方法, RF还是比Boosting方法要快, 但比单个决策树要慢的多.
几种避免决策树中过拟合的方法:
1)及早停止增长树法, 但无法很好把控何时停止.[先剪枝]
2)剪枝-[后剪枝]
Adaboost算法的正则化:
为了防止Adaboost 过拟合, 通常会加入正则化, 这里可以理解为学习率
f
k
(
x
)
=
f
k
−
1
(
x
)
+
α
k
G
k
(
x
)
f_k(x)=f_{k-1}(x)+\alpha_k G_k(x)
fk(x)=fk−1(x)+αkGk(x)加入正则化项
f
k
(
x
)
=
f
k
−
1
(
x
)
+
ν
α
k
G
k
(
x
)
,
0
<
ν
<
1
f_k(x)=f_{k-1}(x)+\nu\alpha_k G_k(x),0<\nu<1
fk(x)=fk−1(x)+ναkGk(x),0<ν<1上式表明, 要达到同样训练效果, 加入正则化的弱学习器迭代次数增加. 即弱学习器数量增加, 从而提高模型的泛化能力.
注:边界理论: 泛化误差收敛于某个上界, 训练集的边界越大, 泛化误差越小.
GDBT算法的解决过拟合的方法:
1)加入与Adaboost算法类似的正则化项;
2)子采样方法(subsample), 选取一部分样本去做GBDT决策树拟合(这样牺牲精度,增加了偏差);
3)剪枝.
7. RF、Adaboost、GBDT三种方法的优缺点对比
7.1RF算法的优缺点
RF算法特点: 不用做特征选择, 不用剪枝,采用boostrap sample.
优点
- RF是并行化方法, 训练速度快
- 实现简单
- 训练出模型的方差小,泛化能力强
- 对部分缺失值、异常值不敏感
缺点
- 对于噪声过大的数据, 很容易产生过拟合现象,
- 由于是对特征随机选取, 取值划分较多的特征容易产生更大影响.
(随机森林就像一个黑盒, 无法控制模型内部的运行, 只能在不同参数和随机种子之间尝试)
7.2AdaBoost算法的优缺点
优点
- 分类精度高
- AdaBoost算法提供的是框架, 可以用各种方法构建基学习器.
- AdaBoost算法不需要预先知道弱分类器的错误率上限, 由于AdaBoost的训练特点能够自适应调整假定的错误率, 执行效率高.
缺点
- 易受噪声的干扰, AdaBoost算法使得难于分类样本的权值呈指数增长, 训练会过于偏向这类困难样本, 若其为噪声, 则训练出的分类器必然受到影响.
- 训练时间长, 弱分类器训练时间长, 而且要训练多个
7.3GBDT算法的优缺点
优点
- 能够灵活处理各种类型的数据
- 在相对较少的调参情况下, 预测准确率较高
缺点
- 串行化方法, 难以并行训练数据, 计算开销大.