决策树通常用于分类和回归,也是非常常用的数据挖掘算法。决策树的训练任务就是从数据中提取出一系列的规则,可以认为是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α .