决策树--统计学习方法

基本模型:

决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。其主要优点是模型具有可读性,分类速度快。

决策树由结点和有向边组成。结点分为内部结点和叶结点:内部结点表示一个特征或属性,即图中的圆;叶结点表示一个类,即图中的方框。

步骤:

特征选择、决策树的生成和决策树的修剪。

典型算法:

ID3,C4.5,CART算法

对离散分布、且取值数目>=3的特征的处理:

正是因为CART树是二叉树,所以对于样本的有N>=3个取值的离散特征的处理时也只能有两个分支,这就要通过组合人为的创建二取值序列并取GiniGain最小者作为树分叉决策点。如某特征值具有['young','middle','old']三个取值,那么二分序列会有如下3种可能性(空集和满集在CART分类中没有意义):

[(('young',), ('middle', 'old')), (('middle',), ('young', 'old')), (('old',), ('young', 'middle'))]

采用CART算法,就需要分别计算按照上述List中的二分序列做分叉时的Gini指数,然后选取产生最小的GINIGain的二分序列做该特征的分叉二值序列参与树构建的递归。如果某特征取值有4个,那么二分序列组合就有7种,5个取值就有15种组合,创建多值离散特征二分序列组合可采用Python的itertools包。

对连续特征的处理:

连续属性参考C4.5的离散化过程,区别在于CART算法中要以GiniGain最小作为分界点选取标准。是否需要修正?处理过程为:

先把连续属性转换为离散属性再进行处理。虽然本质上属性的取值是连续的,但对于有限的采样数据它是离散的,如果有N条样本,那么我们有N-1种离散化的方法:<=vj的分到左子树,>vj的分到右子树。计算这N-1种情况下最大的信息增益率。另外,对于连续属性先进行排序(升序),只有在决策属性(即分类发生了变化)发生改变的地方才需要切开,这可以显著减少运算量。

(1) 对特征的取值进行升序排序

(2) 两个特征取值之间的中点作为可能的分裂点,将数据集分成两部分,计算每个可能的分裂点的GiniGain。优化算法就是只计算分类属性发生改变的那些特征取值

(3)选择GiniGain最小的分裂点作为该特征的最佳分裂点(注意,若修正则此处需对最佳分裂点的Gini Gain减去log2(N-1)/|D|(N是连续特征的取值个数,D是训练数据数目)

实现连续特征数据集划分的Python程序为(采用Numpy matrix,连续特征取值就可以省略排序这一步了):

 

训练数据汇总离散特征和连续特征混合存在时的处理:

C4.5和CART算法决策树创建过程中,由于离散特征和连续特征的处理函数不同。当训练数据中两种特征并存时必须能够识别分布类型,从而调用相应的函数。那么有两种方法:

(1)每个特征注明是连续分布还是离散分布,如0表示离散、1表示连续.如此训练、决策时都可以分辨分布类型。

(2)函数中根据特征取值的个数判定,如featureValueCount>10(当然,离散特征取值不可能这么多)则为连续分布,否则为离散分布。此时构建的决策树模型中,必须注明特征的分布类型(如构建一个List,长度为featureCount,其中元素0:离散,1:连续)。

Note:对于取值为是或者否的离散特征,将其按离散或者连续分布处理均可。按照连续分布反而简单,取std=0.5即可简单的实现split。此时分布判断标准更改为featureValueCount>20 or ==2。

(3) 利用独热编码(OneHotEncoding),Python sklearn 的preprocessing提供了OneHotEncoder()能够将离散值转换成连续值处理。独热编码即 One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。对于每一个特征,如果它有m个可能值,那么经过独热编码后,就变成了m个二元特征。并且,这些特征互斥,每次只有一个激活。因此,数据会变成稀疏的。这样做的好处主要有:解决了分类器不好处理属性数据的问题、在一定程度上也起到了扩充特征的作用。

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值