决策树
- 基本分类与回归方法
- 一棵树表示整个决策过程
- 根节点包含整个样本集,叶节点对应决策结果,内部节点对应决策过程(属性测试)
- 根节点到叶节点对应判定测试序列
- 熵:随机变量不确定性
- P ( X = x i ) = p i , i = 1 , . . n , H ( X ) = − ∑ i = 1 n p i l o g ( p i ) P(X=x_i)=p_i,i=1,..n,\\H(X)=- \sum_{i=1}^np_ilog(p_i) P(X=xi)=pi,i=1,..n,H(X)=−i=1∑npilog(pi)
- 熵越大不确定性越大
- 条件熵: H ( Y ∣ X ) = ∑ i = 1 n P ( X = x i ) H ( Y ∣ X = x i ) H(Y|X)=\sum_{i=1}^nP(X=x_i)H(Y|X=x_i) H(Y∣X)=i=1∑nP(X=xi)H(Y∣X=xi)
- 信息增益:特征X的信息使类Y的信息不确定性减少的程度
- g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)−H(D∣A)亦称互信息
- ID3
信息增益=划分前熵-划分后熵
优点:
理论清晰
方法简单
学习能力强
缺点:
只能处理分类属性的数据,不能处理连续属性的数据
子集规模小导致划分不充分而造成统计特征不充分而停止
倾向选取取值较多之属性,优势这类属性可能不会提供太多价值
- C4.5
信息增益比=信息增益/划分前熵
g r ( D , A ) = g ( D , A ) H A ( D ) , n 是 特 征 A 取 值 个 数 g_r(D,A)=\frac{g(D,A)}{H_A(D)},n是特征A取值个数 gr(D,A)=HA(D)g(D,A),n是特征A取值个数
处理连续特征:特征取值排序,以连续两个值中间值作为划分标准
- CART
二叉树
回归
- 平方误差最小化
叶节点预测值是划分到该叶节点所有样本目标值均值
确定最优化分:遍历所有属性,所有取值来分别尝试划分,并计算最小平方误差
假设输入空间划分为M个单元 R 1 , . . , R M R_1,..,R_M R1,..,RM ,即M个特征,每个单元 R m R_m Rm上有一个固定输出值
f ( x ) = ∑ m = 1 M c m I ( x ∈ R m ) f(x)=\sum_{m=1}^{M}c_{m}I(x\in R_m) f(x)=m=1∑McmI(x∈Rm)
当输入空间的划分确定时,可以用平方误差 ∑ x i ∈ R m ( y i − f ( x i ) ) 2 \sum_{x_i \in R_m}(y_i - f(x_i))^2 xi∈Rm∑(yi−f(xi))2来表示回归树对于训练数据的预测误差,用平方误差最小的准则求解每个单元上的最优值
选择最优切分特征 j 和切分点 s ,具体做法为: min j , s [ min c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \min_{j,s}[\min_{c_1}\sum_{x_i\in R_1(j,s)}{(y_i-c_1)^2}+\min_{c_2}\sum_{x_i\in R_2(j,s)}{(y_i-c_2)^2}] j,smin[c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2]
首先遍历特征 j ,对固定的切分特征 j 扫描切分点 s ,选择使上式达到最小值的对 (j,s)
分类树
使用 Gini 指数最小化准则来选择特征并进行划分;Gini 指数表示集合的不确定性,或者是不纯度。基尼指数越大,集合不确定性越高,不纯度也越大。这一点和熵类似。另一种理解基尼指数的思路是,基尼指数是为了最小化误分类的概率。
假设有 K 个类别,样本点属于第k类的概率为p_k,则概率分布的基尼指数定义为:
G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini(p)=\sum_{k=1}^{K}p_{k}(1-p_k)=1-\sum_{k=1}^{K}p_{k}^{2} Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
- 剪枝
防止决策树过拟合,提高泛华性能的方法,剪枝分为预剪枝与后剪枝。
预剪枝是指在决策树的生成过程中,对每个节点在划分前先进行评估,若不能带来泛化性能的提升,停止划分,标记为叶节点。
后剪枝:从训练集生成一颗完整的决策树,自底向上考察非叶节点,若将节点对应的子树替换为叶节点,能带来泛化性能的提升,则将该子树替换为叶节点。
判断是否带来泛化性能的提升?
最简单的留出法,预留一部分数据作为验证集进行性能评估。交叉验证 - 特征选择。选取能够对训练集分类的特征。关键是准则:信息增益、信息增益比、Gini 指数;
- 决策树的生成。利用信息增益最大、信息增益比最大、Gini 指数最小作为特征选择的准则。从根节点开始,递归的生成决策树。相当于是不断选取局部最优特征,或将训练集分割为基本能够正确分类的子集;
- 决策树的剪枝。决策树的剪枝是为了防止树的过拟合,增强其泛化能力。包括预剪枝和后剪枝。
- 集成学习(ensemble learning)构建并组合多个学习器来完成学习任务。获得比单一学习器显著优越的泛化性能。
- 个体学习器通常由一个现有的学习算法从训练数据产生(比如 C4.5,BP 等),只包含同种类型的个体学习器,例如“决策树集成”中全是决策树,“神经网络集成”中全是神经网络,这样的集成是“同质”的,同质集成中的个体学习器称“基学习器”。不同质的学习器存在于统一集成中,常称为“组件学习器”或直接称为个体学习器。
- 原则:要获得比单一学习器更好的性能,个体学习器应该好而不同。即个体学习器应该具有一定的准确性,不能差于弱学习器,并且具有多样性,即学习器之间有差异。
- 根据个体学习器的生成方式,目前集成学习分为两大类:
个体学习器之间存在强依赖关系、必须串行生成的序列化方法。Boosting;
个体学习器之间不存在强依赖关系、可同时生成的并行化方法。 Bagging 和随机森林(Random Forest)。 - Bagging
给出的做法就是对训练集进行采样,产生出若干个不同的子集,再从每个训练子集中训练一个基学习器。由于训练数据不同,我们的基学习器可望具有较大的差异。
Bagging 是并行式集成学习方法的代表,采样方法是自助采样法(bootstrap),用的是有放回的采样。初始训练集中大约有 63.2% 的数据出现在采样集中。
Bagging 在预测输出进行结合时,对于分类问题,采用简单投票法;对于回归问题,采用简单平均法。
优点:
- 高效。Bagging 集成与直接训练基学习器的复杂度同阶;
- Bagging 能不经修改的适用于多分类、回归任务;
包外估计。使用剩下的样本作为验证集进行包外估计(out-of-bag estimate)
Bagging 主要关注降低方差。(low variance)
- 偏差(bias)预测值(估计值)的期望与真实值之间的差距。偏差越大,越偏离真实数据
- 方差(variance):描述的是预测值的变化范围,离散程度,也就是离其期望值的距离。方差越大,数据的分布越分散
- 随机森林:
Bagging 的一个变体。以决策树为基学习器构建 Bagging,训练过程中引入随机属性选择。
原来决策树从所有特征中,选择最优特征。Ramdom Forest 的每一颗决策树中的每一个节点,先从该节点的特征集中通过bootstrap的方法随机选择 K 个特征的子集,然后从这个特征子集中通过决策树算法选择最优特征进行划分。(注意:除了随机获取特征以外,还能随机获取样本集,使用这些随机抽取的样本得到不同的决策树)
K 控制了随机性的引入程度,是一个重要的超参数。
预测 :
分类:简单投票法;
回归:简单平均法。
构造过程:
1.从原始训练集中使用bootstrap方法随机有放回采样选出m个样本,共进行n_tree次采样,生成n_tree个训练集
2.分别训练n_tree个决策树模型
3.对于单个决策树模型,假设训练样本特征的个数为n,那么每次分裂时根据信息增益/信息增益比/基尼指数选择最好的特征进行分裂
4.每棵树都一直这样分裂下去,直到该节点的所有训练样例都属于同一类。在决策树的分裂过程中不需要剪枝
5.组成随机森林。分类问题,按多棵树分类器投票决定最终分类结果;
对于回归问题,由多棵树预测值的均值决定最终预测结果
优点:
1.每次不再考虑全部的属性,而是一个属性子集,所以相比于 Bagging 计算开销更小,训练效率更高;
2.增加属性扰动,随机森林中基学习器的性能降低,使得起始时候性能较差,但是随着基学习器的增多,rf通常会收敛于更低的泛化误差,相比于 Bagging;
3.两个随机性的引入,不易陷入过拟合,抗噪声能力qiang;
4.对数据的适应能力强,可以处理离散和连续的,无需要规范化;
5.可以得到变量的重要性, 基于oob错误率(袋外错误率out-of-bag error)和基于 Gini 系数的变化。
6.不同决策树可以由不同主机并行训练生成,效率很高
缺点:
在噪声较大的时候容易过拟合。
Boosting
个体学习器之间存在强依赖关系,必须串行序列化生成的集成学习方法。三个臭皮匠顶个诸葛亮。Boosting 意为提升,希望将每个弱学习器提升为强学习器。
工作机制如下:
1.从初始训练集中学习一个基学习器;.
2.根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续收到更多关注;
3.基于调整后的样本分布来训练下一个基学习器;
4.如此反复,直到基学习器数目达到 T,最终将这 T 个基学习器进行加权结合。
5.对训练样本分布调整,主要是通过增加误分类样本的权重,降低正确分类样本的权重。
Boosting 关注的主要是降低偏差。(low bias)
- AdaBoost :
提高那些被前一轮弱分类器错误分类样本的权值,降低被正确分类的样本的权值。没有得到正确分类的数据受到后一轮弱分类器的关注;
采用加权多数表决。加大分类错误率低的分类器的权值,使其在表决中起较大作用,减少分类误差率大的弱分类器的权值,使其在表决中起较小作用。
弱分类器被线性组合成为一个强分类器
训练目标:
最小化指数损失函数。
三部分组成:
分类器权重更新公式;
样本分布(也就是样本权重)更新公式;
加性模型。 最小化指数损失函数。
3.3 AdaBoost 优缺点
优点:
分类精度很高
可以使用各种回归分类模型来构建弱学习器,灵活。
作为简单的二元分类器时,构造简单,可理解。
不容易发生过拟合
缺点:
对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。
- GBDT
(Gradient Boosting Decision Tree)又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法。
Regression Decision Tree(DT);
Gradient Boosting(GB);
Shrinkage(算法的一个重要演进分支,目前大部分源码都是基于该版本实现);
GBDT 适用范围;
与随机森林的对比。
DT:回归树
GBDT 全都是回归树,核心是累加所有树的结果作为最终结果。只有回归树的结果累加起来才有意义,分类结果累加是没有意义。
GBDT 调整之后可以用于分类问题,但是内部还是回归树。
这部分和决策树中的是一样的,无非就是特征选择。回归树用的是最小化均方误差,分类树是用的是最小化基尼指数(CART)
GB:梯度迭代 Gradient Boosting
Boosting 是集成方法。对弱分类器组合得到强分类器,串行的,弱分类器间依次训练。核心就是每一颗树学习的是之前所有树结论和的残差。
Gradient体现在:无论前面一颗树的 cost function 是什么,是均方差还是均差,只要它以误差作为衡量标准,那么残差向量都是它的全局最优方向,这就是 Gradient。
- Shrinkage(缩减)是 GBDT 的重要演进分支
核心思想:每走一小步逼近结果的效果,比每次迈一大步很快逼近结果的方式更容易防止过拟合。
不信任每次学习到的残差,认为每棵树只学到真理的一小部分,累加的时候只累加一小部分,通过多学习几棵树来弥补不足。
仍以残差作为学习目标,对残差学出来的结果只累加一小部分(step* 残差)逐步逼近目标,step 一般都比较小 0.01-0.001, 各树的残差是渐变而不是陡变的。
本质上,Shrinkage 为每一颗树设置了一个 weight,累加时要乘以这个 weight,但和 Gradient 没有关系。
这个 weight 就是 step。跟 AdaBoost 一样,Shrinkage 能减少过拟合也是经验证明的,目前还没有理论证明。 - GBDT 适用范围
回归问题(线性和非线性);
二分类问题(设定阈值,大于为正,否则为负)和多分类问题 - GBDT 和随机森林区别(重点)
- GBDT 和随机森林的相同点:
多棵树组成;
最终结果由多棵树共同决定。 - GBDT 和随机森林的不同点:
rf可以是分类树、回归树;
GBDT 只能是回归树;
组成rf的树可并行生成(Bagging);GBDT 只能串行生成(Boosting);
这两种模型都用到了Bootstrap的思想。
对于最终的输出结果,随机森林使用多数投票或者简单平均;
GBDT 将所有结果累加,或加权累加;
随机森林对异常值不敏感,GBDT 对异常值非常敏感;
随机森林训练集权值一样,GBDT 是基于权值的弱分类器的集成;
随机森林通过减小模型的方差提高性能,GBDT 通过减少模型偏差提高性能。 - GBDT 相比决策树优点
泛化性能更好
每一步的残差计算增大分错样本权重,分对样本都趋向于0。更专注分错的样本 - Gradient 体现在
残差是全局最优的绝对方向,类似于求梯度。
- re-sample
GBDT 在使用残差的同时引入 Bootstrap re-sampling,GBDT 多数实现版本中引入了这个选项,是否一定使用有不同的看法。
原因在于 re-sample 导致的随机性,使得模型不可复现,对于评估提出一定的挑战,比如很难确定性能的提升是由于 feature 的原因还是 sample 的随机因素