熵    ⟹    联 合 熵    ⟹    条 件 熵 熵\implies联合熵\implies条件熵 熵⟹联合熵⟹条件熵
n代表X的n种不同的离散取值
$p_i$代表X取值为i的概率
log为以2或者e为底的对数
联合熵
由一个变量X的熵,很容易推广到多个变量的联合熵,这里给出两个变量X和Y的联合熵表达式 H ( X , Y ) H(X,Y) H(X,Y): H ( X , Y ) = − ∑ i = 1 n p ( x i , y i ) l o g p ( x i , y i ) H(X,Y) = -\sum^n_{i=1}p(x_i,y_i)logp(x_i,y_i) H(X,Y)=−i=1∑np(xi,yi)logp(xi,yi)
条件熵
由联合熵,容易推广得到条件熵的表达式 H ( X ∣ Y ) H(X|Y) H(X∣Y),条件熵类似于条件概率,它度量了我们的X在知道Y以后剩下的不确定性。表达式如下: H ( X ∣ Y ) = − ∑ i = 1 n ( x i , y i ) l o g p ( x i ∣ y i ) = ∑ j = 1 n p ( y j ) H ( X ∣ y j ) H(X|Y)=-\sum^n_{i=1}(x_i,y_i)logp(x_i|y_i) = \sum^n_{j=1}p(y_j)H(X|y_j) H(X∣Y)=−i=1∑n(xi,yi)logp(xi∣yi)=j=1∑np(yj)H(X∣yj)
互信息(信息增益)
由条件熵和熵推广得到互信息(信息增益)的表达式: I ( X , Y ) , I(X,Y), I(X,Y),它度量了 X X X在知道 Y Y Y以后不确定性减少程度,这个度量我们在信息论中称为互信息(信息增益),表达式如下:
I ( X , Y ) = H ( X ) − H ( X ∣ Y ) I(X,Y) =H(X)-H(X|Y) I(X,Y)=H(X)−H(X∣Y)
信息增益比
特征 A A A对训练数据集 D D D的信息增益比 g R ( D , A ) g_R(D,A) gR(D,A)定义为其信息增益 I ( D , A ) I(D,A) I(D,A)与训练数据集 D D D关于特征 A A A的值的熵 H A ( D ) H_A(D) HA(D)之比,即 g R ( D , A ) = ( I ( D , A ) H A ( D ) ) g_R(D,A)=(\frac{I(D,A)}{H_A(D)}) gR(D,A)=(HA(D)I(D,A))
H A ( D ) = − ∑ i − i n ∣ D i ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ , n 是 特 征 A 取 值 的 个 数 。 H_A(D)=-\sum^n_{i-i}\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|},n是特征A取值的个数。 HA(D)=−i−i∑n∣D∣∣Di∣log2∣D∣∣Di∣,n是特征A取值的个数。
算法原理
用信息增益大小来判断当前节点应该用什么特征来构建决策树,用计算出的信息增益最大的特征来建立决策树的当前节点。
算法过程
1). 初始化信息增益的阈值 ϵ ϵ ϵ。
2). 判断样本是否为同一类输出 D i Di Di,如果是则返回单节点树 T T T。标记类别为 D i Di Di 。
3). 判断特征是否为空,如果是则返回单节点树 T T T,标记类别为样本中输出类别 D D D实例数最多的类别。
4). 计算 A A A中的各个特征(一共 n n n个)对输出 D D D的信息增益,选择信息增益最大的特征 A g Ag Ag
5). 如果 A g Ag Ag的信息增益小于阈值 ϵ ϵ ϵ,则返回单节点树 T T T,标记类别为样本中输出类别 D D D实例数最多的类别。
6). 否则,按特征 A g Ag Ag的不同取值 A g i Ag_i Agi将对应的样本输出 D D D分成不同的类别 D i Di Di。每个类别产生一个子节点。对应特征值为 A g i Agi Agi。返回增加了节点的数 T T T。
7). 对于所有的子节点,令 D = D i , A = A − A g D=Di,A=A−{Ag} D=Di,A=A−Ag递归调用2-6步,得到子树Ti并返回。
1.需要改进的地方
1).ID3没有考虑连续特征
2).ID3用信息增益作为标准容易偏向于取值较多的特征。
3). ID3算法对于缺失值的情况没有做考虑
4). 没有考虑过拟合的问题
C4.5 对ID3算法的4个问题做了改进
1).ID3没有考虑连续特征
将连续的特征离散化
2).ID3用信息增益作为标准容易偏向于取值较多的特征。
信息增益作为标准容易偏向于取值较多的特征的问题。我们引入一个信息增益比的变量 I R ( X , Y ) I_R(X,Y) IR(X,Y)
3). ID3算法对于缺失值的情况没有做考虑
4). 没有考虑过拟合的问题
C4.5引入了正则化系数进行初步的剪枝
在分类问题中,假设有 K K K个类别,第 k k k个类别的概率为 p k p_k pk, 则基尼系数的表达式为:
G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini(p)=\sum^K_{k=1}p_k(1-p_k)=1-\sum^K_{k=1}p_k^2 Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
对于个给定的样本 D D D,假设有 K K K个类别, 第 k k k个类别的数量为 C k C_k Ck,则样本D的基尼系数表达式为: G i n i ( D ) = 1 − ∑ k = 1 K ( C k D ) 2 Gini(D)=1-\sum^K_{k=1}(\frac{C_k}{D})^2 Gini(D)=1−k=1∑K(DCk)2
对于样本 D D D,如果根据特征 A A A的某个值 a a a,把 D D D分成 D 1 D1 D1和 D 2 D2 D2两部分,则在特征 A A A的条件下, D D D的基尼系数表达式为:
G i n i ( D , A ) = D 1 D G i n i ( D 1 ) + D 2 D G i n i ( D 2 ) Gini(D,A)=\frac{D_1}{D}Gini(D1)+\frac{D_2}{D}Gini(D_2) Gini(D,A)=DD1Gini(D1)+DD2Gini(D2)
CART分类树算法每次仅仅对某个特征的值进行二分,而不是多分,这样CART分类树算法建立起来的是二叉树,而不是多叉树。这样一可以进一步简化基尼系数的计算,二可以建立一个更加优雅的二叉树模型。
将连续特征离散化的思路如下:比如m个样本的连续特征 A A A有m个,从小到大排列为 a 1 , a 2 , . . . , a m a_1,a_2,...,a_m a1,a2,...,am,则CART算法取相邻两样本值的平均数,一共取得 m − 1 m-1 m−1个划分点,其中第i个划分点 T i T_i Ti表示为: T i = a i + a i + 1 2 T_i=\frac{a_i+a_{i+1}}{2} Ti=2ai+ai+1,对于这 m − 1 m-1 m−1个点,分别计算以该点作为二元分类点时的基尼系数。选择基尼系数最小的点作为该连续特征的二元离散分类点。比如取到的基尼系数最小的点为 a t a_t at,则小于 a t a_t at的值为类别1,大于at的值为类别2,这样我们就做到了连续特征的离散化。
.
算法输入:训练集D,基尼系数的阈值,样本个数阈值。
输出:决策树T。
对于生成的决策树做预测的时候,假如测试集里的样本A落到了某个叶子节点,而节点里有多个训练样本。则对于A的类别预测采用的是这个叶子节点里概率最大的类别。
CART回归树和CART分类树的建立和预测的区别主要有下面两点:
1)连续值的处理方法不同
2)决策树建立后做预测的方式不同。
对于回归模型,我们使用了常见的和方差的度量方式,CART回归树的度量目标是,对于任意划分特征 A A A,对应的任意划分点s两边划分成的数据集 D 1 D_1 D1和 D 2 D_2 D2,求出使 D 1 D_1 D1和 D 2 D_2 D2各自集合的均方差最小,同时 D 1 D_1 D1和 D 2 D_2 D2的均方差之和最小所对应的特征和特征值划分点,表达式为:
m i n ⎵ A,s [ m i n ⎵ C 1 ∑ x i ∈ D 1 ( A , s ) ( y i − C 1 ) 2 + m i n ⎵ C 2 ∑ x i ∈ D 2 ( A , s ) ( y i − C 2 ) 2 ] \underbrace{min}_{\text{A,s}}[\underbrace{min}_{C_1}\sum_{x_i\in{D_1} (A,s)}(y_i-C_1)^2+\underbrace{min}_{C_2}\sum_{x_i\in{D_2} (A,s)}(y_i-C_2)^2] A,s min[C1 minxi∈D1(A,s)∑(yi−C1)2+C2 minxi∈D2(A,s)∑(yi−C2)2]
C 1 C_1 C1为 D 1 D_1 D1数据集的样本输出均值, C 2 C_2 C2为 D 2 D_2 D2数据集的样本输出均值。
对于决策树建立后做预测的方式,上面讲到了CART分类树采用叶子节点里概率最大的类别作为当前节点的预测类别。而回归树输出不是类别,它采用的是用最终叶子的均值或者中位数来预测输出结果。
为了来增加决策树的泛化能力,我们需要对决策树进行剪枝,即类似于线性回归的正则化,剪枝分为预剪枝与后剪枝
预剪枝就是在完全正确分类训练集之前,较早地停止树的生长。 具体在什么时候停止决策树的生长有多种不同的方法:
优点&缺点
后剪枝法:即先生成决策树,然后产生所有可能的剪枝后的CART树,然后使用交叉验证来检验各种剪枝的效果,选择泛化能力最好的剪枝策略。
这里主要介绍四种:
1、REP-错误率降低剪枝
2、PEP-悲观剪枝
3、CCP-代价复杂度剪枝
4、MEP-最小错误剪枝
对于决策树T 的每棵非叶子树S , 用叶子替代这棵子树. 如果 S 被叶子替代后形成的新树关于D 的误差等于或小于S 关于 D 所产生的误差, 则用叶子替代子树S
优点:
缺点:
为了克服 R EP 方法需要独立剪枝数据集的缺点而提出的, 它不需要分离的剪枝数据集,为了提高对未来事例的预测可靠性, PEP 方法对误差估计增加了连续性校正(continuity correction)。
优点:
缺点:
MEP 方法的基本思路是采用自底向上的方式, 对于树中每个非叶节点, 首先计算该节点的误差 Er(t) . 然后, 计算该节点每个分枝的误差Er(Tt) , 并且加权相加, 权为每个分枝拥有的训练样本比例. 如果 Er(t) 大于 Er(Tt) , 则保留该子树; 否则, 剪裁它.
优点:
缺点:
缺点:
生成子树序列 T i T_i Ti所需要的时间和原决策树非叶节点的关系是二次的, 这就意味着如果非叶节点的数目随着训练例子记录数目线性增加, 则CCP方法的运行时间和训练数据记录数的关系也是二次的 . 这就比本文中将要介绍的其它剪枝方法所需要的时间长得多, 因为其它剪枝方法的运行时间和非叶节点的关系是线性的.