代码及数据集下载:Tree
决策树可以用来进行分类或者回归,学习可以分为三个部分:特征选择、决策树的生成、决策树的修剪。
决策树模型
内部节点表示一个特征或者属性,叶子结点表示一个类。决策树工作时,从根节点开始,对实例的每个特征进行测试,根据测试结果,将实例分配到其子节点中,这时的每一个子节点对应着特征的一个取值,如此递归的对实例进行测试并分配,直到达到叶节点,最后将实例分配到叶节点所对应的类中。
决策树具有一个重要的性质:互斥并且完备。每一个实例都被一条路径或一条规则所覆盖,而且只被一条路径或一条规则所覆盖,这里所谓覆盖是指实例的特征与路径上的特征一致或实例满足规则的条件。
决策树与条件概率分布
决策树将特种空间划分为互不相交的单元或区域,在每个单元上定义了一个类的概率分布,则构成了条件概率分布。分类时,将该节点的实例强行分到条件概率大的那一类中。
决策树学习就是由训练数据集估计条件概率模型的过程。一个数据集可能对应不想矛盾的多个决策树,通常选择使损失函数最小的决策树。通常现实中决策树学习算法采用启发式方法,近似求解这一优化问题,这样得到的决策树是次优的。
学习算法通常是递归的选择最优特征。首先开始构建根节点,然后将所有训练数据放到根节点中,选择一个最优特征,按照这一特征对数据集分割成子集,使得各个子集有一个在当前条件下最好的分类,如果这个子集已经能够被基本正确分类,则构建叶节点,如果还有子集不能正确分类,则对这些子集选择新的最优特征,继续对其分割构建新的节点。
但是这样的方法可能能够对训练数据具有好的分类能力,但是不具有好的泛化能力,容易出现过拟合,因此我们需要对树进行减枝,让树变得简单,复杂度降低,使其具有很好的泛化能力,方法为去掉过于细分的叶节点,使其退回到父节点,甚至更高的节点,将父节点或更高节点改为新的叶节点。如果特征数量很多,也可以在开始时对特征进行选择,只留下对训练数据具有足够分类能力的特征。
决策树的生成对应于模型的局部选择,决策树的减枝对应于模型的全局选择。决策树的生成只考虑局部最优,决策树的减枝则考虑全局最优。
信息增益
信息增益是用来选择最优划分特征的指标。首先给出熵的概念。
在信息论与概率统计中,熵是表示随机变量不确定性的度量。X为取值有限的离散随机变量。概率分布为
则X的熵为
若 pi=0 则 0log0=0 。对数以2为底定义单位为比特(bit),以e为底定义单位为纳特(nat),熵只依赖于X的分布,不依赖于X的取值。熵越大,信息的不确定性越大。
条件熵
如果概率由数据估计得到,所对应的熵称为经验熵。
信息增益:得知特征X的信息而使得类Y的信息的不确定性减少的程度。特征A对训练数据集D的信息增益g(D,A),定义为
一般熵H(Y)与条件熵H(Y|X)之差称为互信息。信息增益大的特征具有更强的分类能力。
特征选择的方法为:队训练数据集D,计算其每个特征的信息增益,并比较他们的大小,选择信息增益最大的特征。
信息增益比
信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题,用信息增益比可以很好的解决。
信息增益比:特征A对训练数据集D的信息增益比 gR(D,A) 定义为其信息增益与训练数据集D关于特征A的值的熵 HA(D) 之比
其中, HA(D)=−∑i=1n|Di||D|log2|Di||D| ,n为特征A取值的个数。
ID3算法
ID3算法的核心是在决策树各个节点上应用信息增益准则选择特征,递归的构建决策树。
输入:数据集D,特征集A,阈值 σ
输出:决策树T
(1).若D中的所有实例均属于同一类 Ck ,则T为单节点树,并将类 Ck 作为该节点的类标记,返回T。
(2).若 A=∅ ,则T为单节点树,选择对多的特征作为该节点的类标记,返回T。
(3).计算A中各个特征对D的信息增益,选择信息增益最大的特征