机器学习面试知识点总结(五)
决策树
决策树主要优点是模型具有可读性,分类速度快。
决策树的学习通常包括三个步骤:特征选择,决策树的生成和决策树的修剪。
决策树学习
决策树学习本质上是从训练数据集中归纳出一组分类规则。决策树学习的损失函数通常是正则化的极大似然函数,决策树学习的策略是以损失函数为目标函数的最小化。当损失函数确定以后,学习问题就变为在损失函数意义下选择最优决策树的问题。从所有可能的决策树中选取最优决策树是NP完全问题,所以现实中决策树学习算法通常采用启发式方法。
启发式方法:相对于最优化算法提出最优算法求得该问题每个实例的最优解,启发式方法是在可接受的花费下给出待解决组合优化问题每一个实例的一个可行解。
生成的决策树可能对训练数据有很好的分类能力,但对未知的测试数据却眉笔有很好的分类能力,也就是我们说的过拟合问题。对此,需要对已生成的树自下而上进行剪枝,将树变得更简单,从而使它具有更好的泛化能力。
决策树的生成对应模型的局部选择,决策树的剪枝对应于模型的全局选择。
特征选择
信息增益
熵
熵(entropy)是表示随机变量不确定性的度量。设X是一个取有限个值的离散随机变量,其概率分布为
P(X=xi)=pi,i=1,2,...,n
则随机变量X的熵定义为 H(X)=−i=1∑npilogpi
其中若 pi=0,则定义 0log0=0。
熵越大,随机变量的不确定性就越大。
条件熵
设有随机变量 (X,Y),其联合概率分布为
P(X=xi,Y=yj)=pij,i=1,2,...,n;j=1,2,...,m
条件熵 H(Y∣X)表示在已知随机变量 X的条件下随机变量 Y的不确定性,
H(Y∣X)=i=1∑NpiH(Y∣X=xi)
其中, pi=P(X=xi),i=1,2,...,n
信息增益
特征A在训练数据集D的信息增益 g(D,A),定义为集合D的经验熵 H(D)与特征A给定条件下D的经验条件熵 H(D∣A)之差,即
g(D,A)=H(D)−H(D∣A)
信息增益比
以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题,使用信息增益比可以对这一问题进行校正。
特征A对训练数据集D的信息增益比 gR(D,A)定义为其信息增益 g(D,A)与训练数据集D关于特征A的值的熵 HA(D)之比,即
gR(D,A)=HA(D)g(D,A)其中, HA(D)=∑i=1n∣D∣∣Di∣log∣D∣∣Di∣,n是特征A取值的个数。
决策树的生成
ID3算法
ID3算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归的构建决策树。
具体方法是:从根节点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子节点;再对子节点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止。最后得到一个决策树。ID3相当于用极大似然法进行概率模型的选择。
对于样本集合D,类别数为K,数据集D的经验熵表示为
H(D)=−k=1∑K∣D∣∣Ck∣log2∣D∣∣Ck∣其中 Ck是样本集合 D中属于第k类的样本子集, ∣Ck∣表示该子集的元素个数, ∣D∣表示样本集合的元素个数。
然后计算某个特征A对于数据集D的经验条件熵 H(D∣A)
H(D∣A)=i=1∑n∣D∣∣Di∣H(Di)=−i=1∑n∣D∣∣Di∣k=1∑K∣Di∣∣Dik∣log2∣Di∣∣Dik∣其中,Di表示D中特征A取第i个值的样本子集,Dik表示Di中属于第k类的样本子集。
计算信息增益
g(D,A)=H(D)−H(D∣A)
C4.5算法
C4.5算法与ID3算法相似,C4.5算法对ID3算法进行了改进。C4.5在生成过程中,用信息增益比来选择特征。
CART算法
CART同样由特征选择,树的生成及剪枝组成,既可以用于分类又可以用于回归。
CART的生成
1. 回归树的生成
决策树的生成 就是递归地构建二叉决策树的过程。对回归树用平方误差最小化准则,进行特征选择,生成二叉树。
选择最优切分点变量 j与切分点 s,求解 j.smin[c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2]遍历变量j,对固定的切分变量j扫描切分点s,选择使上式达到最小值的对(j,s)。
2. 分类树的生成
分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。
基尼指数
分类问题中,假设有K个类,样本点属于第k类的概率为 pk,则概率分布的基尼指数定义为
Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
对于二分类问题,概率分布的基尼指数为
Gini(p)=2p(1−p)
对于给定的样本集合D,其基尼指数为
Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
如果样本集合D根据特征A是否取某一可能值a被分割成 D1和 D2两部分,即 D1=(x,y)∈D∣A(x)=a,D2=D−D1
则在特征A的条件下,集合D的基尼指数定义为
Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
基尼指数 Gini(D)表示集合D的不确定性,基尼指数 Gini(D,A)表示经A=a分割后集合D的不确定性。
CART在每一次迭代中选择基尼指数最小的特征及其对应的切分点进行分类。但与ID3、C4.5不同的是,CART是一颗二叉树,采用二元切割法,每一步将数据按特征A的取值切成两份,分别进入左右子树。
《百面机器学习》中相关问题
问题1 决策树有哪些常用的启发函数?
ID3:最大信息增益
C4.5:最大信息增益比
CART分类树:最大基尼指数
CART回归树:最小平方误差
问题2 除了构建准则之外,三种决策树区别与联系是什么?
首先,ID3是采用信息增益作为评价标准,会倾向于取值较多的特征。因为,信息增益反映的是给定条件以后不确定性减少的程度,特征取值越多就意味着确定性更高,也就是条件熵越小,信息增益越大。这在实际应用中是一个缺陷。比如,我们引入特征“DNA”,每个人的DNA都不同,如果ID3按照“DNA”特征进行划分一定是最优的(条件熵为0),但这种分类的泛化能力是非常弱的。因此,C4.5实际上是对ID3进行优化,通过引入信息增益比,一定程度上对取值比较多的特征进行惩罚,避免ID3出现过拟合的特性,提升决策树的泛化能力。
其次,从样本类型的角度,ID3只能处理离散型变量,而C4.5和CART都可以处理连续型变量。C4.5处理连续型变量时,通过对数据排序之后找到类别不同的分割线作为切分点,根据切分点把连续属性转换为布尔型,从而将连续型变量转换多个取值区间的离散型变量。而对于CART,由于其构建时每次都会对特征进行二值划分,因此可以很好地适用于连续性变量。
从应用角度,ID3和C4.5只能用于分类任务,而CART(Classification and Regression Tree,分类回归树)从名字就可以看出其不仅可以用于分类,也可以应用于回归任务(回归树使用最小平方误差准则)。
此外,从实现细节、优化过程等角度,这三种决策树还有一些不同。
比如,ID3对样本特征缺失值比较敏感,而C4.5和CART可以对缺失值进行不同方式的处理;
ID3和C4.5可以在每个结点上产生出多叉分支,且每个特征在层级之间不会复用,而CART每个结点只会产生两个分支,因此最后会形成一颗二叉树,且每个特征可以被重复使用:对于CART分类树离散值的处理问题,采用的思路是不停的二分离散特征。CART分类树会考虑把A分成{A1}和{A2,A3},{A2}和{A1,A3},{A3}和{A1,A2}三种情况,找到基尼系数最小的组合,比如{A2}和{A1,A3}{A2}和{A1,A3},然后建立二叉树节点,一个节点是A2对应的样本,另一个节点是{A1,A3}对应的节点。同时,由于这次没有把特征A的取值完全分开,后面我们还有机会在子节点继续选择到特征A来划分A1和A3。这和ID3或者C4.5不同,在ID3或者C4.5的一棵子树中,离散特征只会参与一次节点的建立。
问题3 如何对决策树进行剪枝?
1、预剪枝
预剪枝的核心思想是在树中结点进行扩展之前,先计算当前的划分是否能带来模型泛化能力的提升,如果不能,则不再继续生长子树。此时可能存在不同类别的样本同时存于结点中,按照多数投票的原则判断该结点所属类别。预剪枝对于何时停止决策树的生长有以下几种方法。
- 当树到达一定深度的时候,停止树的生长。
- 当到达当前结点的样本数量小于某个阈值的时候,停止树的生长。当到达当前结点的样本数量小于某个阈值的时候,停止树的生长。
- 计算每次分裂对测试集的准确度提升,当小于某个阈值的时候,不再继续扩展。计算每次分裂对测试集的准确度提升,当小于某个阈值的时候,不再继续扩展。
预剪枝具有思想直接、算法简单、效率高等特点,适合解决大规模问题。但如何准确地估计何时停止树的生长(即上述方法中的深度或阈值),针对不同问题会有很大差别,需要一定经验判断。且预剪枝存在一定局限性,有欠拟合的风险,虽然当前的划分会导致测试集准确率降低,但在之后的划分中,准确率可能会有显著上升。
2、后剪枝
后剪枝的核心思想是让算法生成一棵完全生长的决策树,然后从最底层向上计算是否剪枝。剪枝过程将子树删除,用一个叶子结点替代,该结点的类别同样按照多数投票的原则进行判断。同样地,后剪枝也可以通过在测试集上的准确率进行判断,如果剪枝过后准确率有所提升,则进行剪枝。相比于预剪枝,后剪枝方法通常可以得到泛化能力更强的决策树,但时间开销会更大。
常见的后剪枝方法包括错误率降低剪枝(Reduced Error Pruning,REP)、悲观剪枝(Pessimistic Error Pruning,PEP)、代价复杂度剪枝(Cost Complexity Pruning,CCP)、最小误差剪枝(Minimum Error Pruning,MEP)、CVP(Critical Value Pruning)、OPP(Optimal Pruning)等方法,这些剪枝方法各有利弊,关注不同的优化角度,本文选取著名的CART剪枝方法CCP进行介绍。
代价复杂剪枝主要包含以下两个步骤。
- 从完整决策树T0开始,生成一个子树序列{T0,T1,T2,…,Tn},其中Ti+1由Ti生成,Tn为树的根结点。
- 在子树序列中,根据真实误差选择最佳的决策树。
步骤1从 T0开始,裁剪 Ti中关于训练数据集合误差增加最小的分支以得到 Ti+1。具体地,当一棵树T在结点t处剪枝时,它的误差增加可以用 R(t)−R(Tt)表示,其中R(t)表示进行剪枝之后的该结点误差, R(Tt)表示未进行剪枝时子树 Tt的误差。考虑到树的复杂性因素,我们用 ∣L(Tt)∣表示子树 Tt的叶子结点个数,则树在结点t处剪枝后的误差增加率为
α=∣L(Tt)∣−1R(t)−R(Tt)
在得到 Ti后,我们每步选择 α最小的结点进行相应剪枝。
最后,利用独立的验证数据集,测试子树序列 T0,T1,...,Tn中各棵子树的基尼指数,选取最优子树 Tα
补充
补充一 C4.5和CART对连续特征的处理
1、C4.5
C4.5算法中策略是采用二分法将连续属性离散化处理:假定样本集D的连续属性有n个不同的取值,对这些值从小到大排序,得到属性值的集合 {a1,a2,...,an}。把区间 [ai,ai+1)的中位点 2ai+ai+1作为候选划分点,于是得到包含n-1个元素的划分点集合 Ta={2ai+ai+1∣1⩽i⩽n−1}
对于每个划分点t,按如下公式计算其信息增益值,然后选择使信息增益值最大的划分点进行样本集合的划分。 Gain(D,a)=t∈TamaxGain(D,a,t)=t∈TamaxH(D)−λ∈{−,+}∑∣D∣∣Dtλ∣H(Dtλ)
其中, Gain(D,a,t)是样本集D基于划分点t二分后的信息增益。
2、CART
CART分类树连续值的处理问题,其思想和C4.5是相同的,都是将连续的特征离散化。唯一的区别在于在选择划分点时的度量方式不同,C4.5使用的是信息增益,则CART分类树使用的是基尼系数。
具体的思路如下,比如m个样本的连续特征A有m个,从小到大排列为 a1,a2,…,am,则CART算法取相邻两样本值的中位数,一共取得m-1个划分点。对于这m-1个点,分别计算以该点作为二元分类点时的基尼系数。选择基尼系数最小的点作为该连续特征的二元离散分类点。比如取到的基尼系数最小的点为 at,则小于 at的值为类别1,大于 at的值为类别2,这样我们就做到了连续特征的离散化。要注意的是,与二值离散属性不同的是,如果当前节点为连续属性,则该属性后面还可以参与子节点的产生选择过程。
补充二 决策树对缺失特征的处理
- 抛弃缺失值
抛弃极少量的缺失值的样本对决策树的创建影响不是太大。但是如果属性缺失值较多或是关键属性值缺失,创建的决策树将是不完全的,同时可能给用户造成知识上的大量错误信息,所以抛弃缺失值一般不采用。只有在数据库具有极少量的缺失值同时缺失值不是关键的属性值时,且为了加快创建决策树的速度,才采用抛弃属性缺失值的方式创建决策树。 - 补充缺失值
缺失值较少时按照我们上面的补充规则是可行的。但如果数据库的数据较大,缺失值较多(当然,这样获取的数据库在现实中使用的意义已不大,同时在信息获取方面基本不会出现这样的数据库),这样根据填充后的数据库创建的决策树可能和根据正确值创建的决策树有很大变化。 - 概率化缺失值
对缺失值的样本赋予该属性所有属性值的概率分布,即将缺失值按照其所在属性已知值的相对概率分布来创建决策树。用系数F进行合理的修正计算的信息量,F=数据库中缺失值所在的属性值样本数量去掉缺失值样本数量/数据库中样本数量的总和,即F表示所给属性具有已知值样本的概率。 - 缺失值单独分支