热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

决策树算法整理

决策树(decisiontree)是一种常见的分类和回归算法,也是性能较好的提升树算法(boostingtree)的基本分类器。在分类问题中,决策树模型是以树的结构,基于特征来对样本进行分类决

决策树(decision tree)是一种常见的分类和回归算法,也是性能较好的提升树算法(boosting tree)的基本分类器。

在分类问题中,决策树模型是以树的结构,基于特征来对样本进行分类决策的,其内部结点表示一个特征,叶结点表示一个类别。它可以看作是if-then 规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。

决策树的损失函数为正则化的极大似然函数,学习策略是以损失函数为目标函数的最小化。其学习过程通常分为三个步骤:特征选择、决策树的生成和决策树的修剪。

决策树学习的算法通常是递归地选择最优特征,不断对数据集进行分割,构建决策树。主要的算法有ID3、C4.5和CART算法。

本文从四个方面整理和决策树模型有关的知识:

1、熵、信息增益和基尼指数

2、ID3算法和C4.5算法

3、决策树剪枝

4、CART算法之回归树与分类树

 

一、熵、信息增益和基尼指数

在决策树模型中,信息增益、信息增益比和基尼指数是特征选择的指标,分别用于ID3、C4.5和CART算法的特征选择问题。下面从熵的概念开始,一步步理解这三个重要的概念。

1、熵与条件熵

(1)熵的概念

熵(entropy)这个概念来自于信息论,是对随机变量不确定性的度量。考虑一个取有限个值的离散随机变量X,其概率分布为p(X=xi) =pi。首先怎么度量看到X取某个具体值xi的信息呢?信息依赖于概率分布p(X),低概率事件有更高的信息量,于是信息定义为:h(X)=-logp(X)(一般以2为底)。那么熵可以看做是随机变量X的平均信息量:

熵只依赖于X的概率分布,而与X的取值无关,故X的熵也记作H(p)。熵越大,随机变量的不确定性就越大,信息量也越大。特别的,当pi=0时,定义pi×logp=0。

(2)条件熵的概念

设有随机变量(X,Y),其联合概率分布为:

那么条件熵H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性,定义为在X给定的条件下,Y的条件概率分布的熵对X的数学期望:

在现实中,我们只能通过统计数据来估计熵和条件熵中的概率,进而得到熵和条件熵的估计值,相应的估计值称为经验熵和经验条件熵。

 2、信息增益

有了经验熵和经验条件熵的定义,那么信息增益(information gain)就定义为二者之差,表示在训练集中得知特征X的信息而使得类Y的不确定性减少的程度,也称为特征与类之间的互信息。信息增益的定义为:特征A对训练集D的信息增益g(D, A),是集合D的经验熵H(D)和特征A给定条件下D的经验条件熵H(D|A)之差,即

在特征A给定的条件下对数据集D进行分类时,信息增益表示由于特征A而使得对数据集D的分类的不确定性减少的程度。不同的特征往往具有不同的信息增益,而信息增益大的特征具有更强的分类能力。在实际运用时,逐一计算每个特征对数据集D的信息增益,然后选择信息增益最大的特征进行分类。ID3算法便是根据信息增益准则来选择特征的。

3、信息增益的计算方法

设训练集为D,|D|表示其样本容量。设有K个类Ck ,|Ck|为类Ck的样本个数。设特征A有n个不同的取值a,将D划分为n个子集Di ,|Di|为该子集的样本个数。子集Di中属于类 Ck  的样本集合为 Dik ,|Dik|为Dik的样本个数。那么信息增益的计算方法为:

(1)计算数据集D的经验熵H(D):

(2)计算特征A对数据集D的经验条件熵H(D|A):

3)计算信息增益:

g(D,A) = H(D) - H(D|A)

4、信息增益比

信息增益准则偏向取值较多的特征,当特征的取值较多时,该特征的信息增益往往比较大。极端的情况就是以编号作为特征,每个特征值都对应一个样本,此时信息增益是最大的,但是不具备泛化能力。

因此使用信息增益比来校正这一问题,信息增益比 = 信息增益 * 惩罚参数,惩罚参数大时,特征的属性值较少。C4.5算法就是根据信息增益比来选择特征的。

以训练数据集D的经验熵H(D)的倒数作为惩罚参数,则信息增益比gR(D,A)为:

而信息增益比准则又倾向于取值较少的特征,因此C4.5并不是直接选择信息增益比最大的特征,而是在候选特征中找出信息增益高于平均水平的特征,然后在这些特征中再选择信息增益比最高的特征。   

5、基尼指数

(1)基尼指数(Gini index)的定义

基尼指数表示在样本集合中一个随机选中的样本被分错的概率,基尼指数越大,则表示集合中被选中的样本被分错的概率越大。基尼指数 = 样本被选中的概率 × 样本被分错的概率。

在分类问题中,假设样本集合D中有K个类,样本点属于第k类的概率为pk,则该概率分布的基尼指数就是:

特殊的,在二分类问题中,基尼指数为:Gini(p) = 2p(1-p)。

而给定样本集合D,|Ck|为第k类样本子集Ck的样本数,样本点属于第k类的概率pk=(|Ck| / |D|),所以基尼指数为:

(2)CART中的基尼指数

CART是个二叉树,也就是使用某个特征将样本划分为两个集合:1. 等于给定的特征值的样本集合D1 ; 2. 不等于给定的特征值的样本集合D2。实际上是对拥有多个取值的特征的二值处理。

在CART算法中,样本集合D根据特征A是否取某一可能的值a被分割为D1和D2两个部分,即:

那么在特征A的条件下,集合D的基尼指数定义为:

基尼指数Gini(D)表示集合D的不确定性,而基尼指数Gini(D,A)表示经过A=a分割后集合D的不确定性。基尼指数越大,样本集合的不确定性越大。

因此运用基尼指数进行特征选择时,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。

 

二、ID3算法和C4.5算法

1、ID3算法的核心是在决策树各结点上应用信息增益准则选择特征,递归地构建决策树。

2、决策树的ID3生成算法:

(1)从根节点开始,计算所有特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同属性值建立子结点;

(2)对子节点递归地调用以上方法,构建决策树;

(3)直到所有特征的信息增益非常小或者没有特征可以选择为止。

3、递归返回的条件:

(1)数据集中所有实例都属于同一类了;

(2)当前的特征集为空集;

(3)特征的信息增益小于阈值。

4、由于ID3算法只有树的生成,没有树的剪枝,所以容易产生过拟合。

5、C4.5算法的分类决策过程与ID3算法类似,不同在于用信息增益比来选择特征。

 

三、决策树的剪枝

1、为什么要剪枝

决策树的剪枝是指将生成的树进行简化的过程,把已生成的树裁掉一些子树或叶结点,并将其根结点或父节点作为新的叶结点。

对决策树进行剪枝是为了解决过拟合问题。因为决策树生成算法递归产生决策树,在学习时过多考虑如何提高对训练数据的正确分类,从而构建出了过于复杂的决策树,因此要考虑决策树的复杂度,对模型进行简化。

2、怎样剪枝

(1)决策树的整体损失函数

决策树的剪枝往往通过极小化决策树整体的损失函数来实现。设树T的叶结点个数为|T|,t是树T的叶结点,该叶结点有Nt个样本点,其中k类样本点的个数为Ntk,Ht(T)是叶结点t上的经验熵,α≥0是惩罚参数,则决策树的整体损失函数为:

其中经验熵Ht(T)为:

令损失函数中的第一项为C(T):

于是损失函数整理为:

C(T)表示模型与训练数据的拟合程度,|T|表示模型的复杂度,参数α权衡二者的重要性。较大的α使得模型倾向于选择简单的树,α=0意味着只考虑模型对训练数据的拟合程度,不考虑模型复杂度。

可见决策树生成学习的是局部模型,而决策树剪枝学习的是整体模型。

(2)如何判断是否需要剪枝

剪枝算法就是让考虑了模型复杂度的损失函数极小化,等价于用正则化的极大似然估计进行模型选择。

在剪枝操作中,设一组叶结点回缩到父结点之前与之后的整体树分别为TB和TA,其对应的损失函数值分别为Cα(TB)和Cα(TA),如果Cα(TB) ≥ Cα(TA),则进行剪枝,将父结点变成新的叶结点。递归地进行操作,直至得到损失函数最小的子树。

 

四、CART算法

CART(classification and regression tree)模型,叫做分类与回归树,既可以用于分类也可以用于回归。它假设决策树是二叉树,每个内部结点特征的取值只取“是”和“否”,左分支取值为“是”,右分支取值为“否”。这样的决策树递归地二分每个特征,在给定输入随机变量X的条件下输出随机变量Y的条件概率分布。

CART算法也是由特征选择、决策树生成和决策树剪枝三个步骤组成。

对回归树用平方误差最小化准则,对分类树用基尼指数最小化准则,进行特征选择,生成二叉树。

1、回归树的生成

假设X与Y分别为输入和输出变量,并且Y是连续变量,训练数据集为D={(x1,y1), (x2,y2), ..., (xn,yn)}。已将输入空间划分为M个单元R1,R2,...,RM,并且在每个单元Rm上有一个固定的输出值cm

I(•)表示指示函数。则回归树模型表示为:

用平方误差来表示回归树在单元Rm上对训练数据的预测误差,用平方误差最小的准则来求解每个单元上的最优输出,那么由最小二乘法可知,单元Rm上的输出的cm的最优值是Rm上所有输入实例xi对应的输出yi的均值,即:

于是具体步骤如下:

第一步:选择第j个变量x(j)和它取的值s,作为切分变量和切分点,将输入空间分为两个区域:

第二步:求解下式得到最优切分变量j和最优切分点s:

第三步:用选定的最优对(j, s)划分区域并决定输出值:

第四步:对每个区域重复上述划分过程,直到满足停止条件。于是将输入空间划分为了M个区域R1, R2, ..., RM,生成决策树:

 2、分类树的生成

分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。

具体步骤如下:

第一步:样本集合D根据每一个特征A,对其可能的取值a,根据A=a是否成立,被分割为D1和D2两个部分,

然后计算在特征A条件下,集合D的基尼指数:

第二步:对所有可能的特征A及它们所有可能的切分点a,选择基尼指数最小的特征及其切分点作为最优特征与最优切分点。依最优特征和最优切分点,从现结点生成两个子结点,并分配训练数据集。

第三步:对两个子结点递归地调用第一步和第二步,直至满足停止条件,生成决策树。停止条件包括:特征集合为空,样本集的基尼指数小于预定阈值,结点的样本个数小于预定阈值。

 

CART的剪枝:略。

 

 五、其他

在《机器学习之十一问支持向量机(SVM)》中,提到了支持向量机无法处理缺失值的问题,而决策树可以。本来打算整理一下这个问题,结果发现真正要理解和说清楚,得手动计算缺失值的处理过程,篇幅太长。这个问题已经有博客整理得比较清楚了,就多看看博客喽。

 

 

 

参考资料:

1、李航:《统计学习方法》

2、周志华:《机器学习》

3、决策树--信息增益,信息增益比,Geni指数的理解:https://www.cnblogs.com/muzixi/p/6566803.html

4、决策树缺失值的处理:https://blog.csdn.net/u012328159/article/details/79413610

推荐阅读
  • 【转】强大的矩阵奇异值分解(SVD)及其应用
    在工程实践中,经常要对大矩阵进行计算,除了使用分布式处理方法以外,就是通过理论方法,对矩阵降维。一下文章,我在 ... [详细]
  • 对于初学者而言,搭建一个高效稳定的 Python 开发环境是入门的关键一步。本文将详细介绍如何利用 Anaconda 和 Jupyter Notebook 来构建一个既易于管理又功能强大的开发环境。 ... [详细]
  • 自然语言处理(NLP)——LDA模型:对电商购物评论进行情感分析
    目录一、2020数学建模美赛C题简介需求评价内容提供数据二、解题思路三、LDA简介四、代码实现1.数据预处理1.1剔除无用信息1.1.1剔除掉不需要的列1.1.2找出无效评论并剔除 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 使用TabActivity实现Android顶部选项卡功能
    本文介绍如何通过继承TabActivity来创建Android应用中的顶部选项卡。通过简单的步骤,您可以轻松地添加多个选项卡,并实现基本的界面切换功能。 ... [详细]
  • 本周三大青年学术分享会即将开启
    由雷锋网旗下的AI研习社主办,旨在促进AI领域的知识共享和技术交流。通过邀请来自学术界和工业界的专家进行在线分享,活动致力于搭建一个连接理论与实践的平台。 ... [详细]
  • 洛谷 P4009 汽车加油行驶问题 解析
    探讨了经典算法题目——汽车加油行驶问题,通过网络流和费用流的视角,深入解析了该问题的解决方案。本文将详细阐述如何利用最短路径算法解决这一问题,并提供详细的代码实现。 ... [详细]
  • AI炼金术:KNN分类器的构建与应用
    本文介绍了如何使用Python及其相关库(如NumPy、scikit-learn和matplotlib)构建KNN分类器模型。通过详细的数据准备、模型训练及新样本预测的过程,展示KNN算法的实际操作步骤。 ... [详细]
  • 龙蜥社区开发者访谈:技术生涯的三次蜕变 | 第3期
    龙蜥社区的开发者们通过自己的实践和经验,推动着开源技术的发展。本期「龙蜥开发者说」聚焦于一位资深开发者的三次技术转型,分享他在龙蜥社区的成长故事。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 在OpenCV 3.1.0中实现SIFT与SURF特征检测
    本文介绍如何在OpenCV 3.1.0版本中通过Python 2.7环境使用SIFT和SURF算法进行图像特征点检测。由于这些高级功能在OpenCV 3.0.0及更高版本中被移至额外的contrib模块,因此需要特别处理才能正常使用。 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • 深入解析WebP图片格式及其应用
    随着互联网技术的发展,无论是PC端还是移动端,图片数据流量占据了很大比重。尤其在高分辨率屏幕普及的背景下,如何在保证图片质量的同时减少文件大小,成为了亟待解决的问题。本文将详细介绍Google推出的WebP图片格式,探讨其在实际项目中的应用及优化策略。 ... [详细]
  • 深入解析层次聚类算法
    本文详细介绍了层次聚类算法的基本原理,包括其通过构建层次结构来分类样本的特点,以及自底向上(凝聚)和自顶向下(分裂)两种主要的聚类策略。文章还探讨了不同距离度量方法对聚类效果的影响,并提供了具体的参数设置指导。 ... [详细]
  • c语言二元插值,二维线性插值c语言
    c语言二元插值,二维线性插值c语言 ... [详细]
author-avatar
fuckyourgirlfriend
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有