博舍

决策树原理实例(python代码实现) 决策树算法原理及案例

决策树原理实例(python代码实现)

决策数(DecisionTree)在机器学习中也是比较常见的一种算法,属于监督学习中的一种。看字面意思应该也比较容易理解,相比其他算法比如支持向量机(SVM)或神经网络,似乎决策树感觉“亲切”许多。

优点:计算复杂度不高,输出结果易于理解,对中间值的缺失值不敏感,可以处理不相关特征数据。缺点:可能会产生过度匹配的问题。使用数据类型:数值型和标称型。

简单介绍完毕,让我们来通过一个例子让决策树“原形毕露”。

一天,老师问了个问题,只根据头发和声音怎么判断一位同学的性别。为了解决这个问题,同学们马上简单的统计了7位同学的相关特征,数据如下:

头发声音性别长粗男短粗男短粗男长细女短细女短粗女长粗女长粗女

机智的同学A想了想,先根据头发判断,若判断不出,再根据声音判断,于是画了一幅图,如下:于是,一个简单、直观的决策树就这么出来了。头发长、声音粗就是男生;头发长、声音细就是女生;头发短、声音粗是男生;头发短、声音细是女生。原来机器学习中决策树就这玩意,这也太简单了吧。。。这时又蹦出个同学B,想先根据声音判断,然后再根据头发来判断,如是大手一挥也画了个决策树:

CART分类树原理及示例

转载:https://blog.csdn.net/acdreamers/article/details/44664481

在之前介绍过决策树的ID3算法实现,今天主要来介绍决策树的另一种实现,即CART算法。

 

Contents

  1.CART算法的认识

  2.CART算法的原理

  3.CART算法的实现

 

1.CART算法的认识

 

   ClassificationAndRegressionTree,即分类回归树算法,简称CART算法,它是决策树的一种实现,通

  常决策树主要有三种实现,分别是ID3算法,CART算法和C4.5算法。

 

   CART算法是一种二分递归分割技术,把当前样本划分为两个子样本,使得生成的每个非叶子结点都有两个分支,

  因此CART算法生成的决策树是结构简洁的二叉树。由于CART算法构成的是一个二叉树,它在每一步的决策时只能

  是“是”或者“否”,即使一个feature有多个取值,也是把数据分为两部分。在CART算法中主要分为两个步骤

 

  (1)将样本递归划分进行建树过程

  (2)用验证数据进行剪枝

 

 

2.CART算法的原理

 

  上面说到了CART算法分为两个过程,其中第一个过程进行递归建立二叉树,那么它是如何进行划分的?

 

   设代表单个样本的个属性,表示所属类别。CART算法通过递归的方式将维的空间划分为不重

  叠的矩形。划分步骤大致如下

 

  (1)选一个自变量,再选取的一个值,把维空间划分为两部分,一部分的所有点都满足,

       另一部分的所有点都满足,对非连续变量来说属性值的取值只有两个,即等于该值或不等于该值。

   (2)递归处理,将上面得到的两部分按步骤(1)重新选取一个属性继续划分,直到把整个维空间都划分完。

 

   在划分时候有一个问题,它是按照什么标准来划分的?对于一个变量属性来说,它的划分点是一对连续变量属

   性值的中点。假设个样本的集合一个属性有个连续的值,那么则会有个分裂点,每个分裂点为相邻

  两个连续值的均值。每个属性的划分按照能减少的杂质的量来进行排序,而杂质的减少量定义为划分前的杂质减

  去划分后的每个节点的杂质量划分所占比率之和。而杂质度量方法常用Gini指标,假设一个样本共有类,那么

  一个节点的Gini不纯度可定义为

 

          

 

   其中表示属于类的概率,当Gini(A)=0时,所有样本属于同类,所有类在节点中以等概率出现时,Gini(A)

  最大化,此时。

 

  有了上述理论基础,实际的递归划分过程是这样的:如果当前节点的所有样本都不属于同一类或者只剩下一个样

   本,那么此节点为非叶子节点,所以会尝试样本的每个属性以及每个属性对应的分裂点,尝试找到杂质变量最大

  的一个划分,该属性划分的子树即为最优分支。

 

 4.示例下面举个简单的例子,如下图

 

   

 

   在上述图中,属性有3个,分别是有房情况,婚姻状况和年收入,其中有房情况和婚姻状况是离散的取值,而年

   收入是连续的取值。拖欠贷款者属于分类的结果。

 

   假设现在来看有房情况这个属性,那么按照它划分后的Gini指数计算如下

 

   

 

   而对于婚姻状况属性来说,它的取值有3种,按照每种属性值分裂后Gini指标计算如下

 

    

 

   最后还有一个取值连续的属性,年收入,它的取值是连续的,那么连续的取值采用分裂点进行分裂。如下

 

    

 

  根据这样的分裂规则CART算法就能完成建树过程。

 

  建树完成后就进行第二步了,即根据验证数据进行剪枝。在CART树的建树过程中,可能存在Overfitting,许多

  分支中反映的是数据中的异常,这样的决策树对分类的准确性不高,那么需要检测并减去这些不可靠的分支。决策

  树常用的剪枝有事前剪枝和事后剪枝,CART算法采用事后剪枝,具体方法为代价复杂性剪枝法。可参考如下链接

 

  剪枝参考:http://www.cnblogs.com/zhangchaoyang/articles/2709922.html

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇