决策树原理简介[通俗易懂]

决策树原理简介[通俗易懂]基于决策树(DT)的算法如RF、GBDT在各种工业场景有着广泛的应用,了解决策树基础算法非常重要,下面我们就对于决策树算法做一下总结决策树分类器基本思想决策树是一种基于分治法的分类器。假设我们有若干个样本点,把它们放在一个节点内,按照最原始的方法对数据做分类,我们可以对节点内部的样本标签做统计,每一个新的样本都可以归为标签的众数(数量最多的标签);当然,这个方法太粗暴没有实用价值,那么我们…


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

基于决策树(DT)的算法如RF、GBDT在各种工业场景有着广泛的应用,了解决策树基础算法非常重要,下面我们就对于决策树算法做一下总结

决策树分类器基本思想

决策树是一种基于分治法的分类器。假设我们有若干个样本点,把它们放在一个节点内,按照最原始的方法对数据做分类,我们可以对节点内部的样本标签做统计,每一个新的样本都可以归为标签的众数(数量最多的标签);当然,这个方法太粗暴没有实用价值,那么我们是否可以通过某种规则将这个节点内的样本点分成若干个子节点,在小节点上运用同样的众数方法判断分类。可以确定的是,如果规则选择的好,分类准确度是一定可以提高的。按照这个方向,子节点仍然可以衍生出其本身的子节点以提供分类准确度。

决策树算法

(1)决策树的生成

决策树节点的分支规则是怎样的呢?通常它是围绕着节点样本的某一个特征展开的:我么首先会选择节点样本的某个特征,以该特征为基础将样本分成若干个分支。

我们假设样本特征都是离散特征(对于连续特征后面会讲),那么分支的过程即为特征选择的过程:只要选定了特征,随即依照不同的特征值类别将父节点的样本分配给子节点。特征的选择应该按照什么原则?我们可以从信息的角度来分析分类问题,如果一个节点的分类效果好,那么它内部样本D的类别分布应该是比较单一而非混杂的,或者说从系统上说,它的熵是比较小的,反之则比较大。回忆互信息I(D;A)的定义,一种理解方式即给定事件A可以在多大程度上降低D的不确定性,如果我们将A定义为选定了某一个特征,D定义为样本的分类,那么I(D;A)的大小恰好就可以衡量分支的好坏:I(D;A)越大熵降低的越多,这是我们希望看到的,反之越少。

这样,我们可以使用互信息I(D;A) = H(D) - H(D|A)来选择不同的特征,当然这里H(D)和H(D|A)是“经验”熵。设C代表类别,熵的计算公式如下:

                                                                      决策树原理简介[通俗易懂]

                                                           决策树原理简介[通俗易懂]

事实上,上述方法有一个隐患,取值比较多的特征比取值少的特征互信息大,同等条件下总是选择取值比较多的特征显然是不合理的,因此一种改进的做法是使用信息增益比:

                                                                              g_r(D;A) = \frac{I(D;A)}{H(D)}

来代替互信息做判断。

有了单个节点分支的策略,接下来就是要递归地重复这个过程,直到节点内部只有一个单一的类别。

(2)决策树的剪枝

由上述方式生成的决策树虽然在训练数据上有着很好的表现,但是泛化能力却很差。为了解决这个问题,我们要使用剪枝策略。决策树的剪枝通过极小化决策树的损失函数来实现,设树T的叶节点个数为|T|,t是树T的叶节点,该叶节点有N_t个样本点,其中k类的样本点有N_{tk}个,类别总共有K个,则损失函数可以表示为:

                                                                  决策树原理简介[通俗易懂]

可以看到,过多的叶节点的会使得损失函数增大。这和我们建立机器学习模型的经验是相吻合的,越复杂的模型往往容易发生过拟合。

要使得损失函数最小化,全局搜索是比较困难的,为此我们使用启发式的树的剪枝算法:

决策树原理简介[通俗易懂]

决策树原理简介[通俗易懂]

 

(3)CART树算法

CART树作为一种改进的决策树,其结构简单,计算速度快,在工业上得到了广泛的应用。CART树与C4.5和ID3决策树有多处不同。

1. 计算互信息时由于有log运算,所以计算速度比较慢,CART改进了这一点,使用gini指数而非互信息运算来表示不纯度。

gini指数定义如下:

决策树原理简介[通俗易懂]

决策树原理简介[通俗易懂]

决策树原理简介[通俗易懂]

2. CART树是二叉树,每个父节点只能生成两个分支。

如果特征是离散值,我们循环访问该特征的每个属性,对于每一个属性,我们计算按此属性做二类划分所能得到的gini值,选取最小的那个作为划分条件。如果特征是连续值,我们取每两个样本的中间值所谓候选划分点,以小于或者大于该划分点计算gini值,同样先去最小的作为划分条件。

3. CART树剪枝策略很不一样。

预剪枝这里就不说,包括对于深度的限制,节点样本数据大小的限制。这里讲一下CART的后剪枝策略。我们知道对于决策树的任意一个子树T,我们都可以计算其损失函数:

                                                                   决策树原理简介[通俗易懂]

其中C(T)是对于子树对于属于其样本的训练数据误差,|T|是子树叶节点个数。设子树T的根节点是t,其剪枝后的损失函数为:

                                                                      决策树原理简介[通俗易懂]

我们知道,随着\alpha的增大,最优子树的叶节点会越来越少;那么当\alpha大到一定程度,T就需要做完全剪枝,即只留下一个根节点t。该\alpha为:

                                                                      决策树原理简介[通俗易懂]

我们将其称作为误差增益。对于整个决策树,我们对每一个节点都可以求其对应的误差增益;逐渐增加误差增益\alpha,将低于该\alpha的子树剪掉,这样我们就可以得到一系列的决策树\left \{ T_1,T_2,...,T_n \right \}。最后用测试数据较差验证选择最优的子树就好。

决策树处理缺失值

对于决策树,我们需要考虑3种缺失值的情况。

1. 在选择特征作为分支依据时,某个样本的特征值缺失。对于这种情况,我们会忽略吗该样本来计算最终信息增益,不过最后结果要做加权。比如,节点有10个样本,在计算特征a时发现样本s1的特征a是缺失的,则我们计算信息增益时候跳过s1的到结果0.9,但是我们是用10个样本中的9个得到该结果的,所以结果要再乘以9/10,信息增益就是0.9*0.9=0.81。

2. 分支时特征已经选好,但是分配样本时有样本该特征缺失。遇到该情况,该样本可以同时分配到不同的分支,但权重并非为1而是特征不同属性值所占的比例

3. 测试数据特征值缺失。这种情况处理的方法就比较多了,其中一种是为样本特征设置一个值,这个值为样本中该特征出现次数最多的属性。

总结

我们来看一下决策树模型的又优缺点。

优点:

1. 易于理解, 树容易可视化

2. 不需要白化数据;缺失值不需要提前做特殊处理;

3. 连续以及离散数据都可以处理

缺点:

1. 对少量数据很敏感,少量数据上的变动可能差生完全不同的决策树,这一点也可以解释为容易过拟合。可以通过bagging和boosting的方法来改善。

2. 学习一个最优的决策树是NP难度问题(类似CART树的剪枝策略是启发式方法,并非全局最优),这同样可以通过融合的方法来改善。

3. 有些概念决策树不易学到(也就是虽然其为非线性模型,但其表达能力也是有限的),比如XOR关系。

4. 决策树在处理回归问题时,对于其没有遇到过的类型的数据,缺乏泛化能力

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196053.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux命令–hexdump(以16进制查看文件内容)[通俗易懂]

    Linux命令–hexdump(以16进制查看文件内容)[通俗易懂]本文介绍Linux的tac命令的用法。hexdump用于以16进制查看文件内容

    2022年9月21日
  • 光流法原理概述「建议收藏」

    光流法原理概述「建议收藏」光流的概念是Gibson在1950年首先提出来的。它是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。一般而言,光流是由于场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。    简单来说,光流是空间运动物体在观测成像平面上

    2022年7月23日
  • 网页跳转qq聊天代码_html全屏代码

    网页跳转qq聊天代码_html全屏代码偶尔从某地得到我去看了看,果然可以但是又想了想他是怎么样和TENCENT数据库连接的呢?呵呵~自己做一个吧!原代码如下,自己有PHP空间的话,你也可以提供QQ在线的js代码服务了!连接代码把下面的代码保存成PHP文件就可以了!我想他也是连接别人的数据吧~那我也连接一下他的http://www.gaodaima.com/45503.html让你拥有自己的QQ在线显示代码(又是转_php$file=f…

    2022年10月17日
  • 智能窗帘研究制作_智能窗帘的制作方法[通俗易懂]

    智能窗帘研究制作_智能窗帘的制作方法[通俗易懂]步骤1:所需组件:IntelGalileox1IntelGalileox1的电源线LDRx1220ohm电阻x18.2Kohm电阻器x1蓝牙模块(HC-05)x19V电池x19V电池适配器x1电动机驱动器x1迷你-面包板x1连接线(公对公))x40连接线(公对母)x40步骤2:将LDR和220ohm电阻与IntelGalileo接口LDRLDR扩展为光敏电阻。根据投射到LDR表面的光强度,它会改变…

    2022年6月23日
  • Jersey框架一:Jersey RESTful WebService框架简介[通俗易懂]

    Jersey框架一:Jersey RESTful WebService框架简介[通俗易懂]开发RESTfulWebService意味着支持在多种媒体类型以及抽象底层的客户端-服务器通信细节,如果没有一个好的工具包可用,这将是一个困难的任务为了简化使用JAVA开发RESTfulWebService及其客户端,一个轻量级的标准被提出:JAX-RSAPIJerseyRESTfulWebService框架是一个开源的、产品级别的JAVA框架,支持JAX-RSAPI并且是一个JAX-RS(JSR311和JSR339)的参考实现Jersey不仅仅是一个JAX-RS的参考实现,Jers

    2022年9月15日
  • Pycharm git 使用简介

    Pycharm git 使用简介1.VCS版本控制服务器(GITCVSSVN)2.VCS—>checkoutfromversioncontrol从服务器clone代码并且创建本地项目,默认切换到主分支(master)3.gitignore文件:用来添加忽略文件4.右键—>Git—>Repository—>Branches创建并切换到dev分支5.开发到一定阶段将dev分支…

    2022年10月24日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号