统计学习方法——第5章 决策树(个人笔记)
参考《统计学习方法》(第二版)李航
决策树的学习包括三个步骤:特征选择、决策树的生成、决策树的修剪。
5.1 决策树模型与学习
5.1.1 决策树模型
决策树由结点和有向边组成。
结点有两种类型:
①内部结点:内部结点表示一个特征或属性。
②叶节点:叶结点表示一个类。
用决策树分类:
从根结点开始,对实例的某一特征进行测试,根据测试结果,将实例分配到其子结点;这时,每一个子结点对应着该特征值的一个取值。如此递归下去,直至达到叶结点,最后,将实例分到叶结点的类中。
5.1.2 决策树与if-then规则
略
5.1.3 决策树与条件概率分布
大致思想如下图
5.1.4 决策树学习
跟kd树学习差不多。
5.2 特征学习
5.2.1 特征选择问题
特征选择就是选取训练数据中具有分类能力的特征,这样才能提高决策树的学习效率。
换句话说,没有分类能力的特征没有用。
例子
5.2.2 信息增益
如果一个特征具有更好的分类能力,或者说,按照这一特征将训练集分割成子集,使得各个子集在当前条件下有最好的分类,那就应该选择这个特征。
信息增益就能够很好的表示这一直观的准则。
随机变量X,其概率分布为
则随机变量的信息熵为
设随机变量(X,Y),其联合概率分布为
条件熵H(Y|X)表示在X的条件下,是Y的概率:
信息增益表示得知特征X的信息使类Y的信息的不确定性减少(概率增加)的程度。
定义 5.2(信息增益)
特征A对训练数据集D的信息增益g(D,A),定义为:
等价于训练数据集中的类与特征的互信息。
算法 5.1(信息增益的算法)
输入:训练数据集D和特征A;
输出:特征A对训练数据集D的信息增益g(D,A)。
(1)计算数据集D的经验熵H(D)
其中K为类别数,为第k类的样本个数,D为所有类别的样本个数。
(2)计算特征A对数据集的经验条件熵H(D|A)
其中,为特征A的取值将D分为n个子集,i=1,...,n,
,即
中属于
样本的集合。
(3)计算信息增益
例子
5.2.3 信息增益比
以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题。使用信息增益比可以对这一问题进行校正。
定义 5.3(信息增益比)
定义为信息增益与训练数据集D关于特征A的值的熵之比
其中g为信息增益,
5.3 决策树的生成
5.3.1 ID3算法
ID3算法的核心就是在决策树各个节点上应用信息增益准则选择特征,递归地构建决策树。
具体方法:
从根结点开始,对结点计算所有可能的特征值的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子节点;再对子节点递归地调用以上方法,构建决策树;知道所有的特征信息增益均很小或没有特征可以选择为止。
算法 5.2 (ID3算法)
输入:训练数据集D,特征集A阈值;
输出:决策树T。
(1)若D中所有实例属于同一类,则T为单节点树,并将类
作为 该节点的类标记,返回T;
(2)若,则T为单节点树,并将D中实例树最大的类
作为该结点的类标记,返回T;
(3)否则,按算法5.1计算A中各特征值对D的信息增益,选择信息增益最大的特征;
(4)如果小于阈值
,则置T为单节点树,并将D中实例数最大的类
作为该结点的类的标记,返回T;
(5)否则,对的每一可能值
,依
=
,将D分割为若干非空子集
,将
中实例数最大的类作为标记,构建子节点,由节点及其子节点构成树T,返回T;
(6)对第i个节点,以为训练集,以A-
为特征集,递归调用步(1)~步(5),得到子树
,返回
。
例子,会看的明白一点
5.3.2 C4.5的生成算法
选择信息增益比来选择特征,算法步骤跟ID3一样。
5.4 决策树的剪枝
简化分类树模型,防止过拟合。
设树T的叶节点个数为,t是树T的叶节点,该叶节点有
个样本点,其中k类的样本点有
个,
则决策树学习的损失函数为
其中经验熵为
算法5.4 (树的剪枝算法)
输入:生成算法产生的整个树T,参数;
输出:修剪后的子树。
(1)计算每个结点的经验熵。
(2)递归地从树的叶节点向上回缩。
设一组叶节点回缩到其父节点之前与之后的整体树分别为与
,其对应的损失函数值分别为
和
,如果
则进行剪枝,将父节点变为新的叶节点。
(3)返回(2),知道不能继续位置,得到损失函数最小的子树。
5.5 CART算法
CART(classification and regression tree,CART)
CART是在给定输入随机变量X条件下输出随机变量Y的条件概率分布的学习方法。
CART算法步骤:
(1)决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;
(2)决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。
5.5.1 CART生成
对回归树用平方误差最小化准则,对分类树用基尼指数最小化原则,进行特征选择,生成二叉树。
1. 回归树的生成
给定训练数据集
一颗回归树对应着输入空间(即特征空间)的一个划分以及划分的单位上的输出值。
选择第j个变量和它取的值s,作为切分变量和切分点,并定义两个区域
和
求解平方误差,使其最小来寻找最优切分变量j和最优切分点s,
找到最优(j,s)将输入空间划分为两个子区域,最后对每个区域不断重复上述划分步骤,直至满足停止条件为止。
算法5.5 (最小二乘回归树生成算法)
输入:训练数据集D
输出:回归树f(x)。
(1)选择最优切分变量j和切分点s,求解
(2) 用选定的(j,s)划分区域并决定相应的输出值:
,
(3)继续对两个子区域调用步骤(1),(2),直到满足停止条件为止。
(4)将输入空间划分为M个区域,生成决策树:
2.分类树的生成
定义 5.4 (基尼系数)分类问题中,假设有K个类,样本点属于第k类的概率为,则概率分布的基尼指数定义为
对于给定的样本集合D,其基尼指数为
其中,为D中第k类的样本子集。
算法 5.6(CART生成算法)
输入:训练数据集D,停止计算的条件
输出:CART决策树
(1)设节点的训练数据集为D,计算现有特征对该数据集的基尼指数。此时,对每个特征A,对其可能取的每个值a,根据A=a的测试为“是”或“否”,将D分成D1和D2两部分,然后计算基尼指数。
(2)选择最小基尼指数的特征和切分点,将节点生成两个子节点,将训练数据集依特征分配到两个子节点上。
(3)对两个子节点递归地调用(1),(2),直到满足停止条件。
(4)生成CART决策树
5.5.2 CART剪枝
从决策树底端减去一些子树,使决策树变小,从而对未知数据有更准确地预测。
算法 5.7(CART剪枝算法)
输入:CART算法生成的决策树;
输出:最优决策树
(1)设k=0,T=.
(2)设
(3)自下而上,计算,
以及
其中为以t为根节点的子树,
是对训练数据的预测误差,
是
的叶节点树。
(4)对的内部节点t进行剪枝,并对叶节点t以多数表决法决定其类,得到树T。
(5)k=k+1,,
.
(6)如果不是根节点,则回到步骤(2);否则令
;
(7)采用交叉验证法在子树序列选取最优子树