机器学习【1】决策树Decision Tree

1 决策树原理

决策树是通过一系列规则对数据进行分类的过程。它提供一种在什么条件下会得到什么值的类似规则的方法。决策树是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果。
  
近来的调查表明决策树也是最经常使用的数据挖掘算法,它的概念非常简单。决策树算法之所以如此流行,一个很重要的原因就是使用者基本上不用了解机器学习算法,也不用深究它是如何工作的。直观看上去,决策树分类器就像判断模块和终止块组成的流程图,终止块表示分类结果(也就是树的叶子)。判断模块表示对一个特征取值的判断(该特征有几个值,判断模块就有几个分支)。

如果不考虑效率等,那么样本所有特征的判断级联起来终会将某一个样本分到一个类终止块上。实际上,样本所有特征中有一些特征在分类时起到决定性作用,决策树的构造过程就是找到这些具有决定性作用的特征,根据其决定性程度来构造一个倒立的树–决定性作用最大的那个特征作为根节点,然后递归找到各分支下子数据集中次大的决定性特征,直至子数据集中所有数据都属于同一类。所以,构造决策树的过程本质上就是根据数据特征将数据集分类的递归过程,我们需要解决的第一个问题就是,当前数据集上哪个特征在划分数据分类时起决定性作用。

1.1决策树的分类

决策树分为分类树回归树两种,分类树对离散变量做决策树,回归树对连续变量做决策树。

1.2 构造树的基本想法

构造树的基本想法是,随着树深度的增加,节点的熵迅速地降低,熵降低的速度越快越好,这样我们有望得到一颗高度最矮的决策树。

2 决策树的学习过程

一棵决策树的生成过程主要分为以下3个部分:

特征选择:特征选择是指从训练数据中众多的特征中选择一个特征作为当前节点的分裂标准,如何选择特征有着很多不同量化评估标准标准,从而衍生出不同的决策树算法。

决策树生成: 根据选择的特征评估标准,从上至下递归地生成子节点,直到数据集不可分则停止决策树停止生长。 树结构来说,递归结构是最容易理解的方式。

剪枝:决策树容易过拟合,一般来需要剪枝,缩小树结构规模、缓解过拟合。剪枝技术有预剪枝和后剪枝两种。
案例:

3 决策树优缺点

决策树适用于数值型和标称型(离散型数据,变量的结果只在有限目标集中取值),能够读取数据集合,提取一些列数据中蕴含的规则。在分类问题中使用决策树模型有很多的优点,决策树计算复杂度不高便于使用而且高效,决策树可处理具有不相关特征的数据、可很容易地构造出易于理解的规则,而规则通常易于解释和理解。决策树模型也有一些缺点,比如处理缺失数据时的困难过度拟合以及忽略数据集中属性之间的相关性等。

图 1. 决策树案例图
在这里插入图片描述

图 1 是一棵结构简单的决策树,用于预测贷款用户是否具有偿还贷款的能力。贷款用户主要具备三个属性:是否拥有房产,是否结婚,平均月收入。每一个内部节点都表示一个属性条件判断,叶子节点表示贷款用户是否具有偿还能力。例如:用户甲没有房产,没有结婚,月收入 5K。通过决策树的根节点判断,用户甲符合右边分支 (拥有房产为“否”);再判断是否结婚,用户甲符合左边分支 (是否结婚为否);然后判断月收入是否大于 4k,用户甲符合左边分支 (月收入大于 4K),该用户落在“可以偿还”的叶子节点上。所以预测用户甲具备偿还贷款能力。

随着开源社区的活跃和技术的发展,越来越多的算法和框架被创造出来简化数据挖掘和分析的工作,你要建立一个模型,并进行算法分析,只要把数据丢进模型就行,而成功的关键更取决于数据的采集和处理方面,你能收集到怎么样的数据,或者你打算用哪些数据丢进模型里面,决定着这个模型的准确度。

4 决策树的生成算法(ID3, C4.5和C5.0)

给出如下的一组数据,一共有十个样本(学生数量),每个样本有分数,出勤率,回答问题次数,作业提交率四个属性,最后判断这些学生是否是好学生。最后一列给出了人工分类结果。
在这里插入图片描述

然后用这一组附带分类结果的样本可以训练出多种多样的决策树,这里为了简化过程,我们假设决策树为二叉树,且类似于下图:

在这里插入图片描述

通过学习上表的数据,可以设置A,B,C,D,E的具体值,而A,B,C,D,E则称为阈值。当然也可以有和上图完全不同的树形,比如下图这种的:
在这里插入图片描述

所以决策树的生成主要分以下两步,这两步通常通过学习已经知道分类结果的样本来实现。

  1. 节点的分裂:一般当一个节点所代表的属性无法给出判断时,则选择将这一节点分成2个子节点(如不是二叉树的情况会分成n个子节点)

  2. 阈值的确定:选择适当的阈值使得分类错误率最小 (Training Error)。

4.1 ID3

ID3: 由增熵(Entropy)原理来决定那个做父节点,那个节点需要分裂。对于一组数据,熵越小说明分类结果越好。熵定义如下:

Entropy=- sum [p(x_i) * log2(P(x_i) ]

其中p(x_i) 为x_i出现的概率。假如是2分类问题,当A类和B类各占50%的时候,

Entropy = - (0.5log_2( 0.5)+0.5log_2( 0.5))= 1

当只有A类,或只有B类的时候,

Entropy= - (1*log_2( 1)+0)=0

所以当Entropy最大为1的时候,是分类效果最差的状态,当它最小为0的时候,是完全分类的状态。因为熵等于零是理想状态,一般实际情况下,熵介于0和1之间。

熵的不断最小化,实际上就是提高分类正确率的过程。

比如上表中的4个属性:单一地通过以下语句分类:

  1. 分数小于70为【不是好学生】:分错1个

  2. 出勤率大于70为【好学生】:分错3个

  3. 问题回答次数大于9为【好学生】:分错2个

  4. 作业提交率大于80%为【好学生】:分错2个

最后发现 分数小于70为【不是好学生】这条分错最少,也就是熵最小,所以应该选择这条为父节点进行树的生成,当然分数也可以选择大于71,大于72等等,出勤率也可以选择小于60,65等等,总之会有很多类似上述1~4的条件,最后选择分类错最少即熵最小的那个条件。而当分裂父节点时道理也一样,分裂有很多选择,针对每一个选择,与分裂前的分类错误率比较,留下那个提高最大的选择,即熵减最大的选择。

4.2 C4.5

C4.5:通过对ID3的学习,可以知道ID3存在一个问题,那就是越细小的分割分类错误率越小,所以ID3会越分越细,比如以第一个属性为例:设阈值小于70可将样本分为2组,但是分错了1个。如果设阈值小于70,再加上阈值等于95,那么分错率降到了0,但是这种分割显然只对训练数据有用,对于新的数据没有意义,这就是所说的过度学习(Overfitting)。

分割太细了,训练数据的分类可以达到0错误率,但是因为新的数据和训练数据不同,所以面对新的数据分错率反倒上升了。决策树是通过分析训练数据,得到数据的统计信息,而不是专为训练数据量身定做。

就比如给男人做衣服,叫来10个人做参考,做出一件10个人都能穿的衣服,然后叫来另外5个和前面10个人身高差不多的,这件衣服也能穿。但是当你为10个人每人做一件正好合身的衣服,那么这10件衣服除了那个量身定做的人,别人都穿不了。

所以为了避免分割太细,c4.5对ID3进行了改进,C4.5中,优化项要除以分割太细的代价,这个比值叫做信息增益率,显然分割太细分母增加,信息增益率会降低。除此之外,其他的原理和ID3相同。

4.3 CART

CART是一个二叉树,也是回归树,同时也是分类树,CART的构成简单明了。

CART只能将一个父节点分为2个子节点。CART用GINI指数来决定如何分裂:

GINI指数:总体内包含的类别越杂乱,GINI指数就越大(跟熵的概念很相似)。

a. 比如出勤率大于70%这个条件将训练数据分成两组:大于70%里面有两类:【好学生】和【不是好学生】,而小于等于70%里也有两类:【好学生】和【不是好学生】。

b. 如果用分数小于70分来分:则小于70分只有【不是好学生】一类,而大于等于70分有【好学生】和【不是好学生】两类。

比较a和b,发现b的凌乱程度比a要小,即GINI指数b比a小,所以选择b的方案。以此为例,将所有条件列出来,选择GINI指数最小的方案,这个和熵的概念很类似。

CART还是一个回归树,回归解析用来决定分布是否终止。理想地说每一个叶节点里都只有一个类别时分类应该停止,但是很多数据并不容易完全划分,或者完全划分需要很多次分裂,必然造成很长的运行时间,所以CART可以对每个叶节点里的数据分析其均值方差,当方差小于一定值可以终止分裂,以换取计算成本的降低。

CART和ID3一样,存在偏向细小分割,即过度学习(过度拟合的问题),为了解决这一问题,对特别长的树进行剪枝处理,直接剪掉。

以上的决策树训练的时候,一般会采取Cross-Validation法:比如一共有10组数据:

第一次. 1到9做训练数据, 10做测试数据

第二次. 2到10做训练数据,1做测试数据

第三次. 1,3到10做训练数据,2做测试数据,以此类推

做10次,然后大平均错误率。这样称为 10 folds Cross-Validation。

比如 3 folds Cross-Validation 指的是数据分3份,2份做训练,1份做测试。

4.4 区别

  • C4.5是基于ID3优化后产出的算法,主要优化了关于节点分支的计算方式,优化后解决了ID3分支过程中总喜欢偏向取值较多的属性。

  • ID3信息增益值分支、C4.5是信息增益率分支,而CART一般是GINI系数分支:

  • CART可以回归分析也可以分类,CART是无数个二叉子节点;

  • ID3、C4.5只能做分类;C4.5子节点是可以多分的

  • ID3只能对分类变量进行处理,C4.5和CART可以处理连续和分类两种自变量

  • ID3对缺失值敏感,而C4.5和CART对缺失值可以进行多种方式的处理

只从样本量考虑,小样本建议考虑c4.5、大样本建议考虑cart。c4.5处理过程中需对数据集进行多次排序,处理成本耗时较高,而cart本身是一种大样本的统计方法,小样本处理下泛化误差较大

  • 特征变量的使用中,多分的分类变量ID3和C4.5层级之间只单次使用,CART可多次重复使用

  • C4.5是通过枝剪来修正树的准确性,而CART是直接利用全部数据发现所有树的结构进行对比

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值