决策树(decision tree)是一种基本的分类与回归方法。笔者在学习了《统计学习方法》之后,从决策树实现分类和回归所需的原理出发,进行总结。下面将介绍ID3算法、C4.5、CART算法的计算过程及区别。决策树理论知识的学习和掌握,是对以决策树为基础模型的集成方法Random Forest、GBDT、XGBoost、lightgbm及Catboost的基础必备。因此,笔者在复习决策树章节过程中,将知识点重新梳理一遍,以便更好理解。也为加深对决策树的理解,将具体的代码走了一遍,加深理解和提高编码实现能力。
下面将从知识点介绍、算法流程介绍两部分进行介绍。
1、知识点
决策树模型:分类决策树模型是一种描述对实例进行分类的树形结构,决策树由节点(node)和有向边(directed edge)组成。节点有两种类型:内部节点(internal node)和叶节点(leaf node)。内部节点表示一个特征或属性,叶节点表示一个类。
决策树学习:假设给定训练数据集
其中,为输入实例(即第i个样本),N为特征个数(即一个实例有N个特征),为类标记,,N为样本容量。学习的目标是根据给定的训练数据集构建一个决策树模型,使它能够对实例进行正确的分类。
熵(entropy):度量随机变量的不确定性。设X是一个取有限个值得离散随机变量,其概率分布为:
则随机变量X的熵定义为
(1)
上述式子中对数通常以2或e为底,这时熵的单位分别称做比特(bit)或纳特(nat)。由定义可知,熵只依赖于X的分布,与X具体取值无关,故也将X的熵记作。
条件熵(conditional entropy):在条件A下,随机变量B的不确定性度量。设随机变量(X,Y),其联合概率分布为:
条件熵H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性。其定义为X给定条件下Y的条件概率分布的熵对 X的数学期望:
这里,.
信息增益(information gain):表示在确定X信息使得Y得信息不确定性较少的程度。特征A对训练数据集D的信息增益,定义为集合D的经验熵与特征A给定条件下D的经验熵之差,即:
一般情况下,熵H(D)与条件熵H(D|A)之差,称之为互信息(mutual information)。
信息增益的算法计算如下:
输入:训练数据集D和特征A;
输出:特征A对训练数据集D的信息增益.
(1) 计算数据集D的经验熵H(D):
(2) 计算特征A对数据集D的经验条件熵H(D|A):
(3) 计算信息增益
其中,表示数据集D第K类子集,表示属于类的样本数量。特征A有多个取值,根据取值将D划分为n个子集表示样本集的个数。表示子集中属于的样本集合,表示样本的样本个数。
信息增益比(information gain ratio):特征A对数据集D的信息增益比定义为其信息增益与训练数据集D关于特征A的值熵之比,即:
基尼指数(Gini index):分类问题中,假设有K个类,样本点属于第k类的概率为,则概率分布的基尼指数定义为:
对于二分类问题,若样本点属于第1类的概率为p,则概率分布的基尼指数为:
对于给定的样本集合,其基尼指数为
其中,表示数据集D第k类子集。
决策树剪枝:决策树的剪枝常通过极小化决策树整体的损失函数(loss function)或代价函数(cost function)来实现。设树的叶结点个数为,t是树T的叶结点,该叶结点有个样本点,其中k类的样本点有个,,为叶结点t上的经验熵,为参数,则决策树学习的损失函数可以定义为:
其中经验熵为:
树的剪枝算法:
输入:生成算法产生的整个树T,参数。
输出:剪枝后子树。
(1)计算每个结点的经验熵。
(2)递归地从树的叶结点向上回缩。设一组叶结点回缩到其父节点之前与之后的整体树分别为和,与对应的损失函数值分别是与,如果
则进行剪枝,即将父结点变为新的叶结点。
(3)返回(2),直至不能继续为止,得到损失函数最小的子树T。
2、ID3、C4.5、CART算法流程
2.1 ID3算法
ID3算法在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。具体方法是:从根节点(root node)开始,对结点计算所有可能的特征的信息增益,选择特征增益最大的特征作为结点的特征,由该特征不同的取值建立子结点;再递归调用以上方法,构建决策树;直到所有特征的信息增益很小或没有特征可以选择为止。最后得到一个决策树。
ID3算法:
输入:训练数据集D,特征集A,阈值
输出:决策树T
(1)若D中所有实例属于同一类,则T为单结点树,并将类作为该结点的类标记,返回T。
(2)若,则T为单结点树,并将D中实例数最大的类作为该结点的类标记,返回T。
(3)(1)(2)不成立,按信息增益的计算方式计算A中各特征对D的信息增益,选择信息增益最大的特征。
(4)如果的信息增益小于阈值,则置T为单结点树,并将D中实例数最大的类作为该结点的类标记,返回T。
(5)(4)不成立,则对的每一个取值,依将D分割为若干非空子集,将中实例数最大的类作为标记,构建子接待你,由结点及其子结点构成树T,返回T。
(6)对第i各子结点,以为训练集,以为特征集,递归地调用步(1)~(5),得到子树,返回。
2.2 C4.5 算法
C4.5在决策树各个结点上应用信息增益比准则选择特征。其他思路同ID3。
算法如下:
输入:训练数据集D,特征集A,阈值
输出:决策树T
(1)若D中所有实例属于同一类,则T为单结点树,并将类作为该结点的类标记,返回T。
(2)若,则T为单结点树,并将D中实例数最大的类作为该结点的类标记,返回T。
(3)(1)(2)不成立,按信息增益比的计算方式计算A中各特征对D的信息增益比,选择信息增益最大的特征。
(4)如果的信息增益小于阈值,则置T为单结点树,并将D中实例数最大的类作为该结点的类标记,返回T。
(5)(4)不成立,则对的每一个取值,依将D分割为若干非空子集,将中实例数最大的类作为标记,构建子接待你,由结点及其子结点构成树T,返回T。
(6)对第i各子结点,以为训练集,以为特征集,递归地调用步(1)~(5),得到子树,返回。
2.3 CART算法
分类与回归树(classification and regression tree,CART):同样由特征选择、树的生成与剪枝组成。既可以用于回归又可以用于分类。CART是再给定随机变量X条件下输出随机变量Y的条件概率分布的学习方法。
CART算法:
(1)决策树生成:基于训练数据集生成决策树,生成的决策树尽量大;
(2)决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。
回归树采用平方误差最小化准则,分类树采用基尼指数最小化准则,进行特征选择,生成二叉树。
最小二乘回归树生成算法:
输入:训练数据集D。
输出:回归树。
在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树。
(1)选择最优切分变量j与切分点s,求解:
遍历变量j,对固定的切分变量j扫描切分点s,选择上式达到最小值的对(j,s)。
(2)用选定的对(j,s)划分区域并决定相应的输出值:
(3)继续对两个子区域调用步骤(1),(2),直至满足停止条件。
(4)将输入空间划分为M个区域,生成决策树:
分类树生成:决策树各个结点上应用基尼指数选择特征,其他同ID3和C4.5计算。
输入:训练数据集D,特征集A,阈值
输出:决策树T
(1)若D中所有实例属于同一类,则T为单结点树,并将类作为该结点的类标记,返回T。
(2)若,则T为单结点树,并将D中实例数最大的类作为该结点的类标记,返回T。
(3)(1)(2)不成立,按基尼指数的计算方式计算A中各特征对D的基尼指数,选择信息增益最大的特征。
(4)如果的信息增益小于阈值,则置T为单结点树,并将D中实例数最大的类作为该结点的类标记,返回T。
(5)(4)不成立,则对的每一个取值,依将D分割为若干非空子集,将中实例数最大的类作为标记,构建子接待你,由结点及其子结点构成树T,返回T。
(6)对第i各子结点,以为训练集,以为特征集,递归地调用步(1)~(5),得到子树,返回。
CART剪枝算法:
输入:CART生成决策树
输出:最优决策树
(1)设
(2)设
(3)自下而上地对各内部结点t计算以及
这里,表示以t为根结点的子树,是对训练数据的预测误差,是的叶结点个数,g(t)表示剪枝后整体损失函数减少的程度。
(4)对的内部结点t进行剪枝,并对叶结点t以多数表决法决定其类,得到树T。
(5)设。
(6)如果不是由根结点及两个叶结点构成的树,则回到步骤(3);否则令。
(7)选择交叉验证法在子树序列中选择最优。
参考资料:《统计学习方法》