决策树通常用于分类和回归,也是非常常用的数据挖掘算法。决策树的训练任务就是从数据中提取出一系列的规则,可以认为是if-then规则的集合对应树的结构,内部结点表示属性,叶结点表示类,每个实例对应一条从根结点到叶结点的路径;也可以认为是定义在特征空间与类空间上的条件概率分布,一条路径对应空间划分中的一个单元。
决策树的学习方法包括ID3, C4.5, CART。决策树学习的损失函数通常是正则化的极大似然函数,损失函数确定以后,学习问题变为了在损失函数意义下选择最优决策树的问题。能对训练数据正确分类的决策树可能有很多个,也可能一个都没有。需要选择与训练数据矛盾最小的树,若过拟合再进行剪枝,使最终的模型具有很好的泛化能力。
1. 特征选择
构造决策树时需要解决的第一个问题是,当前数据集上哪个特征在划分数据分类时取决定性作用,所以必须评估每个特征找到决定性特征。在根据特征划分数据集的时候,主要原则是将无序的数据变得有序,通常采用信息论度量信息。这里给出一些重要的定义:
(1)信息:
若X是一个取有限个值的离散随机变量,其概率分布为P(X=xi)=pi。待分类的事物可能划分在多个类中,则xi的信息定义为:
信息的期望值,是集合信息的度量方式,定义为
(3)信息增益information gain:
数据集划分前后信息发生的变化。对于训练数据集和特征A,信息增益的算法为:
S1 计算数据集D的经验熵:
特征A对训练数据集D的信息增益比gR(D,A)定义为其信息增益与训练集关于特征A的熵之比:
2. ID3算法
ID3算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。ID3相当于用极大似然法进行概率模型的选择。ID3算法构建决策树的步骤如下:
输入:训练集D,特征集A,阈值ϵ.
(1)若D中所有实例属于同一类Ck,则T为单结点树,并将Ck作为该结点的类标记,返回T;
(2)若A=ϕ,则T为单结点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T;
(3)else,计算A中各特征对D的信息增益,选择信息增益最大的特征A;
(4)如果Ag的信息增益小于阈值ϵ,则置T为单结点树,并将D中实例数最大的类Ck作为该结点的类标记,返回T;
(5)else,对Ag的每一个可能值ai,按照Ag=ai将D分割为若干非空子集Di,将Di中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T并返回T;
(6)对第i个子结点,以Di为训练集,以A−{Ag} 为特征集,递归调用步骤(1)~(5),得到子树Ti并返回子树。
3. C4.5算法
C4.5算法与ID3算法类似,只是C4.5在生成结点的过程中采用信息增益比来选择特征。这是因为以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题,而使用信息增益比可以对这一问题进行校正。
4. 剪枝pruning
剪枝就是从已经生成的决策树上裁掉一些子树或叶结点,并将其根结点或父结点作为新的叶结点,从而将已经生成的树进行简化。
剪枝通常是通过极小化树整体的损失函数或代价函数来实现。设树T的结点个数为|T|,t是树的叶结点,该叶结点有Nt个样本点,其中k类的样本点有Ntk个,Ht(T)为叶结点t上的经验熵。则决策树学习的损失函数可以定义为:
剪枝就是当α确定的时候选择损失函数最小的模型,即损失函数最小的子树。以下为树的剪枝算法,该算法可用动态规划实现:
输入:整个树T,参数α
输出:修剪后的子树Tα.
(1)计算每个结点的经验熵;
(2)递归地从树的叶结点向上回缩。设一组结点回缩到其父结点之前与之后的整体树分别为TB与TA,其对应的损失函数值分别是Cα(TB)与Cα(TA)。如果
(3)返回(2),直至不能继续为止,得到损失函数最小的子树Tα.