导航:首页 > 源码编译 > 从根上理解决策树算法

从根上理解决策树算法

发布时间:2023-01-05 08:29:00

⑴ 什么是决策树

决策树是用二叉树形图来表示处理逻辑的一种工具。可以直观、清晰地表达加工的逻辑要求。特别适合于判断因素比较少、逻辑组合关系不复杂的情况。
决策树提供了一种展示类似在什么条件下会得到什么值这类规则的方法。比如,在贷款申请中,要对申请的风险大小做出判断,图是为了解决这个问题而建立的一棵决策树,从中我们可以看到决策树的基本组成部分:决策节点、分支和叶子。
决策树中最上面的节点称为根节点,是整个决策树的开始。本例中根节点是“收入>¥40,000”,对此问题的不同回答产生了“是”和“否”两个分支。
决策树的每个节点子节点的个数与决策树在用的算法有关。如CART算法得到的决策树每个节点有两个分支,这种树称为二叉树。允许节点含有多于两个子节点的树称为多叉树。
每个分支要么是一个新的决策节点,要么是树的结尾,称为叶子。在沿着决策树从上到下遍历的过程中,在每个节点都会遇到一个问题,对每个节点上问题的不同回答导致不同的分支,最后会到达一个叶子节点。这个过程就是利用决策树进行分类的过程,利用几个变量(每个变量对应一个问题)来判断所属的类别(最后每个叶子会对应一个类别)。
假如负责借贷的银行官员利用上面这棵决策树来决定支持哪些贷款和拒绝哪些贷款,那么他就可以用贷款申请表来运行这棵决策树,用决策树来判断风险的大小。“年收入>¥40,00”和“高负债”的用户被认为是“高风险”,同时“收入<¥40,000”但“工作时间>5年”的申请,则被认为“低风险”而建议贷款给他/她。
数据挖掘中决策树是一种经常要用到的技术,可以用于分析数据,同样也可以用来作预测(就像上面的银行官员用他来预测贷款风险)。常用的算法有CHAID、 CART、 Quest 和C5.0。
建立决策树的过程,即树的生长过程是不断的把数据进行切分的过程,每次切分对应一个问题,也对应着一个节点。对每个切分都要求分成的组之间的“差异”最大。
各种决策树算法之间的主要区别就是对这个“差异”衡量方式的区别。对具体衡量方式算法的讨论超出了本文的范围,在此我们只需要把切分看成是把一组数据分成几份,份与份之间尽量不同,而同一份内的数据尽量相同。这个切分的过程也可称为数据的“纯化”。看我们的例子,包含两个类别--低风险和高风险。如果经过一次切分后得到的分组,每个分组中的数据都属于同一个类别,显然达到这样效果的切分方法就是我们所追求的。
到现在为止我们所讨论的例子都是非常简单的,树也容易理解,当然实际中应用的决策树可能非常复杂。假定我们利用历史数据建立了一个包含几百个属性、输出的类有十几种的决策树,这样的一棵树对人来说可能太复杂了,但每一条从根结点到叶子节点的路径所描述的含义仍然是可以理解的。决策树的这种易理解性对数据挖掘的使用者来说是一个显着的优点。
然而决策树的这种明确性可能带来误导。比如,决策树每个节点对应分割的定义都是非常明确毫不含糊的,但在实际生活中这种明确可能带来麻烦(凭什么说年收入¥40,001的人具有较小的信用风险而¥40,000的人就没有)。
建立一颗决策树可能只要对数据库进行几遍扫描之后就能完成,这也意味着需要的计算资源较少,而且可以很容易的处理包含很多预测变量的情况,因此决策树模型可以建立得很快,并适合应用到大量的数据上。
对最终要拿给人看的决策树来说,在建立过程中让其生长的太“枝繁叶茂”是没有必要的,这样既降低了树的可理解性和可用性,同时也使决策树本身对历史数据的依赖性增大,也就是说这是这棵决策树对此历史数据可能非常准确,一旦应用到新的数据时准确性却急剧下降,我们称这种情况为训练过度。为了使得到的决策树所蕴含的规则具有普遍意义,必须防止训练过度,同时也减少了训练的时间。因此我们需要有一种方法能让我们在适当的时候停止树的生长。常用的方法是设定决策树的最大高度(层数)来限制树的生长。还有一种方法是设定每个节点必须包含的最少记录数,当节点中记录的个数小于这个数值时就停止分割。
与设置停止增长条件相对应的是在树建立好之后对其进行修剪。先允许树尽量生长,然后再把树修剪到较小的尺寸,当然在修剪的同时要求尽量保持决策树的准确度尽量不要下降太多。
对决策树常见的批评是说其在为一个节点选择怎样进行分割时使用“贪心”算法。此种算法在决定当前这个分割时根本不考虑此次选择会对将来的分割造成什么样的影响。换句话说,所有的分割都是顺序完成的,一个节点完成分割之后不可能以后再有机会回过头来再考察此次分割的合理性,每次分割都是依赖于他前面的分割方法,也就是说决策树中所有的分割都受根结点的第一次分割的影响,只要第一次分割有一点点不同,那么由此得到的整个决策树就会完全不同。那么是否在选择一个节点的分割的同时向后考虑两层甚至更多的方法,会具有更好的结果呢?目前我们知道的还不是很清楚,但至少这种方法使建立决策树的计算量成倍的增长,因此现在还没有哪个产品使用这种方法。
而且,通常的分割算法在决定怎么在一个节点进行分割时,都只考察一个预测变量,即节点用于分割的问题只与一个变量有关。这样生成的决策树在有些本应很明确的情况下可能变得复杂而且意义含混,为此目前新提出的一些算法开始在一个节点同时用多个变量来决定分割的方法。比如以前的决策树中可能只能出现类似“收入<¥35,000”的判断,现在则可以用“收入<(0.35*抵押)”或“收入>¥35,000或抵押<150,000”这样的问题。
决策树很擅长处理非数值型数据,这与神经网络只能处理数值型数据比起来,就免去了很多数据预处理工作。
甚至有些决策树算法专为处理非数值型数据而设计,因此当采用此种方法建立决策树同时又要处理数值型数据时,反而要做把数值型数据映射到非数值型数据的预处理。

⑵ 决策树(Decision Tree)

  决策树(Decision Tree)是一种基本的分类与回归方法,其模型呈树状结构,在分类问题中,表示基于特征对实例进行分类的过程。本质上,决策树模型就是一个定义在特征空间与类空间上的条件概率分布。决策树学习通常包括三个步骤: 特征选择 、 决策树的生成 和 决策树的修剪 。

  分类决策树模型是一种描述对实例进行分类的树形结构,决策树由节点(node)和有向边(directed edge)组成。节点有两种类型:内部节点(internal node)和叶节点(leaf node)。内部节点表示一个特征或属性,叶节点表示一个类。

  利用决策树进行分类,从根节点开始,对实例的某一特征进行测试,根据测试结果将实例分配到其子节点;这时,每一个子节点对应着该特征的一个取值。如此递归地对实例进行测试并分配,直至达到叶节点。最后将实例分到叶节点的类中。

  决策树是给定特征条件下类的条件概率分布,这一条件概率分布定义在特征区间的一个划分(partiton)上。将特征空间划分为互不相交的单元(cell)或区域(region),并在每个单元定义一个类的概率分布就构成了一个条件概率分布。决策树的一条路径对应划分中的一个单元,决策树所表示的条件概率分布由各个单元给定条件下类的条件概率分布组成。假设X为表示特征的随机变量,Y为表示类的随机变量,那么这个条件概率分布可以表示成P(Y|X)。X取值于给定划分下单元的集合,Y取值于类的集合,各叶节点(单元)上的条件概率往往偏向于某一个类,即属于某一类的概率较大,决策树分类时将该节点的实例分到条件概率大的那一类去。也就以为着决策树学习的过程其实也就是由数据集估计条件概率模型的过程,这些基于特征区间划分的类的条件概率模型由无穷多个,在进行选择时,不仅要考虑模型的拟合能力还要考虑其泛化能力。

  为了使模型兼顾模型的拟合和泛化能力,决策树学习使用正则化的极大似然函数来作为损失函数,以最小化损失函数为目标,寻找最优的模型。显然从所有可能的决策树中选取最优决策树是NP完全问题,所以在实际中通常采用启发式的方法,近似求解这一最优化问题: 通过递归的选择最优特征,根据该特征对训练数据进行划分直到使得各个子数据集有一个最好的分类,最终生成特征树 。当然,这样得到的决策树实际上是次最优(sub-optimal)的。进一步的,由于决策树的算法特性,为了防止模型过拟合,需要对已生成的决策树自下而上进行剪枝,将树变得更简单,提升模型的泛化能力。具体来说,就是去掉过于细分的叶节点,使其退回到父节点,甚至更高的节点,然后将父节点或更高的节点改为新的叶节点。如果数据集的特征较多,也可以在进行决策树学习之前,对数据集进行特征筛选。

  由于决策树是一个条件概率分布,所以深浅不同的决策树对应着不同复杂度的概率模型,决策树的生成对应模型的局部选择,决策树的剪枝对应着模型的全局选择。

   熵(Entropy) 的概念最早起源于物理学,最初物理学家用这个概念度量一个热力学系统的无序程度。在1948年, 克劳德·艾尔伍德·香农 将热力学的熵,引入到 信息论 ,因此它又被称为 香农熵 。在信息论中,熵是对不确定性的量度,在一条信息的熵越高则能传输越多的信息,反之,则意味着传输的信息越少。

  如果有一枚理想的硬币,其出现正面和反面的机会相等,则抛硬币事件的熵等于其能够达到的最大值。我们无法知道下一个硬币抛掷的结果是什么,因此每一次抛硬币都是不可预测的。因此,使用一枚正常硬币进行若干次抛掷,这个事件的熵是一 比特 ,因为结果不外乎两个——正面或者反面,可以表示为 0, 1 编码,而且两个结果彼此之间相互独立。若进行 n 次 独立实验 ,则熵为 n ,因为可以用长度为 n 的比特流表示。但是如果一枚硬币的两面完全相同,那个这个系列抛硬币事件的熵等于零,因为 结果能被准确预测 。现实世界里,我们收集到的数据的熵介于上面两种情况之间。

  另一个稍微复杂的例子是假设一个 随机变量 X ,取三种可能值 ,概率分别为 ,那么编码平均比特长度是: 。其熵为 。因此<u>熵实际是对随机变量的比特量和顺次发生概率相乘再总和的</u> 数学期望 。

  依据玻尔兹曼H定理,香农把随机变量X的熵 定义为:

  其中 是随机变量X的信息量,当随机变量取自有限样本时,熵可以表示为:


  若 ,则定义 。

  同理可以定义条件熵 :

  很容易看出,条件熵(conditional entropy) 就是X给定条件下Y的条件概率分布的熵对X的数学期望。当熵和条件熵中的概率有极大似然估计得到时,所对应的熵和条件熵分别称为检验熵(empirical entropy)和经验条件熵(empirical conditional entropy).

  熵越大,随机变量的不确定性就越大,从定义可以验证:

  当底数 时,熵的单位是 ;当 时,熵的单位是 ;而当 时,熵的单位是 .

  如英语有26个字母,假如每个字母在文章中出现的次数平均的话,每个字母的信息量 为:


  同理常用汉字2500有个,假设每个汉字在文章中出现的次数平均的话,每个汉字的信息量 为:

  事实上每个字母和汉字在文章中出现的次数并不平均,少见字母和罕见汉字具有相对较高的信息量,显然,由期望的定义,熵是整个消息系统的平均消息量。

  熵可以用来表示数据集的不确定性,熵越大,则数据集的不确定性越大。因此使用 划分前后数据集熵的差值 量度使用当前特征对于数据集进行划分的效果(类似于深度学习的代价函数)。对于待划分的数据集 ,其划分前的数据集的熵 是一定的,但是划分之后的熵 是不定的, 越小说明使用此特征划分得到的子集的不确定性越小(也就是纯度越高)。因此 越大,说明使用当前特征划分数据集 时,纯度上升的更快。而我们在构建最优的决策树的时候总希望能更快速到达纯度更高的数据子集,这一点可以参考优化算法中的梯度下降算法,每一步沿着负梯度方法最小化损失函数的原因就是负梯度方向是函数值减小最快的方向。同理:在决策树构建的过程中我们总是希望集合往最快到达纯度更高的子集合方向发展,因此我们总是选择使得信息增益最大的特征来划分当前数据集 。

  显然这种划分方式是存在弊端的,按信息增益准则的划分方式,当数据集的某个特征B取值较多时,依此特征进行划分更容易得到纯度更高的数据子集,使得 偏小,信息增益会偏大,最终导致信息增益偏向取值较多的特征。

  设 是 个数据样本的集合,假定类别属性具有 个不同的值: ,设 是类 中的样本数。对于一个给定样本,它的信息熵为:

  其中, 是任意样本属于 的概率,一般可以用 估计。

  设一个属性A具有 个不同的值 ,利用属性A将集合 划分为 个子集 ,其中 包含了集合 中属性 取 值的样本。若选择属性A为测试属性,则这些子集就是从集合 的节点生长出来的新的叶节点。设 是子集 中类别为 的样本数,则根据属性A划分样本的信息熵为:

  其中 , 是子集 中类别为 的样本的概率。最后,用属性A划分样本子集 后所得的 信息增益(Gain) 为:

  即,<u>属性A的信息增益=划分前数据的熵-按属性A划分后数据子集的熵</u>。 信息增益(information gain)又称为互信息(matual information)表示得知特征X的信息而使得类Y的信息的不确定性减少的程度 。信息增益显然 越小, 的值越大,说明选择测试属性A对于分类提供的信息越多,选择A之后对分类的不确定程度越小。

  经典算法 ID3 使用的信息增益特征选择准则会使得划分更偏相遇取值更多的特征,为了避免这种情况。ID3的提出者 J.Ross Quinlan 提出了 C4.5 ,它在ID3的基础上将特征选择准则由 信息增益 改为了 信息增益率 。在信息增益的基础之上乘上一个惩罚参数。特征个数较多时,惩罚参数较小;特征个数较少时,惩罚参数较大(类似于正则化)。这个惩罚参数就是 分裂信息度量 的倒数 。

  不同于 ID3 和 C4.5 , CART 使用基尼不纯度来作为特征选择准则。基尼不纯度也叫基尼指数 , 表示在样本集合中一个随机选中的样本被分错的概率 则<u>基尼指数(基尼不纯度)= 样本被选中的概率 * 样本被分错的概率</u>。Gini指数越小表示集合中被选中的样本被分错的概率越小,也就是说集合的纯度越高,反之,集合越不纯。

样本集合的基尼指数:
样本集合 有m个类别, 表示第 个类别的样本数量,则 的Gini指数为:

基于某个特征划分样本集合S之后的基尼指数:
  CART是一个二叉树,也就是当使用某个特征划分样本集合后,得到两个集合:a.等于给定的特征值的样本集合 ;b.不等于给定特征值的样本集合 。实质上是对拥有多个取值的特征的二值处理。

对于上述的每一种划分,都可以计算出基于划分特=某个特征值将样本集合划分为两个子集的纯度:

因而对于一个具有多个取值(超过2个)的特征,需要计算以每个取值为划分点,对样本集合划分后子集的纯度 ( 表示特征 的可能取值)然后从所有的划分可能 中找出Gini指数最小的划分,这个划分的划分点,就是使用特征 对样本集合 进行划分的最佳划分点。

参考文献

决策树--信息增益,信息增益比,Geni指数的理解

【机器学习】深入理解--信息熵(Information Entropy)

统计学习方法 (李航)

  为了便于理解,利用以下数据集分别使用三种方法进行分类:

  在进行具体分析之前,考虑到收入是数值类型,要使用决策树算法,需要先对该属性进行离散化。
  在机器学习算法中,一些分类算法(ID3、Apriori等)要求数据是分类属性形式,因此在处理分类问题时经常需要将一些连续属性变换为分类属性。一般来说,连续属性的离散化都是通过在数据集的值域内设定若干个离散的划分点,将值域划分为若干区间,然后用不同的符号或整数数值代表落在每个子区间中的数据值。所以,离散化最核心的两个问题是:如何确定分类数以及如何将连续属性映射到这些分类值。常用的离散化方法有 等宽法 , 等频法 以及 一维聚类法 等。

在实际使用时往往使用Pandas的 cut() 函数实现等宽离散化:

  可以看到与手工计算的离散化结果相同,需要注意的是,<u> 等宽法对于离群点比较敏感,倾向于不均匀地把属性值分布到各个区间,导致某些区间数据较多,某些区间数据很少,这显然不利用决策模型的建立。 </u>

使用四个分位数作为边界点,对区间进行划分:

<u> 等频率离散化虽然避免了等宽离散化的数据分布不均匀的问题,却可能将相同的数据值分到不同的区间以满足每个区间具有相同数量的属性取值的要求。 </u>

使用一维聚类的离散化方法后得到数据集为:

  在本次实例中选择使用基于聚类的离散化方法后得到的数据集进行指标计算。为了预测客户能否偿还债务,使用A(拥有房产)、B(婚姻情况)、C(年收入)等属性来进行数据集的划分最终构建决策树。

单身 :

离婚 :

已婚 :

显然,由B属性取值'已婚'划分得到的子数据集属于同一个叶节点,无法再进行分类。
接下来,对由B属性取值'单身'划分得到的子数据集 再进行最优特征选择:

1)计算数据集 总的信息熵,其中4个数据中,能否偿还债务为'是'数据有3,'否'数据有1,则总的信息熵:

2)对于A(拥有房产)属性,其属性值有'是'和'否'两种。其中,在A为'是'的前提下,能否偿还债务为'是'的有1、'否'的有0;在A为'否'的前提下,能否偿还债务为'是'的有2、为'否'的有1,则A属性的信息熵为:

3)对于B(婚姻情况)属性,由于已被确定,在这个数据子集信息熵为0

4)对于C(年收入)属性,其属性值有'中等输入'、'低收入'两种。在C为'中等收入'的前提下,能否偿还作为为'是'的有1,为'否'的有0;在C为'低收入'的前提下,能否偿还作为为'是'的有2,为'否'的有1;则C属性的信息熵为:

5)最后分别计算两个属性的信息增益值:


信息增益值相同,说明以两个属性对数据子集进行划分后决策树的纯度上升是相同的,此时任选其一成为叶节点即可。
同理,对数据子集 进行最优特征选择,发现信息熵为0:
整理得到最终的决策树:

⑶ 决策树的原理及算法

决策树基本上就是把我们以前的经验总结出来。我给你准备了一个打篮球的训练集。如果我们要出门打篮球,一般会根据“天气”、“温度”、“湿度”、“刮风”这几个条件来判断,最后得到结果:去打篮球?还是不去?

上面这个图就是一棵典型的决策树。我们在做决策树的时候,会经历两个阶段:构造和剪枝。

构造就是生成一棵完整的决策树。简单来说,构造的过程就是选择什么属性作为节点的过程,那么在构造过程中,会存在三种节点:
根节点:就是树的最顶端,最开始的那个节点。在上图中,“天气”就是一个根节点;
内部节点:就是树中间的那些节点,比如说“温度”、“湿度”、“刮风”;
叶节点:就是树最底部的节点,也就是决策结果。

剪枝就是给决策树瘦身,防止过拟合。分为“预剪枝”(Pre-Pruning)和“后剪枝”(Post-Pruning)。

预剪枝是在决策树构造时就进行剪枝。方法是在构造的过程中对节点进行评估,如果对某个节点进行划分,在验证集中不能带来准确性的提升,那么对这个节点进行划分就没有意义,这时就会把当前节点作为叶节点,不对其进行划分。

后剪枝就是在生成决策树之后再进行剪枝,通常会从决策树的叶节点开始,逐层向上对每个节点进行评估。如果剪掉这个节点子树,与保留该节点子树在分类准确性上差别不大,或者剪掉该节点子树,能在验证集中带来准确性的提升,那么就可以把该节点子树进行剪枝。

1是欠拟合,3是过拟合,都会导致分类错误。

造成过拟合的原因之一就是因为训练集中样本量较小。如果决策树选择的属性过多,构造出来的决策树一定能够“完美”地把训练集中的样本分类,但是这样就会把训练集中一些数据的特点当成所有数据的特点,但这个特点不一定是全部数据的特点,这就使得这个决策树在真实的数据分类中出现错误,也就是模型的“泛化能力”差。

p(i|t) 代表了节点 t 为分类 i 的概率,其中 log2 为取以 2 为底的对数。这里我们不是来介绍公式的,而是说存在一种度量,它能帮我们反映出来这个信息的不确定度。当不确定性越大时,它所包含的信息量也就越大,信息熵也就越高。

ID3 算法计算的是信息增益,信息增益指的就是划分可以带来纯度的提高,信息熵的下降。它的计算公式,是父亲节点的信息熵减去所有子节点的信息熵。

公式中 D 是父亲节点,Di 是子节点,Gain(D,a) 中的 a 作为 D 节点的属性选择。

因为 ID3 在计算的时候,倾向于选择取值多的属性。为了避免这个问题,C4.5 采用信息增益率的方式来选择属性。信息增益率 = 信息增益 / 属性熵,具体的计算公式这里省略。

当属性有很多值的时候,相当于被划分成了许多份,虽然信息增益变大了,但是对于 C4.5 来说,属性熵也会变大,所以整体的信息增益率并不大。

ID3 构造决策树的时候,容易产生过拟合的情况。在 C4.5 中,会在决策树构造之后采用悲观剪枝(PEP),这样可以提升决策树的泛化能力。

悲观剪枝是后剪枝技术中的一种,通过递归估算每个内部节点的分类错误率,比较剪枝前后这个节点的分类错误率来决定是否对其进行剪枝。这种剪枝方法不再需要一个单独的测试数据集。

C4.5 可以处理连续属性的情况,对连续的属性进行离散化的处理。比如打篮球存在的“湿度”属性,不按照“高、中”划分,而是按照湿度值进行计算,那么湿度取什么值都有可能。该怎么选择这个阈值呢,C4.5 选择具有最高信息增益的划分所对应的阈值。

针对数据集不完整的情况,C4.5 也可以进行处理。

暂无

请你用下面的例子来模拟下决策树的流程,假设好苹果的数据如下,请用 ID3 算法来给出好苹果的决策树。

“红”的信息增益为:1“大”的信息增益为:0
因此选择“红”的作为根节点,“大”没有用,剪枝。

数据分析实战45讲.17 丨决策树(上):要不要去打篮球?决策树来告诉你

⑷ 决策树算法

决策树算法的算法理论和应用场景

算法理论:

我了解的决策树算法,主要有三种,最早期的ID3,再到后来的C4.5和CART这三种算法。

这三种算法的大致框架近似。

决策树的学习过程

1.特征选择

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

2.决策树生成

根据选择的特征评估标准,从上至下递归生成子节点,直到数据集不可分或者最小节点满足阈值,此时决策树停止生长。

3.剪枝

决策树极其容易过拟合,一般需要通过剪枝,缩小树结构规模、缓解过拟合。剪枝技术有前剪枝和后剪枝两种。

有些算法用剪枝过程,有些没有,如ID3。

预剪枝:对每个结点划分前先进行估计,若当前结点的划分不能带来决策树的泛化性能的提升,则停止划分,并标记为叶结点。

后剪枝:现从训练集生成一棵完整的决策树,然后自底向上对非叶子结点进行考察,若该结点对应的子树用叶结点能带来决策树泛化性能的提升,则将该子树替换为叶结点。

但不管是预剪枝还是后剪枝都是用验证集的数据进行评估。

ID3算法是最早成型的决策树算法。ID3的算法核心是在决策树各个节点上应用信息增益准则来选择特征,递归构建决策树。缺点是,在选择分裂变量时容易选择分类多的特征,如ID值【值越多、分叉越多,子节点的不纯度就越小,信息增益就越大】。

ID3之所以无法 处理缺失值、无法处理连续值、不剪纸等情况,主要是当时的重点并不是这些。

C4.5算法与ID3近似,只是分裂标准从 信息增益 转变成  信息增益率。可以处理连续值,含剪枝,可以处理缺失值,这里的做法多是 概率权重。

CART:1.可以处理连续值 2.可以进行缺失值处理 3.支持剪枝 4.可以分类可以回归。

缺失值的处理是 作为一个单独的类别进行分类。

建立CART树

我们的算法从根节点开始,用训练集递归的建立CART树。

1) 对于当前节点的数据集为D,如果样本个数小于阈值或者没有特征,则返回决策子树,当前节点停止递归。

2) 计算样本集D的基尼系数, 如果基尼系数小于阈值 (说明已经很纯了!!不需要再分了!!),则返回决策树子树,当前节点停止递归。

3) 计算当前节点现有的各个特征的各个特征值对数据集D的基尼系数。

4) 在计算出来的各个特征的各个特征值对数据集D的基尼系数中,选择 基尼系数最小的特征A和对应的特征值a。根据这个最优特征和最优特征值,把数据集划分成两部分D1和D2,同时建立当前节点的左右节点,做节点的数据集D为D1,右节点的数据集D为D2。 (注:注意是二叉树,故这里的D1和D2是有集合关系的,D2=D-D1)

5) 对左右的子节点递归的调用1-4步,生成决策树。

CART采用的办法是后剪枝法,即先生成决策树,然后产生所有可能的剪枝后的CART树,然后使用交叉验证来检验各种剪枝的效果,选择泛化能力最好的剪枝策略。

应用场景

比如欺诈问题中,通过决策树算法简单分类,默认是CART的分类树,默认不剪枝。然后在出图后,自行选择合适的叶节点进行拒绝操作。

这个不剪枝是因为欺诈问题的特殊性,欺诈问题一般而言较少,如数据的万几水平,即正样本少,而整个欺诈问题需要解决的速度较快。此时只能根据业务要求,迅速针对已有的正样本情况,在控制准确率的前提下,尽可能提高召回率。这种情况下,可以使用决策树来简单应用,这个可以替代原本手工选择特征及特征阈值的情况。

⑸ 决策树原理及算法比较

决策树是什么?

    和线性回归一样是一种模型,内部节点和叶节点。实现分类,内部节点和叶节点通过有向线(分类规      则)连接起来

决策树的目标是什么?

    决策树通过对数据复杂度的计算,建立特征分类标准,确定最佳分类特征。

    表现为“熵”(entropy)和信息增益(information gain),基于决策树思想的三种算法:ID3,C4.5,CART算法,三种算法的信息衡量的指标也不同.

    熵来表示信息的复杂度,熵越大,信息也就越复杂,公式如下:

那些算法能够实现决策树?

    在决策树构建过程中,什么是比较重要的。特征选择(按照熵变计算),算法产生最重要的部分,

决策树中叶节点的分类比较纯,

节点顺序的排列规则:

熵变:

数据的预处理:

改进思路一般有两个1,换算法;2,调参数

做好数据的预处理:

1,做好特征选择;

2,做好数据离散化、异常值处理、缺失填充

分类器:

在决策树中,从根到达任意一个叶节点的之间最长路径的长度,表示对应的算法排序中最坏情况下的比较次数。这样一个比较算法排序中的最坏情况的比较次数就与其决策树的高度相同,同时如果决策树中每种排列以可达叶子的形式出现,那么关于其决策树高度的下界也就是关于比较排序算法运行时间的下界,

ID3算法存在的缺点:

    1,ID3算法在选择根节点和内部节点分支属性时,采用信息增益作为评价标准。信息增益的缺点是倾向于选择取值较多的属性

    2,当数据为连续性变量的时候,ID3算法就不是一个合理的算法的模型了

C4.5信息增益比率,

     1,在信息增益的基础上除以split-info,是将信息增益改为信息增益比,以解决取值较多的属性的问题,另外它还可以处理连续型属性,其判别标准是θ,

      2,C4.5算法利用增益/熵值,克服了树生长的过程中,总是‘贪婪’选择变量分类多的进行分类

      3,处理来内需型变量,C4.5的分类树的分支就是两条

衡量指标:

(1)信息增益

基于ID3算法的信息增益对于判定连续型变量的时候病不是最优选择,C4.5算法用了信息增益率这个概念。

分类信息类的定义如下:

这个值表示将训练数据集D划分成对应属性A测试的V个输出v个划分产生的信息,信息增益率定义为:

选择最大信息增益率的属性作为分裂属性

Gini指标,CART

表明样本的“纯净度”。Gini系数避免了信息增益产生的问题,

过拟合问题,非常好的泛化能力,有很好的推广能力

Gini系数的计算:

在分类问题中,假设有k个类,样本点属于第k类的概率为Pk,则概率分布的gini指数的定义为:

如果样本集合D根据某个特征A被分割为D1,D2两个部分,那么在特征A的提哦啊见下,集合D的gini指数的定义为:

Gini指数代表特征A不同分组下的数据集D的不确定性,gini指数越大,样本集合的不确定性也就越大,这一点和熵的概念相类似

决策树原理介绍:

第三步:对于每个属性执行划分:

(1)该属性为离散型变量

记样本中的变量分为m中

穷举m种取值分为两类的划分

对上述所有划分计算GINI系数

(2)该属性为连续型变量

将数据集中从小到大划分

按顺序逐一将两个相临值的均值作为分割点

对上述所有划分计算GINI系数

学历的划分使得顺序的划分有个保证,化为连续型变量处理。

决策树的生成算法分为两个步骤:

预剪枝和后剪枝  CCP(cost and complexity)算法:在树变小和变大的的情况有个判断标准。误差率增益值:α值为误差的变化

决策树的终止条件:

      1,某一个节点的分支所覆盖的样本都是同一类的时候

      2,某一个分支覆盖的样本的个数如果小于一个阈值,那么也可以产生叶子节点,从而终止Tree-Growth

确定叶子结点的类:

      1,第一种方式,叶子结点覆盖的样本都属于同一类

      2, 叶子节点覆盖的样本未必是同一类,所占的大多数,那么该叶子节点的类别就是那个占大多数的类

⑹ 决策树算法-原理篇

关于决策树算法,我打算分两篇来讲,一篇讲思想原理,另一篇直接撸码来分析算法。本篇为原理篇。
通过阅读这篇文章,你可以学到:
1、决策树的本质
2、决策树的构造过程
3、决策树的优化方向

决策树根据使用目的分为:分类树和回归树,其本质上是一样的。本文只讲分类树。

决策树,根据名字来解释就是,使用树型结构来模拟决策。
用图形表示就是下面这样。

其中椭圆形代表:特征或属性。长方形代表:类别结果。
面对一堆数据(含有特征和类别),决策树就是根据这些特征(椭圆形)来给数据归类(长方形)
例如,信用贷款问题,我根据《神奇动物在哪里》的剧情给银行造了个决策树模型,如下图:

然而,决定是否贷款可以根据很多特征,然麻鸡银行选择了:(1)是否房产价值>100w;(2)是否有其他值钱的抵押物;(3)月收入>10k;(4)是否结婚;这四个特征,来决定是否给予贷款。
先不管是否合理,但可以肯定的是,决策树做了特征选择工作,即选择出类别区分度高的特征。

由此可见, 决策树其实是一种特征选择方法。 (特征选择有多种,决策树属于嵌入型特征选择,以后或许会讲到,先给个图)即选择区分度高的特征子集。

那么, 从特征选择角度来看决策树,决策树就是嵌入型特征选择技术

同时,决策树也是机器学习中经典分类器算法,通过决策路径,最终能确定实例属于哪一类别。
那么, 从分类器角度来看决策树,决策树就是树型结构的分类模型

从人工智能知识表示法角度来看,决策树类似于if-then的产生式表示法。
那么, 从知识表示角度来看决策树,决策树就是if-then规则的集合

由上面的例子可知,麻鸡银行通过决策树模型来决定给哪些人贷款,这样决定贷款的流程就是固定的,而不由人的主观情感来决定。
那么, 从使用者角度来看决策树,决策树就是规范流程的方法

最后我们再来看看决策树的本质是什么已经不重要了。
决策树好像是一种思想,而通过应用在分类任务中从而成就了“决策树算法”。

下面内容还是继续讲解用于分类的“决策树算法”。

前面讲了决策树是一种 特征选择技术

既然决策树就是一种特征选择的方法,那么经典决策树算法其实就是使用了不同的特征选择方案。
如:
(1)ID3:使用信息增益作为特征选择
(2)C4.5:使用信息增益率作为特征选择
(3)CART:使用GINI系数作为特征选择
具体选择的方法网上一大把,在这里我提供几个链接,不细讲。

但,不仅仅如此。
决策树作为嵌入型特征选择技术结合了特征选择和分类算法,根据特征选择如何生成分类模型也是决策树的一部分。
其生成过程基本如下:

根据这三个步骤,可以确定决策树由:(1)特征选择;(2)生成方法;(3)剪枝,组成。
决策树中学习算法与特征选择的关系如下图所示:

原始特征集合T:就是包含收集到的原始数据所有的特征,例如:麻瓜银行收集到与是否具有偿还能力的所有特征,如:是否结婚、是否拥有100w的房产、是否拥有汽车、是否有小孩、月收入是否>10k等等。
中间的虚线框就是特征选择过程,例如:ID3使用信息增益、C4.5使用信息增益率、CART使用GINI系数。
其中评价指标(如:信息增益)就是对特征的要求,特征需要满足这种条件(一般是某个阈值),才能被选择,而这一选择过程嵌入在学习算法中,最终被选择的特征子集也归到学习算法中去。
这就是抽象的决策树生成过程,不论哪种算法都是将这一抽象过程的具体化。
其具体算法我将留在下一篇文章来讲解。

而决策树的剪枝,其实用得不是很多,因为很多情况下随机森林能解决决策树带来的过拟合问题,因此在这里也不讲了。

决策树的优化主要也是围绕决策树生成过程的三个步骤来进行优化的。
树型结构,可想而知,算法效率决定于树的深度,优化这方面主要从特征选择方向上优化。
提高分类性能是最重要的优化目标,其主要也是特征选择。
面对过拟合问题,一般使用剪枝来优化,如:李国和基于决策树生成及剪枝的数据集优化及其应用。
同时,决策树有很多不足,如:多值偏向、计算效率低下、对数据空缺较为敏感等,这方面的优化也有很多,大部分也是特征选择方向,如:陈沛玲使用粗糙集进行特征降维。
由此,决策树的优化方向大多都是特征选择方向,像ID3、C4.5、CART都是基于特征选择进行优化。

参考文献
统计学习方法-李航
特征选择方法综述-李郅琴
决策树分类算法优化研究_陈沛玲
基于决策树生成及剪枝的数据集优化及其应用-李国和

⑺ 决策树的理解与应用

决策树🌲是一种基本的分类和回归的方法【以前总是下意识以为决策树只能用于分类,事实上还可以用于回归】。在分类问题中,决策树基于特征对实例进行分类,这个分类过程可以认为是if-then的规则集合,也可以认为是特征空间与类空间上的条件概率分布。

NOTE:
if—then规则集合具有一个重要的特征:互斥且完备,即每个实例都被一条路径或者一条规则所覆盖,而且只能被一条路径或一条规则所覆盖

优点 :简单易理解、分类速度快

过程 :利用损失函数最小化原则对训练集进行建模,再利用建立好的模型进行分类。决策树的学习算法通常是递归地选择最优特征,并根据特征对训练集进行分割,最终形成从【根结点->叶子结点】的树模型, 但是这样生成的树可以容易发生过拟合,所以需要自底向上修剪✋

决策树学习包括三个步骤:特征选择、决策树生成、决策树修剪
1.当特征数量较多时,在学习之前先进行特征选择
2.决策树生成对应局部最优
3.决策树修剪对应全局最优

目标 :选择一个与训练数据矛盾较小的决策树,同时具有很好的泛化能力。

通常,特征选择的准则是 信息增益或者信息增益比

先介绍基本概念:

决策树的生成过程仅考虑到对训练数据集分类的准确性,这样生成的树模型容易出现过拟合且构建的树过于复杂,所以有必要对其进行剪枝。

剪枝 :从已生成的树上裁掉一些子树或者叶结点,并将其根结点或者父结点作为新的叶结点,从而简化分类树模型。 剪枝往往是通过极小化决策树的整体损失函数来实现的

定义损失函数
设树 的叶结点个数为 , 是树的叶结点,该叶结点有 个样本点,其中 类的样本点有 ,其中 是叶子结点 的经验熵, 为参数,决策树学习的损失函数为:

其中
所以最终的损失函数表示为:

公式解释: 是表示模型对训练集的预测误差,即模型与训练集的拟合程度, 表示模型的复杂度,叶子节点数越大模型越复杂, 是调节参数,控制模型的拟合和复杂程度。
当 确定时,选择损失函数最小的模型,这里定义的损失函数其实等价于正则化的极大似然估计。

算法:
INPUT: 生成算法产生的整个树 ,参数
OUPUT: 修剪后的子树
1.计算每个结点的经验熵
2.递归地从树的叶结点向上回缩
回缩前后整体树的损失函数比较,如果回缩前的损失函数大于回缩后,进行剪枝。
3.重复2,直到不能继续为止,得到损失函数最小的子树

后期加入

总结:决策树是一种简单快速的分类算法,本文不仅把熵相关的概念给整理了一遍,文中信息增益和信息增益比也可以用于其他模型的特征选择,而最后剪枝部分提到的决策树的损失函数是我之前在专门写的《详述机器学习中的损失函数》博客中没有提到的,这里也是一个补充。

⑻ 决策树算法原理

决策树是通过一系列规则对数据进行分类的过程。它提供一种在什么条件下会得到什么值的类似规则的方法。决策树分为分类树和回归树两种,分类树对离散变量做决策树,回归树对连续变量做决策树。

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

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

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

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

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

划分数据集的最大原则是:使无序的数据变的有序。如果一个训练数据中有20个特征,那么选取哪个做划分依据?这就必须采用量化的方法来判断,量化划分方法有多重,其中一项就是“信息论度量信息分类”。基于信息论的决策树算法有ID3、CART和C4.5等算法,其中C4.5和CART两种算法从ID3算法中衍生而来。

CART和C4.5支持数据特征为连续分布时的处理,主要通过使用二元切分来处理连续型变量,即求一个特定的值-分裂值:特征值大于分裂值就走左子树,或者就走右子树。这个分裂值的选取的原则是使得划分后的子树中的“混乱程度”降低,具体到C4.5和CART算法则有不同的定义方式。

ID3算法由Ross Quinlan发明,建立在“奥卡姆剃刀”的基础上:越是小型的决策树越优于大的决策树(be simple简单理论)。ID3算法中根据信息论的信息增益评估和选择特征,每次选择信息增益最大的特征做判断模块。ID3算法可用于划分标称型数据集,没有剪枝的过程,为了去除过度数据匹配的问题,可通过裁剪合并相邻的无法产生大量信息增益的叶子节点(例如设置信息增益阀值)。使用信息增益的话其实是有一个缺点,那就是它偏向于具有大量值的属性--就是说在训练集中,某个属性所取的不同值的个数越多,那么越有可能拿它来作为分裂属性,而这样做有时候是没有意义的,另外ID3不能处理连续分布的数据特征,于是就有了C4.5算法。CART算法也支持连续分布的数据特征。

C4.5是ID3的一个改进算法,继承了ID3算法的优点。C4.5算法用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足在树构造过程中进行剪枝;能够完成对连续属性的离散化处理;能够对不完整数据进行处理。C4.5算法产生的分类规则易于理解、准确率较高;但效率低,因树构造过程中,需要对数据集进行多次的顺序扫描和排序。也是因为必须多次数据集扫描,C4.5只适合于能够驻留于内存的数据集。

CART算法的全称是Classification And Regression Tree,采用的是Gini指数(选Gini指数最小的特征s)作为分裂标准,同时它也是包含后剪枝操作。ID3算法和C4.5算法虽然在对训练样本集的学习中可以尽可能多地挖掘信息,但其生成的决策树分支较大,规模较大。为了简化决策树的规模,提高生成决策树的效率,就出现了根据GINI系数来选择测试属性的决策树算法CART。

决策树算法的优点:

(1)便于理解和解释,树的结构可以可视化出来

(2)基本不需要预处理,不需要提前归一化,处理缺失值

(3)使用决策树预测的代价是O(log2m),m为样本数

(4)能够处理数值型数据和分类数据

(5)可以处理多维度输出的分类问题

(6)可以通过数值统计测试来验证该模型,这使解释验证该模型的可靠性成为可能

(7)即使该模型假设的结果与真实模型所提供的数据有些违反,其表现依旧良好

决策树算法的缺点:

(1)决策树模型容易产生一个过于复杂的模型,这样的模型对数据的泛化性能会很差。这就是所谓的过拟合.一些策略像剪枝、设置叶节点所需的最小样本数或设置数的最大深度是避免出现该问题最为有效地方法。

(2)决策树可能是不稳定的,因为数据中的微小变化可能会导致完全不同的树生成。这个问题可以通过决策树的集成来得到缓解。

(3)在多方面性能最优和简单化概念的要求下,学习一棵最优决策树通常是一个NP难问题。因此,实际的决策树学习算法是基于启发式算法,例如在每个节点进行局部最优决策的贪心算法。这样的算法不能保证返回全局最优决策树。这个问题可以通过集成学习来训练多棵决策树来缓解,这多棵决策树一般通过对特征和样本有放回的随机采样来生成。

(4)有些概念很难被决策树学习到,因为决策树很难清楚的表述这些概念。例如XOR,奇偶或者复用器的问题。

(5)如果某些类在问题中占主导地位会使得创建的决策树有偏差。因此,我们建议在拟合前先对数据集进行平衡。

(1)当数据的特征维度很高而数据量又很少的时候,这样的数据在构建决策树的时候往往会过拟合。所以我们要控制样本数量和特征的之间正确的比率;

(2)在构建决策树之前,可以考虑预先执行降维技术(如PCA,ICA或特征选择),以使我们生成的树更有可能找到具有辨别力的特征;

(3)在训练一棵树的时候,可以先设置max_depth=3来将树可视化出来,以便我们找到树是怎样拟合我们数据的感觉,然后在增加我们树的深度;

(4)树每增加一层,填充所需的样本数量是原来的2倍,比如我们设置了最小叶节点的样本数量,当我们的树层数增加一层的时候,所需的样本数量就会翻倍,所以我们要控制好树的最大深度,防止过拟合;

(5)使用min_samples_split(节点可以切分时拥有的最小样本数) 和 min_samples_leaf(最小叶节点数)来控制叶节点的样本数量。这两个值设置的很小通常意味着我们的树过拟合了,而设置的很大意味着我们树预测的精度又会降低。通常设置min_samples_leaf=5;

(6)当树的类比不平衡的时候,在训练之前一定要先平很数据集,防止一些类别大的类主宰了决策树。可以通过采样的方法将各个类别的样本数量到大致相等,或者最好是将每个类的样本权重之和(sample_weight)规范化为相同的值。另请注意,基于权重的预剪枝标准(如min_weight_fraction_leaf)将比不知道样本权重的标准(如min_samples_leaf)更少偏向主导类别。

(7)如果样本是带权重的,使用基于权重的预剪枝标准将更简单的去优化树结构,如mn_weight_fraction_leaf,这确保了叶节点至少包含了样本权值总体总和的一小部分;

(8)在sklearn中所有决策树使用的数据都是np.float32类型的内部数组。如果训练数据不是这种格式,则将复制数据集,这样会浪费计算机资源。

(9)如果输入矩阵X非常稀疏,建议在调用fit函数和稀疏csr_matrix之前转换为稀疏csc_matrix,然后再调用predict。 当特征在大多数样本中具有零值时,与密集矩阵相比,稀疏矩阵输入的训练时间可以快几个数量级。

⑼ 决策树算法的基本思想

1)树以代表训练样本的单个结点开始。
2)如果样本都在同一个类.则该结点成为树叶,并用该类标记。
3)否则,算法选择最有分类能力的属性作为决策树的当前结点.
4)根据当前决策结点属性取值的不同,将训练样本数据集tlI分为若干子集,每个取值形成一个分枝,有几个取值形成几个分枝。匀针对上一步得到的一个子集,重复进行先前步骤,递4'I形成每个划分样本上的决策树。一旦一个属性出现在一个结点上,就不必在该结点的任何后代考虑它。
5)递归划分步骤仅当下列条件之一成立时停止:
①给定结点的所有样本属于同一类。
②没有剩余属性可以用来进一步划分样本.在这种情况下.使用多数表决,将给定的结点转换成树叶,并以样本中元组个数最多的类别作为类别标记,同时也可以存放该结点样本的类别分布,
③如果某一分枝tc,没有满足该分支中已有分类的样本,则以样本的多数类创建一个树叶。

⑽ 关于数据挖掘中决策树的知识

在数据挖掘中,有很多的算法是需要我们去学习的,比如决策树算法。在数据挖掘中,决策树能够帮助我们解决更多的问题。当然,关于决策树的概念是有很多的,所以说我们需要多多学习多多总结,这样才能够学会并且学会数据挖掘的知识,在这篇文章中我们就重点为大家介绍一下关于决策树的相关知识。
1.决策树的算法
决策树的算法是以树状结构表示数据分类的结果。一般情况,一棵决策树包含一个根节点、若干个内部结点和若干个叶结点。而叶结点对应于决策结果,其他每个结点则对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到子结点中;根结点包含样本全集,从根结点到每个叶结点的路径对应了一个判定测试序列。决策树学习的目的就是为了产生一棵泛化能力强,即能处理未见示例能力强的决策树。这些就是决策树算法的结构。
2.决策树的原理
一般来说,决策树归纳的基本算法是贪心算法,自顶向下以递归方式构造决策树。而贪心算法在每一步选择中都采取在当前状态下最优的选择。在决策树生成过程中,划分选择即属性选择度量是关键。通过属性选择度量,选择出最好的将样本分类的属性。这样就能够方便数据属性的划分,然后,下一步是树的剪枝。在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,这样才能够使用决策树解决很多的问题。而分类是数据挖掘中的一种应用方法,而决策树则是一种典型的普遍使用的分类方法,并且决策树技术早已被证明是利用计算机模拟人决策的有效方法。
3.决策树的现状
近年来随着信息技术、计算机科学的迅速发展,决策树作为重要方法之一,越来越受到人们的关注。而其在人工智能方面的潜力以及与越来越多新技术的结合,由此可见,决策树在数据挖掘乃至数据分析中还是有很长的使用时间,这就是决策树至今经典的原因。
在这篇文章中我们给大家介绍了关于数据挖掘中决策树的知识,当大家学习了决策树的概念,决策树的结构以决策树的原理,就能够掌握决策树的基础知识。不过要想学习数据挖掘,还是要学习更多的知识,希望这篇文章能够帮助到大家。

阅读全文

与从根上理解决策树算法相关的资料

热点内容
mac压缩解压视频 浏览:904
这就是程序员魅力 浏览:294
京东java算法笔试题 浏览:178
柱子加密箍筋不准有接头 浏览:199
我的世界服务器菜单插件如何使用 浏览:12
刘毅10000词pdf 浏览:890
刚毕业的程序员会什么 浏览:974
单片机控制64路开关量 浏览:982
win10截图编程 浏览:420
怎样把名字变成文件夹 浏览:203
文件怎么搞成文件夹 浏览:730
多线程编程php 浏览:606
安卓机越用越卡有什么办法 浏览:17
高中生解压操场适合做的游戏 浏览:395
程序员java招聘 浏览:462
未来之光手机云服务器 浏览:160
服务器下载资料为什么c盘满了 浏览:265
怎么清除空文件夹 浏览:544
如何查看派派服务器 浏览:804
杀手6解压画面 浏览:671