决策树
-
决策树简而言之就是一个二叉树,它按每一个节点的特征分类向下,直到底端给你一个分类结果。
-
那么我们现在就可以考虑分类特征的选择问题,这里我们介绍信息增益这个概念。 首先给出熵与条件熵的定义。 在概率统计中,熵表示随机变量不确定性的度量
P(X=x_i)=p_i,i=1,2,\ldots,n 随机变量
X 的熵定义为H(X)=-\sum_{i=1}^np_ilogp_i 熵越大,不确定性也就越大。(此处规定
0log0=0 ) 设有随机变量P(x,y) ,其联合概率分布为P(X=x_i,Y=y_j)=p_{ij},i=1,2,\ldots,n;j=1,2,\ldots,n 条件熵
H(Y|X) 表示在X 的条件下随机变量Y 的不确定性,条件熵定义如下H(Y|X)=\sum_{i=1}^np_iH(Y|X=x_i) 即
X 给定时Y 的条件概率分布的熵对X 的数学期望 信息增益则表示得知特征X 的信息而使Y 的信息不确定度减少的程度。用函数g(D,A) 来表示特征A 对数据集D 的信息增益,我们定义其为两个熵的差值g(D,A)=H(D)-H(D|A) 我们可以发现
g(D,A) 是会随着数据集的大小二人变化的,无绝对意义。由此,我们引入信息增益g_R(D,A) 比来解决这一问题。g_R(D,A)=g(D,A)/H(D) -
决策树生成算法
-
ID3算法(生成决策树
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 小于阈值(增益太小,没有意义,)则T 为单节点树,并将D 中实例数最大的类C_k 作为该节点的类标记,返回T (5)否则,按
A_g 特征的每一个可能值a_i 划分相应的非空子集D_i ,将D_i 中实例数最大的类作为标记,构建子节点,由节点及子节点构成树T ,返回T (6)对第
i 个子节点,以D_i 为训练集,以A-{A_g} 为特征集,重复(1)~(5),得到子树T_i ,返回T_i -
C4.5算法与ID3类似(将信息增益替换为信息增益比)
-
-
剪枝
显然,上述算法是为了尽力提高对训练数据集的预测准确度的原理而运行,容易构建过于复杂的决策树,这样往往会导致过拟合的现象,对测试数据的分类不一定准确。
因此,我们需要对决策树进行简化,即“剪枝”。
剪枝往往通过极小化决策树整体的损失函数来实现。
设树
T 的叶节点个数为|T| ,t 是树T 的叶节点,该叶节点上有N_t 个样本点,其中k 类的样本点有N_{tk} 个,H_t(T) 为叶节点t 上的经验熵,\alpha\ge0 为参数,则决策树学习的损失函数可以定义为C_\alpha(T)=\sum_{t=1}^{|T|}N_tH_t(T)+\alpha|T| 其中经验熵为
H_t(T)=-\sum_k\dfrac{N_{tk}}{N_t}log\dfrac{N_{tk}}{N_t} 此处将
\sum_{t=1}^{|T|}N_tH_t(T) 记作C(T) 此时有
C_\alpha(T)=C(T)+\alpha|T| 我们来解释一下这个公式,
C(T) 表示的是模型对训练数据的预测误差,T 作为树的大小-1 ,表示了树的复杂度,参数\alpha 控制两者之间的影响。剪枝就是
\alpha 确定时,选择损失函数最小的模型。-
剪枝算法
现在已知树
T ,\alpha ,返回修剪后的树(1)计算每个节点的经验熵
(2)递归地从树的叶节点向上回缩
设一组叶节点回缩到父节点前后的整体树分别为
T_B 与T_A ,如果C_\alpha(T_A)\le C_\alpha(T_B) 则进行剪枝,将父节点作为新的叶节点。
(3)继续(2),直到不能再继续为止,得到目标
T_\alpha
-
-
CART算法
简单来说CART算法是通过不停的二分训练数据集来实现构造一个二叉决策树,当然,它也可以剪枝。它可以生成回归树和分类树。