`
kavy
  • 浏览: 896620 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

决策树详解(转)

 
阅读更多

定义

决策树是一种常见的机器学习算法,它的思想十分朴素,类似于我们平时利用选择做决策的过程。

 

例如有人给我们介绍新的对象的时候,我们就要一个个特点去判断,于是这种判断的过程就可以画成一棵树,例如根据特点依次判断: 

 

 

如上,决策的形式以树的形式进行示意和编码,就形成了决策树。

 

结构

显然,决策树在逻辑上以树的形式存在,包含根节点、内部结点和叶节点。 

- 根节点:包含数据集中的所有数据的集合 

- 内部节点:每个内部节点为一个判断条件,并且包含数据集中满足从根节点到该节点所有条件的数据的集合。根据内部结点的判断条件测试结果,内部节点对应的数据的集合别分到两个或多个子节点中。 

- 叶节点:叶节点为最终的类别,被包含在该叶节点的数据属于该类别。

 

简而言之,决策树是一个利用树的模型进行决策的多分类模型,简单有效,易于理解。

 

伪代码

决策树算法的伪代码(参照了python语法)如下图所示:

 

# D = {(x1,y1)、(x2,y2)......(xm,yn)} 是数据集

# A = {a1、a2、a3.} 是划分节点的属性集

# 节点node有两个主要属性:content代表该节点需要分类的训练集,type代表叶节点的决策类型

def generateTree(D,A):

    newNode = 空 #生成新的节点

    # 如果当前数据集都为一个种类,则设为一个叶节点并返回

    if D 中数据皆属于类别 C:

        newNode.content = D

        newNode.type = C

        return  

    # 如果已经没有属性了或者数据集在剩余属性中表现相同(属性无法区分)

    if A = 空集 or D中数据在A中取值相同:

        newNode.content = D

        newNode.type = D中最多的类

        return

    #从A中选取最优的属性a

    a=selectBestPorperty(A)

    #为a的每一个取值生成一个节点,递归进行处理

    for a的每一个取值 res[i]:

        生成新的分支节点 node[i]

        D[i] = D中取值为res[i]的数据

        node[i].content = D[i]

        if node[i].content == null:

            node[i].type = D中最多的类

        else:

            generateTree(D[i],A - {a})

    return        

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

划分选择

可以看到,在伪代码中,大部分步骤都是简单而明确的,而最重要的步骤在于从A中选取最优的属性a,可以说,属性选择的质量,决定了决策树的预测准确度。这很容易理解,例如我们看一个学生聪明与否可以看他的成绩,但是如果依靠他的身高预测他是否聪明,显然得不到好的结果。

 

一般的原则是,希望通过不断划分节点,使得一个分支节点包含的数据尽可能的属于同一个类别,即“纯度“越来越高。

 

这里列出三种常用的准则。

 

信息增益准则

我们先对一个节点的纯度进行定义,我们将其称之为信息熵:

 

Ent(D)=−∑k=1|γ|pklog(pk)

Ent(D)=−∑k=1|γ|pklog(pk)

其中pkpk代表当前节点D的数据中第k类样本所占的比例。

 

观察该信息熵的定义,有以下几个特点:

 

由于pkpk都属于[0,1],Ent(D)必定为正值,值越大说明纯度越低

Ent(D)在k=1,p1p1=1时取值最小值0,在k=|γ|k=|γ| pk=1|γ|pk=1|γ|时取值最大值log|γ|2log2|γ|

信息熵是一个节点的固有性质,和该节点选取什么属性进行下一步的划分无关

在定义了信息熵之后,对信息增益进行定义,假设选取属性a有V个取值,{a1a2......aV}{a1a2......aV},按照决策树的规则,D将被划分为V个不同的节点数据集,DvDv代表其中第v个节点:

 

Gain(D,a)=Ent(D)−∑v=1V|Dv||D|Ent(Dv)

Gain(D,a)=Ent(D)−∑v=1V|Dv||D|Ent(Dv)

观察该式,有以下几点说明:

 

第一线Ent(D)是确定的,和选取的属性a无关,我们可以将之看为定值

|Dv||D||Dv||D|表示分支节点所占的比例大小,显然数据集越大的分支节点权重越高

分支节点整体纯度越大,则后一项越小,信息增益Gain变得越大,所以我们的目标是如何最大化信息增益

由此,我们得到了一种选择划分属性的方法,计算以每个属性进行划分子节点得到的信息增益,选择其中最大的作为选择的属性。

 

信息增益率准则

信息增益原则对于每个分支节点,都会乘以其权重,也就是说,由于权重之和为1,所以分支节点分的越多,即每个节点数据越小,纯度可能越高。这样会导致信息熵准则偏爱那些取值数目较多的属性。

 

为了解决该问题,这里引入了信息增益率,定义如下:

 

Gainratio(D,a)=Gain(D,a)IV(a)

Gainratio(D,a)=Gain(D,a)IV(a)

IV(a)=∑v=1V|Dv||D|log|Dv||D|2

IV(a)=∑v=1V|Dv||D|log2|Dv||D|

相当于引入了修正项IV(a),它是对于属性a的固有值。

 

需要注意的是,信息增益率原则可能对取值数目较少的属性更加偏爱,为了解决这个问题,可以先找出信息增益在平均值以上的属性,在从中选择信息增益率最高的。

 

基尼指数准则

在CART决策树中,使用基尼指数来选择属性,首先定义数据集D的基尼值:

 

Gini(D)=∑k=1|γ|∑k1!=kpkpk1=1−∑k=1|γ|p2k

Gini(D)=∑k=1|γ|∑k1!=kpkpk1=1−∑k=1|γ|pk2

形象的说,基尼值代表了从D中随机选择两个样本,其类别不一致的概率。

 

有了基尼值后,可以在此基础上定义基尼指数:

 

Giniindex(D,a)=∑v=1V|Dv||D|Gini(Dv)

Giniindex(D,a)=∑v=1V|Dv||D|Gini(Dv)

其中DvDv的含义和之前相同,可以看出基尼指数越小,说明纯度越高,我们可以通过选择基尼指数小的属性来划分子节点。

 

剪枝

剪枝是应该决策树过拟合的一种重要方法,主要分为以下两种:

 

预剪枝:该策略就是在对一个节点进行划分前进行估计,如果不能提升决策树泛化精度,就停止划分,将当前节点设置为叶节点。那么怎么测量泛化精度,就是留出一部分训练数据当做测试集,每次划分前比较划分前后的测试集预测精度。 

优点:降低了过拟合风险,降低了训练所需的时间。

缺点:预剪枝是一种贪心操作,可能有些划分暂时无法提升精度,但是后续划分可以提升精度。故产生了欠拟合的风险。

后剪枝:该策略是首先正常建立一个决策树,然后对整个决策树进行剪枝。按照决策树的广度优先搜索的反序,依次对内部节点进行剪枝,如果将某以内部节点为根的子树换成一个叶节点,可以提高泛化性能,就进行剪枝。 

优先:降低过拟合风险,降低欠拟合风险,决策树效果提升比预剪枝强

缺点:时间开销大得多

特殊值处理

连续值处理

在之前进行选择属性的时候,我们仅仅讨论了属性值为离散值的情况,例如身高分为“极高、高、较高、中等、较矮”五个选项,但是如果数据集中身高为连续值,例如140-210cm,我们该如何处理呢?

 

这里可以采用二分的思想,将连续值化为离散值。由于我们的数据集是有限的,即使是连续值,属性a在数据集中也只出现了有限个确定的值,记为(a1,a2,a3......an)(a1,a2,a3......an),且a1<a2<a3......<ana1<a2<a3......<an。

 

取n个值的中点,令

 

t1=a1+a22,t2=a2+a32......tn−1=an−1+an2

t1=a1+a22,t2=a2+a32......tn−1=an−1+an2

我们得到了n-1个中点,(t1,t2......tn−1)(t1,t2......tn−1),任取一个值titi可以将数据集D分为两个,D+D+表示D中大于titi的数据,D−D−表示D中小于titi的数据集合,这样,我们便可以同离散值一样进行处理了。

 

接下来的问题是,选取哪一个t呢?显然在信息增益准则下,应该选择使得信息增益最大的t:

 

Gain(D,a)=maxtGain(D,a,t)=maxtEnt(D)−∑λ∈{+,−}|Dλ||D|Ent(Dλt)

Gain(D,a)=maxtGain(D,a,t)=maxtEnt(D)−∑λ∈{+,−}|Dλ||D|Ent(Dtλ)

经过稍加改造的信息增益公式就可以选择最好的t来进行划分。

 

缺失值处理

缺失值处理较为复杂,设计到较多的公式,在这里给出链接,读者可以参考阅读

 

缺失值处理详解

 

其主要思想是

 

在选择属性时,仅使用不缺失该属性的数据来计算信息增益,最后乘以一个代表缺失数据比例的比例系数

在对某个属性进行划分子节点时,对于不缺失该属性的数据正常划分,对于缺失该属性的数据,按不同的权重划分进行每个子节点

多变量决策树

实际上大部分机器学习的分类算法,都是将一个具有n个属性的数据,看成一个在n维空间的一个点,分类的过程就是在n维空间或者更高维度空间中找到超平面,将这些点进行划分。

 

而普通的决策树算法有一个特点,由于它每个节点的划分条件都是单独的,明确的,所以决策树的决策边界是平行于空间的坐标轴的。如下图所示:

 

 

这对其拟合特性有一定的影响,当数据比较复杂时,需要较多的属性才能得到较好的划分,而多变量决策树就可以解决该问题。

 

在多变量决策树的学习过程中,不是为每个非叶结点寻找一个最优划分属性,而是试图建立一个合适的线性分类器。 如下图所示:

 

 

 

 

原文:https://blog.csdn.net/bravery_again/article/details/81104914 

 

分享到:
评论

相关推荐

    数据挖掘十大算法之决策树详解

    ### 数据挖掘十大算法之决策树详解 #### 一、引言 在2006年的IEEE数据挖掘国际会议(ICDM)上,诸多专家评选出了当时最常用的十大数据挖掘算法,这一榜单对于后续的数据挖掘研究有着重要的指导意义。在这些算法中,...

    决策树算法原理详解

    ### 决策树算法原理详解 #### 一、信息熵(Entropy) 信息量是指一个样本或事件所包含的信息量。若一个事件的发生概率较高,则该事件携带的信息量相对较少。例如,“太阳从东方升起”这一事件是确定性的,因此不...

    决策树资料合集.rar_决策树_决策树 word_决策树 文档_源代码

    在这个"决策树资料合集"中,包含了关于决策树的源文件、实例、内容详解以及word文档,这为我们深入理解和应用决策树提供了丰富的资源。 首先,我们要理解决策树的基本概念。决策树由节点和边构成,其中根节点代表...

    Python数据挖掘项目开发实战_用决策树预测NBA获胜球队_编程案例实例详解课程教程.pdf

    《Python数据挖掘项目开发实战:用决策树预测NBA获胜球队》是一门深入探讨如何运用Python和决策树算法预测篮球比赛结果的课程。本课程主要针对数据挖掘爱好者和希望掌握机器学习技术在体育赛事预测中应用的人群。...

    决策树算法PPT详解及其代码 覃秉丰.rar

    本资源“决策树算法PPT详解及其代码 覃秉丰.rar”提供了全面的理论讲解和实践代码,是初学者入门以及面试准备的理想资料。 首先,决策树是一种模型,它通过创建树状结构来表示数据集中的特征与目标变量之间的关系。...

    机器学习--决策树(ID3)算法及案例.docx

    决策树是一种广泛应用于机器学习和数据挖掘中的非线性模型,尤其适合于处理分类问题。ID3(Iterative Dichotomiser 3)是最早的一种决策树算法,由Ross Quinlan提出。它以信息增益作为特征选择的依据,构建出能够...

    决策树的训练过程

    "决策树训练过程详解" 决策树是一种常用的机器学习算法,用于分类和回归任务。决策树的训练过程是机器学习中的一种重要步骤,本文将详细介绍决策树的训练过程。 决策树的训练过程可以分为以下几个步骤: 1. 数据...

    决策树算法(Java实现)

    决策树具体详解移步:http://blog.csdn.net/adiaixin123456/article/details/50573849 项目的目录结构分为四个文件夹algorithm,common,data,test (1)algorithm为算法,包括DecisionTree(决策树生成算法)、...

    ENVI 决策树分类

    ### ENVI决策树分类详解 #### 一、ENVI决策树分类概述 ENVI(环境可视化信息系统)是一款专业级别的遥感图像处理软件,其决策树分类功能是进行图像分类的一种重要方法。决策树分类是一种监督学习算法,它通过构建一...

    决策树学习文档

    ### 决策树学习知识点详解 #### 一、决策树模型与学习 **决策树**是一种树形结构,用于描述如何对实例进行分类的过程。它由两类节点组成:内部节点和叶子节点。内部节点代表一个特征或属性,而叶子节点则代表一个...

    西瓜3.0决策树.zip

    使用Python实现用于判断西瓜好坏的决策树程序。 程序详解:https://blog.csdn.net/weixin_40973138/article/details/117999991?spm=1001.2014.3001.5501

    决策树工具使用 PDF格式 希望对大家有用

    ### 决策树工具使用详解 #### 一、决策树算法简介 决策树是一种常用的机器学习算法,用于分类和回归任务。它通过一系列的问题来决定数据的分类或预测结果。决策树方法起源于概念学习系统(CLS),随后演进至ID3算法...

    决策树源代码合集.rar_ID3决策树_id3_id3 决策树_决策树 ID3_决策树ID3

    - 注释和详解可能详细解释了代码逻辑,包括数据结构的使用、计算信息增益的过程以及如何构建决策树。 6. **实际应用** - 决策树广泛应用于各种领域,如医学诊断、信用评分、市场分析、推荐系统等。 - 在数据...

    决策树分类算法原理

    #### 三、决策树算法详解 ##### 3.1 ID3算法 ID3算法是最简单的决策树算法之一,它使用信息增益作为特征选择的标准。具体步骤如下: 1. **计算信息熵**:首先计算整个数据集的信息熵。 2. **计算信息增益**:对于...

    see5.0决策树分析算法

    **see5.0决策树分析算法详解** **一、引言** See5.0是一款基于C4.5决策树算法的开源软件,主要用于数据挖掘和机器学习中的分类任务。它由Ross Quinlan开发,是C4.5算法的一个早期版本,尽管现在已经被更新的工具如...

    SPSS 17.0 决策树中文版使用指南

    #### 三、SPSS中的决策树算法详解 在SPSS 17.0中,用户可以利用CART(Classification and Regression Trees)、CHAID(Chi-squared Automatic Interaction Detection)等不同的决策树算法来进行数据分析。这些算法...

    matlab决策树分类器

    **MATLAB决策树分类器详解** 决策树是一种流行的机器学习算法,常用于分类问题,它通过构建一棵树状模型来做出一系列决定,最终达到预测目标类别的目的。在本示例中,我们将深入探讨如何使用MATLAB实现一个决策树...

    人工智能决策树

    ### 人工智能决策树 #### 一、决策树基础概述 决策树是一种常用的数据挖掘和机器学习方法,通过构建树状模型来进行预测分析。在决策树中,每一个内部节点表示一个特征上的测试,每个分支代表一个测试输出,而叶...

    第三章 决策树算法-2.pdf

    决策树算法与KNN分类算法详解 本文将详细介绍决策树算法和KNN分类算法的基本概念、优缺点、应用场景和实现步骤。 一、决策树算法 决策树是一种常用的机器学习算法,用于对实例进行分类。决策树模型是一种树形结构...

    3-决策树与集成算法-converted.pptx

    决策树与集成算法详解,文章后面还有实战源码(也有详解) 下面是决策树优点 1. 决策树易于理解和解释,可以可视化分析,容易提取出规则; 2. 可以进行回归和分类 3. 比较适合处理有缺失属性的样本; 4. 能够处理不...

Global site tag (gtag.js) - Google Analytics