决策树(decision tree)是一种基本的分类与回归方法,本章主要讨论用于分类的决策树。可以将决策树看成是一个if-then规则的集合。决策树的学习通常包括3个步骤:特征选择、决策树的生成和决策树的修剪。
特征选择
特征选择在于选取对训练数据具有分类能力的特征。如果利用一个特征进行分类的结果与随机分类没有很大差别,则称这个特征是没有分类能力的。通常特征选择的准则是信息增益或信息增益比。
先给出熵与条件熵的定义。
在信息论与概率统计中,熵(entropy)是表示随机变量不确定性的度量。设$X$是一个取有限个值的随机变量,其概率分布为:
egin{align*}
P(X=x_i)=p_i, quad i=1,2,cdots,n
end{align*}
则随机变量$X$的熵定义为:
egin{align*}
H(X) = -sum_{i=1}^{n} p_i log p_i ag{5.1}
end{align*}
若$p_i=0$,则定义$0log0=0$。(在数学上,$log0$是没有定义的。)通常上式中的对数以2或者$e$为底。有定义可知,熵只依赖于$X$的分布,而与$X$的取值无关,所以可以将$X$的熵记做$H(p)$,即:
egin{align*}
H(X) = -sum_{i=1}^{n} p_i log p_i ag{5.2}
end{align*}
熵越大,随机变量的不确定性越大。从定义可以验证:
egin{align*}
0 leq H(p) leq log n ag{5.3}
end{align*}
至于是怎么验证的,可参考wiki:拉格朗日乘数。这里贴出wiki上面的解题步骤:
设有随机变量$(X,Y)$,其联合概率分布为:
egin{align*}
P(X=x_i,Y=y_i)=p_{ij}, quad i=1,2,cdots,n, quad j=1,2,cdots,m
end{align*}
条件熵$H(Y|X)$表示在已知随机变量X的条件下随机变量$Y$的不确定性:
egin{align*}
H(Y|X) = sum_{i=1}^{n}p_iH(Y|X=x_i) ag{5.5}
end{align*}
当熵和条件熵中的概率有数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别称为经验熵(empirical entropy)和经验条件熵(empirical conditional entropy)。
信息增益(information)表示得知特征X的信息而使得类Y的信息不确定性减少的程度。
定义5.2(信息增益) 特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即:
egin{align*}
g(D,A) = H(D) - H(D|A) ag{5.6}
end{align*}
一般地,熵$H(Y)$与条件熵$H(Y|X)$之差称为互信息(mutual information)。决策树学习中的信息增益等价于训练数据集中类与特征的互信息。
根据信息增益准则的特征选择方法是:对训练数据集(或子集)D,计算每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。
决策树的生成
算法5.2(ID3算法)
输入:训练数据集$D$,特征$A$,阈值$varepsilon$
输出:决策树$T$
(1)若$D$中所有实例属于同一类$C_k$,则$T$为单节点树,并将$C_k$作为该节点的类标记,返回$T$;
(2)若$A = varnothing$,则$T$为单节点树,并将$D$中实例数最大的类$C_k$作为该节点的类标记,返回$T$;
(3)否则,计算$A$中各特征对$D$的信息增益,选择信息增益最大的特征$A_g$;
(4)如果$A_g$的信息增益小于阈值$varepsilon$,则置$T$为单节点树,并将$D$中实例数最大的类$C_k$最为该节点的类标记,返回$T$;
(5)否则,对$A_g$的每一可能值$a_i$,依$A_g = a_i$将$D$分割为若干非空子集$D_i$,将$D_i$中实例数最大的类作为标记,构建子结点,由结点与自子结点构成树$T$,返回$T$;
(6)对第$i$个子结点,以$D_i$为训练集,以$A-{A_g}$为特征集,递归地调用(1)~(5),得到字数$T_i$,返回$T_i$。
决策树的剪枝
决策树额剪枝是为了降低树的负责度,防止过拟合,这与其他机器学习算法增加正则项是类似的。
此时决策树学习的损失函数可以定义为:
egin{align*}
C_{alpha}(T) = C(T) + alphaleft | T
ight | ag{5.14}
end{align*}
其中,$alpha geq 0$为参数;$left | T ight |$为树$T$的叶节点个数,表示模型复杂度。
剪枝,就是当$alpha$确定时,选择损失函数最小的模型,即损失函数最下的子树。当$alpha$值确定时,子树越大,往往与训练数据的拟合越好,
但是模型的复杂度就越高;相反,子树越小,模型的复杂度就越低,但是往往与训练数据的拟合不好。
算法5.4(树的剪枝算法)
输入:生成算法产生的整个树$T$,参数$alpha$;
输出:修剪后的子树$T_{alpha}$。
(1)计算每个节点的经验熵。
(2)递归地从数的叶节点向上回缩。
设一组叶节点回缩到其父节点之前与之后的整体数分别为$T_B$与$T_A$,其对应的损失函数值分别是$C_{alpha}(T_A)$与$C_{alpha}(T_B)$,如果
egin{align*}
C_{alpha}(T_A) leq C_{alpha}(T_B) ag{5.15}
end{align*}
则进行剪枝,即将父节点变为新的节点。
(3)返回(2),直至不能继续为止,得到损失函数最小的子树$T_{alpha}$。
CART算法
分类与回归数(classification and regression tree,CART)模型是应用广泛的决策树学习方法。
CART由决策树生成和决策树剪枝两部组成,与前面介绍的算法类似。
CART剪枝时使用交叉验证确定参数$alpha$,这个地方还没有理解清楚,有时间再回来看看。