决策树的学习

2023-10-26

          决策树,从名字上看,就知道其模型的结构为树结构,决策树既可以用于分类,也可以用于回归之中。在分类问题中,我们可以认为其是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。在学习过程中,利用训练数据和损失函数最小化的原则来构建决策树模型,在分类过程,利用模型对新数据进行分类。直接构建模型,说明决策树是一个判别模型。在学习过程,决策树有主要的三个步骤:特征选择,决策树的生成,决策树的修剪。根据三个步骤的不同,出现了三种决策树的算法:ID3,C4,5,CART.

           决策树模型是树结构,树中存在二种结点,一种是分支结点,对于分支结点,代表了特征或属性,另一种是叶子结点,对于叶子结点,代表了类别。分支结点代表了属性对于特征空间的划分。决策树与if-then规则紧密联系,对于从根结点到叶节点的一条路径对应一条规则。决策树学习到的模型其实也可以转变为给定特征条件下类的条件概率分布。P(Y|X),X为特征条件,Y为类结合,不同的P(Y|X)对应于划分的一个单元,最终实现对于特征空间的划分。 决策树的学习过程,就是从训练数据中学习一个决策树模型,而本质是从训练数据中总结出一套分类规则,我们希望得到一棵决策树与训练数据的矛盾比较小,并且具有不错的泛化能力的结构。换个角度,也可以是学习这样一个条件概率,使条件概率的模型对于训练数据具有很好的拟合效果,并且对于未知数据也有很好的预测。

          决策树的损失函数:正则化的极大似然函数,使损失函数最小化为优化目标来得到模型。但选择最优决策树模型使NP完全问题,所以一般采用的是启发式的方法,近似求解最优化问题,这样得到的决策树是次最优的。

         决策树学习的算法,通常是一个递归的选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集进行判断,如果子数据集大多被分为一类,也就是基本被分类正确,然后就可以结束判断,如果子数据不能基本正确分类,则继续选择特征对子数据集继续进行分隔,直到数据集基本被分类正确或没有多余的特征可以被选择,最终生成一棵决策树。对决策树而言,很可能发生过拟合的现象,我们需要对已生成的树进行剪支,使树变得简单,然后使其具有很好的泛化能力。对于决策树而言,就是一个条件概率分布,不同深浅的决策树,对应于模型的全局选择,决策树的生成只考虑局部最优,相对的,决策树的剪支则需要靠全局最优。

         【特征选择】根据什么标准哪个特征,然后对数据进行了划分。有几种方式,信息增益,信息率,基尼指数。

         信息增益,采用了训练集中的特征和类的互信息来进行度量g(D,A)=H(D)-H(D|A)。缺点在于可能会偏向于多值属性,也就是取值比较多的特征。 对数据集(或子集)D,计算其每个特征的信息增益(对数据集进行划分),选择信息增益最大的特征。

         增益率,解决信息增益容易偏向于多值属性的情况,在分母上增加了特征熵,也是就缓解了多值属性的压力。但容易产生不平衡的划分。

        Gini指数,对应于不纯度的问题。Gini指数越小,说明纯度越高。对于Gini指数而言,是一种二元划分,形成的树是二叉树。最小基尼指数的子集,也就是最大化不纯度的降低。倾向于多值属性,并且在类的数量比较多的情况下,倾向于产生相等大小的分区和纯度。

         三者的不同之处在于,对于信息增益与增益率而言,是通过计算熵来得到的值,而基尼指数则是通过多项式计算得到的,所以前二种运算量大,计算速度小。在ID3中,采用了信息增益,对于C4,5中,采用了增益率,在CART中,采用了基尼指数。

         【决策树的生成以及决策树的剪支】

          对于ID3算法,这个是最开始的算法,最开始也代表其是最粗略的一种算法。在这个算法中,采用具有最大信息增益的特征来作为划分的特征。具体过程是:从根节点(全部数据)开始利用信息增益最大的特征来对数据进行划分,得到结点(子数据),然后判断结点是否有资格来作为叶子结点,如果不具有资格成为叶子结点,则继续重复根结点划分的操作,对于成为叶子结点的资格在于结点中的数据可以基本被分类正确,或者没有多余的特征(所有特征的信息增益都很小)可以被选择的时候,也就是最后全部分支都到了叶子结点的位置,就可以结束决策树的构建过程,这个时候决策树就生成了。

         从ID3的生成过程,我们可以看出,要求其特征都是离散的情况,没有考虑到连续的特征情况,也没有对特征如果有缺失值的情况下考虑,并且仅仅考虑生成的过程,没有考虑树的剪支,很可能产生过拟合,并且对于信息增益这种特征度量方式而言,是偏向于多值属性,这个也没有解决。

         对于C4,5算法,是对于ID3的改进,改进说明有了进步,可以说质的飞跃,但最终还是会被拍死在沙滩上。对于C4,5而言,采用了增益率来进行特征的选择。具体过程是:从根结点开始(全部数据),根据增益率最大的特征将数据划分,形成结点(子数据),在特征选择中,考虑到了连续值的情况,对于连续值得情况,取连续值得中间平均点来计算信息增益,此时将最大信息增益点来作为离散分类点,并且连续的特征在之后还是可以作为特征来进行选择;考虑到了缺失值的情况,缺失值是特征缺失的情况下,如何选择划分的属性,划分的了属性,缺失的特征的处理。。在有缺失值的属性上计算增益率时?可以忽略,或利用特定值来填充(均值,特殊值),对有缺失值的样本进行分裂时,分配给哪个子数据集?可以忽略,也可以采用特定值来填充(均值,最有可能的值),可以单独的分支,对新样本的有缺失值进行分类时?可以走单独分支,可以分配最常见的分支,可以分配最有可能的值,可以不进行分类,给缺失值分配最有可能的值。并且在C4,5 中考虑了剪支,可以说是人群中最闪耀的那颗星了,哈哈。

          C4,5中的剪支,是通过正则化系数来实现,也叫做悲观剪支。树的生成过程是一个局部优化的过程,剪支的过程是一个全局优化的过程,利用了极小化决策树整体的代价函数(cost function)或损失函数(loss function)来实现。

在这个中,主要是通过正则化参数来进行调节。主要流程是,确定参数后,判断,每条边是否需要被剪支。因为只需考虑局部的差的情况,所以我们可以通过动态规划来实现。

          从C4,5的生成过程,我们看出他的努力,但仍有一些遗留问题没有解决,比如特征选用采用的是熵模型,运算量比较大,剪支算法还可以更优化一点,过拟合的问题仍然存在,形成的树为多分叉的树,而二叉树的处理更快,并且仅仅能用于分类操作,对于回归操作没有办法解决。

         CART(Classification and regression tree),可以说是集大成者呀,特征选择采用了gini指数,既可以用于分类,也可以用于回归问题。首先,我们谈一下分类的情况,对于分类而言,具体过程为:对于根节点(全部数据),同样利用最大化纯度的降低的特征来作为(最小基尼指数的特征)来作为特征,此处注意的是二分类的情况,也就是处理需要寻找最优特征,以及划分点,除此之外与上面的构建过程没有二异。对于CART对于连续值得处理过程与C4,5类似,只是度量方式不同,而对于离散值得处理又不同,对于C4,5而言,离散的特征只会被选择一次,而对于CART而言,离散的特征因为没有完全被使用,所以在后续中还是可以选择用于划分的。然后,我们考虑回归的问题,回归是连续的情况,尤其对于输出是连续的情况。回归就类似于对空间进行划分R1,R2..Rm,然后对每个划分中都有一个固定的输出值cm,我们利用每个空间中的平方误差来表示训练误差,也就是让训练误差最小,所以我们采用了利用在这个区域的均值来作为了这个区域最好的输出值。所以这个关键的问题,就在于如何划分区间。思路就是,假定我们已经有了划分的变量,以及划分的点,然后由此得到二个区域,然后求最小化的情况,最终得到真实的划分变量以及划分点,然后不断的对空间进行划分,最终得到一棵回归树。对于CART,回归问题中,采用的最小平方误差来寻找特征和特征的划分点,而在分类问题中,采用了gini指数来寻找特征和特征的划分点。

         对于CART的剪支,是一种后剪支的策略,从完全生长的决策树的底端剪去一些子树,使决策树变小。剪支的过程分为二个过程:第一个是得到具体的候选的决策树序列,具体是指,不断的剪支直到根节点,形成子树序列{T0,T1,T2,...,Tn},然后通过交叉验证法在独立的验证数据集上进行测试,选出最优子树。从上图,我们可以看出,正则化参数alpha权衡了训练数据的拟合以及模型复杂度之间的关系。alpha=0时,说明完全生长的决策树就是目前最优子树;alpha增大时,不断的剪支以使决策树模型的复杂度减低最终实现达到固定的参数情况下的最优子树;alpha无穷大时,说明只有单结点树时最优子树。也就是{T0,T1,...Tn}是在alpha不断改变的基础上求出的当前最优子树,也就是每一个都是C4,5中剪支操作的结点,需要将C4,5动起来,得到最终的结果。如果我们采用C4,5中的那种操作,实在是太低效了,所以,人的智慧都是无穷无尽的。先人是怎么考虑这个问题的呢?首先,对于一个结点,如果这个结点作为根的子树,以及只有这个结点的树的损失函数相等的情况下,那么就可以把这个结点为根的其余部分简直了,因为是一样的。。然后对每个内部结点,计算相等时的alpha的值,然后内部结点计算的最小的alpha的值,对其进行响应的内部结点的剪支,然后得到当前alpha状态下的最优子树,最终得到最优子树的序列,然后通过验证集来对最优子树的序列来进行交叉验证,最终选取最优子树。在CART的剪支中,我们与C4,5的不同之处在于C4,5确定了一个alpha的值,然后依此判断树的每一个结点是否应该被去除,而CART的alpha则是一个需要计算的可以变化的量,也就是对于每个内部结点计算如果要剪掉这个内部结点的分支部分时的alpha,然后依此排列出一个按照alpha大小排列的子树的集合,最终通过交叉验证,然后从这个子树的集合中,最终得到最优的那个。。

 

      

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

决策树的学习 的相关文章

  • 腾讯股票数据接口 http/javascript

    From http blog csdn net ustbhacker article details 8365756 之前使用了新浪的股票数据 由于新浪http javascript缺少一些数据 用chrome自带的开发工具监视腾迅财经HT
  • 【tensorflow】张量Tensor的操作(创建,变换和分割)

    参考链接 https blog csdn net yeshang lady article details 124615743 ops request misc request id biz id 102 utm term tensorfl
  • http

    一 简单分析 简单的分析 从输入 URL到回车后发生的行为如下 URL解析 DNS 查询 TCP 连接 HTTP 请求 响应请求 页面渲染 二 详细分析 URL解析 首先判断你输入的是一个合法的URL 还是一个待搜索的关键词 并且根据你输入
  • Clumsy-Windows下网络环境模拟工具

    下载页 http jagt github io clumsy cn download 项目的代码可以在github上获取 在下载页面有编译好的版本 强烈建议在使用前花点时间阅读一下文档 来 了解 clumsy 的功能和限制 目前的实现中有一
  • 【概率论与数理统计】猴博士 笔记 p41-44 统计量相关小题、三大分布的判定、性质、总体服从正态分布的统计量小题

    文章目录 统计量相关小题 三大分布的判定 三大分布的性质 总体服从正态分布的统计量小题 统计量相关小题 题干 总体X 有一些样本X1 X2 X3 解法 注意 S的分母是n 1 接下来练习套公式 例1 直接背公式 例2 解 除X S n外有其
  • The illustrated Transformer 笔记

    The illustrated Transformer Transformer是一种使用Attention机制类提升模型训练的速度的模型 该模型的最大优势在于其并行性良好 Transformer模型在Attention is All You
  • IDEA 方法注释 自动获取返回值和传参

    一 设置 1 添加自定义注释快捷键 2 注释内容 desciption params return returns Author junwei Date date time 点击右边的edit variables 设置函数 下面3个内容选择
  • 前端面试题梳理

    一 技术方面 60 1 实现一个元素的水平垂直居中的几种方式 2 vue中 双向绑定的原理 3 vueX的原理 4 实现一个左边固定 右边自适应的布局 5 pomise的理解 6 对浏览器兼容的理解 如何兼容低版本浏览器 7 地址栏输入一个
  • UnityEditor.BuildPlayerWindow+BuildMethodException

    unity3D安卓打包报错 UnityEditor BuildPlayerWindow BuildMethodException 61 errors at UnityEditor BuildPlayerWindow DefaultBuild
  • hive 查询输入中文乱码

    设置 home 用户 profile 文件中LANG en US UTF 8即可
  • envi5.3处理高分二号影像数据详细过程记录

    目录 一 多光谱影像处理 1 辐射定标 2 大气校正 1 需要准备一些数据 2 大气校正过程 3 正射校正 二 全色影像处理 1 辐射定标 2 正射校正 三 图像融合 1 几何配准 2 图像融合 高分二号处理流程 envi5 3的安装教程
  • C3P0的详细配置说明(com.mchange.v2.c3p0.ComboPooledDataSource)

    C3P0是一个开放源代码的JDBC连接池 它在lib目录中与Hibernate一起发布 包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象 c3p0 config gt
  • 使用Pytorch进行多卡训练

    当一块GPU不够用时 我们就需要使用多卡进行并行训练 其中多卡并行可分为数据并行和模型并行 具体区别如下图所示 由于模型并行比较少用 这里只对数据并行进行记录 对于pytorch 有两种方式可以进行数据并行 数据并行 DataParalle
  • 数据库课程设计:图书信息管理系统(Java+MySQL)(附程序)

    期末数据库课程设计做了个图书信息管理系统 由于老师给的选题给得早 所以我在开学后的几周就开学搞了 删删改改整了好多 在此整理分享一下 项目简介 随着社会的发展 人们对知识的需求也在不断增长 书籍作为人们获取并增长知识的只要途径 使得书城 书
  • 如何通过远程桌面重启计算机?

    使用远程桌面连接远程计算机后 在开始菜单中只有 注销 和 关机 选项 无法直接重启现场终端 可以使用命令行重启现场终端 使用运行命令 Windows R键 输入命令行shutdown r t 0 Shutdown r t 5 关闭 重启 延
  • 看尚电视adb安装当贝桌面,并开机自启

    1 链接 可以电脑下奇兔刷机 实用工具里有adb 点开直接用 ADB 链接好后输入命令验证 c adb gt adb devices 如显示 192 168 5555 device字样表示链接成功 不同的adb前面几个字母也许不一样 2 开
  • 每个初级程序员都希望有一天能成为一名高级开发工程师。

    当程序员想要转向更高需求以及更高层次的角色时 他们的能力也必须随之提升 但也正因如此 很多人都会在这种转变中失败 程序员们通常认为 成为一名高级开发工程师必定要积累一定年限的经验以及十分擅长编程 虽然这些的确是必要因素 但想要成为一名高级开
  • 多线程创建的方式

    多线程的创建方式有以下几种 1 继承Thread类创建多线程 继承java lang Thread类 重写Thread类的run 方法 在run 方法中实现运行在线程上的代码 调用start 方法开启线程 Thread 类本质上是实现了 R

随机推荐

  • 【Ubuntu换源教程】不同Ubuntu系统版本换清华源

    今天在新电脑上装了虚拟机VMware Workstation Pro 16 在虚拟机上安装了Ubuntu20 04系统 在做Ubuntu20 04系统换源的时候 发现源要和Ubuntu的版本匹配 之前一直不知道 一直都是盲目换源 版本如果不
  • unity给localRotation赋值

    transform localPosition和transform localScale都是直接赋值三元数 给旋转赋值需要用 方法一 xxx transform localEulerAngles new Vector3 0 0f 0 0f
  • JS面试中常见的算法题

    1 验证一个数是否是素数 1 如果这个数是 2 或 3 一定是素数 2 如果是偶数 一定不是素数 3 如果这个数不能被3至它的平方根中的任一数整除 num必定是素数 而且除数可以每次递增 排除偶数 function isPrime num
  • 优秀logo设计解析_优秀Logo设计!具象表现手法!

    文 王新华 具象标志以客观物象的自然形态为造型基础 经过提炼 概括 抓住客观对象的精神内涵 强化其主要特征 忽略与舍弃次要因素 达到直观 感性的视觉效果 人物形 人是万物之灵 是社会的主宰 以人物为题材是标志设计的重要表现内容 人体的各种动
  • C++中memset函数详解

    memset函数定义于
  • Django中分页功能的实现及封装与调用(超详细)

    在django开发过程中 实现前端页面的分页是一个基本且常用的功能 下面就同小编一起完成分页功能的实现及封装与调用 一 在pycharm中创建django项目 小编默认看客朋友们都会创建 故不在赘述 若不熟悉 猛戳这里 二 在mysql中创
  • React事件处理、事件的特点、事件语法、React事件处理函数里的this、事件对象、阻止浏览器的默认行为

    React事件的特点 1 React 事件绑定属性的命名采用驼峰式写法 而不是小写 如 onClick 2 如果采用 JSX 的语法你需要传入一个函数作为事件处理函数 而不是一个字符串 DOM 元素的写法 函数不写小圆括号 3 在 Reac
  • CSAPP malloclab实验

    书本配套实验地址 构造一个分配器是一件富有挑战的任务 设计空间很大 有多种块格式 空闲链表格式 以及放置 分割和合并策略可供选择 另一个挑战就是我们经常被迫在类型系统的安全和熟悉的限定之外编程 依赖于容易出错的指针强制类型转换和指针运算 这
  • FreeRTOS记录(五、FreeRTOS任务通知)

    在前面几篇文章我们已经对FreeRTOS任务API和任务调度原理进行了相对深入的分析 这篇文章主要针对任务与任务之间的交互 信息传递相关的API组件进行分析 目录 一 任务通知基本介绍 1 FreeRTOS 任务通知函数 2 CMSIS封装
  • Android调用打印机

    打印机其实和Android没有什么大的关系 和linux内核关联才是比较强的 最终的结果是要在Android实现驱动打印机 但是一般调试一个新的驱动的流程是这样的 1 先在linux PC上进行测试 2 在标准嵌入式linux上进行调试 3
  • MFC原理与方法(二)

    MFC原理与方法 二 一 前言 二 类向导的使用 三 MFC消息管理 1 MFC消息映射机制 2 消息处理 四 结语 一 前言 时间过得好快啊 又是一个星期过去了 我又回来啦 每个星期保持写博客的习惯 及时消化上课的知识 不仅仅对我有帮助和
  • MySQL进阶篇之存储过程(procedure)

    04 视图 存储过程 触发器 4 1 视图 view 4 2 存储过程 procedure 4 2 1 介绍 1 介绍 存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合 调用存储过程可以简化应用开发人员的很多工作 减少数据在数据
  • 异常处理的返回

    异常处理的返回 异常可以分为四类 中断 interrupt 陷阱 trap 故障 fault 和终止 abort 这几种异常处理之后又有不同的返回方式 总的来讲 类别 原因 异步 同步 返回行为 中断 来自I O设备的信号 异步 总是返回到
  • 面试3个月拿下多家大厂的P7技术专家Offer,来看我面试复盘!

    一 概述 之前写过两篇文章 工作10年我面试过上百个程序员 真想对他们说 在公司里写代码天天摸鱼偷懒 出去面试又该怎么写简历 通过这两篇文章 我们给大家聊了聊国内中大型互联网公司 在Java面试时一些高频的技术问题 本文我们通过一篇真实的一
  • 【状态估计】用于非标量系统估计的最优卡尔曼滤波(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 考虑了最优卡尔曼滤波的例子 假设一些非标量
  • vscode运行命令是报错:标记“&&”不是此版本中的有效语句分隔符。

    问题截图 问题原因 这个问题的原因和你运行的什么脚本语言没关系 即与 py c cpp无关 和你在那个终端运行的有关 解决方法 第一步 点击向下箭头 并选择 选择默认配置文件 第二步 选择 Windows PowerShell 第三步 关闭
  • 数字IC手撕代码-边沿检测(上升沿、下降沿、双边沿)

    前言 本专栏旨在记录高频笔面试手撕代码题 以备数字前端秋招 本专栏所有文章提供原理分析 代码及波形 所有代码均经过本人验证 目录如下 1 数字IC手撕代码 分频器 任意偶数分频 2 数字IC手撕代码 分频器 任意奇数分频 3 数字IC手撕代
  • 2021羊城杯CTF wp

    2021羊城杯 部分 wp Web web1 only 4 web2 EasyCurl web3 Checkin Go web4 Cross The Side Re Pwn BabyRop Crypto Miss bigrsa Misc M
  • FISCO-BCOS如何把WEBASE部署通过的合约方法由api在前端调用

    参考文章 fisco bcos官方文档第五章部分 通过POST请求 数据格式要为json 调用hello合约中的get方法 按要求填写需要的信息
  • 决策树的学习

    决策树 从名字上看 就知道其模型的结构为树结构 决策树既可以用于分类 也可以用于回归之中 在分类问题中 我们可以认为其是if then规则的集合 也可以认为是定义在特征空间与类空间上的条件概率分布 在学习过程中 利用训练数据和损失函数最小化