问题描述
假设我们有一组训练数据 D={
(x1,y1),⋯,(xN,yN)} D = { ( x 1 , y 1 ) , ⋯ , ( x N , y N ) } ,这组训练数据代表 N N 个样本,
是样本点 i i 的特征向量,
是样本点 i i 的类别,样本共分为
类的情况下, yi y i 的取值来自于 K K 个类别值
,训练数据的特征集合为 A=A1,⋯,AM A = A 1 , ⋯ , A M ,样本在某个特征 Am A m 处可能取到的特征值有 n n 个,分别为
。
决策树是一种由结点和有向边构成的树形结构,结点类型分为内部结点和叶结点,每个内部结点代表对象的一个特征,叶结点则代表对象的类别。下图是一个简单的决策树,它通过输入对象的特征自上而下进行判断,并输出对象的类别(通过对象是否常熬夜,是否常运动判断其分类是健康或亚健康)。在下图中,椭圆框代表内部结点,长方形框代表叶结点。
对于一个未知类别的输入对象,决策树自上而下的测试该对象在每个内部结点的特征取值,从而将其分配到相应的子结点或叶结点,当对象被分配到某个叶结点时,便可确定其类别。
ID3
ID3算法的基本流程为:如果某一个特征能比其他特征更好的将训练数据集进行区分,那么将这个特征放在初始结点,依此类推,初始特征确定之后,对于初始特征每个可能的取值建立一个子结点,选择每个子结点所对应的特征,若某个子结点包含的所有样本属于同一类或所有特征对其包含的训练数据的区分能力均小于给定阈值,则该子结点为一个叶结点,其类别与该叶结点的训练数据类别最多的一致。重复上述过程直到特征用完或者所有特征的区分能力均小于给定阈值。
如何衡量某个特征对训练数据集的区分能力呢,ID3算法通过信息增益来解决这个问题。
信息增益
一个离散型随机变量 x x 的概率分布为:
,那么 x x 的熵定义如下:
熵的单位为比特(bit),定义 0log0=0 0 l o g 0 = 0 。对于两个随机变量 x,y x , y ,他们有如下形式的联合概率分布:
那么在 x x 确定的条件下 的条件熵定义如下:
数据集的熵表征着其类别的不确定程度,而数据集关于某个特征的条件熵则表征着给定某个特征后,其类别的不确定程度。可以想见,数据集的熵与其关于某个特征的条件熵之差表征着这个特征的确定使数据集不确定性减少的程度,数据集的熵与条件熵的差值叫做信息增益,很容易理解,某个特征的信息增益可以反映这个特征对数据集的分类能力,信息增益越大,证明该特征能更好的对数据集进行分类。
信息增益:数据集 D D 的熵为 ,其关于其某个特征 Am A m 的条件熵为 H(D|Am) H ( D | A m ) ,则信息增益为 g(D,Am) g ( D , A m ) , g(D,Am)=H(D)−H(D|Am) g ( D , A m ) = H ( D ) − H ( D | A m ) 。
对于训练样本集来说,其概率是由数据估计得到的,因此其熵与条件熵分别称为经验熵和经验条件熵。经验熵和经验条件熵的计算方式如下:
其中