机器学习 | 决策树算法

一、决策树算法概述


1、树模型

        决策树:从根节点开始一步步走到叶子节点(决策)。所有的数据最终都会落到叶子节点,既可以做分类也可以做回归。

        在分类问题中,表示基于特征对实例进行分类的过程,可以认为是if-then的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。

2、树的组成

        根节点:第一个选择点

        非叶子节点与分支:中间过程

        叶子节点:最终的决策结果

3、

  • 决策树通常有三个步骤:特征选择、决策树的生成、决策树的修剪。
  •  决策树学习的目标
    • 根据给定的训练数据集构建一个决策树模型,使它能够对实例进行正确的分类。
  • 决策树学习的本质
    • 从训练集中归纳出一组分类规则,或者说是由训练数据集估计条件概率模型。
  • 决策树学习的损失函数:正则化的极大似然函数
  • 决策树学习的测试:最小化损失函数
  • 决策树学习的目标:在损失函数的意义下,选择最优决策树的问题。
  • 训练阶段
    • 从给定的训练集构造出来一棵树(从跟节点开始选择特征, 如何进行特征切分)。
    • 有数据想构建树。
  • 测试阶段
    • 根据构造出来的树模型从上到下去走一遍就好了。
    • 有数据想得结果。

        一旦构造好了决策树,那么分类或者预测任务就很简单了,只需要走一遍 就可以了,那么难点就在于如何构造出来一颗树,这就没那么容易了,需要考虑的问题还有很多的!

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

         

        k-近邻算法可以完成很多分类任务,但是其最大的缺点是无法给出数据的内在含义,决策树的优势在于数据形式非常容易理解。 


二、熵的作用

1、如何切分特征(选择节点)

        问题:根节点的选择该用哪个特征呢?接下来呢?如何切分呢?

        想象一下:我们的目标应该是根节点就像一个老大似的能更好的切分数据 (分类的效果更好),根节点下面的节点自然就是二当家了。

        目标:通过一种衡量标准,来计算通过不同特征进行分支选择后的分类 情况,找出来最好的那个当成根节点,以此类推。

2、衡量标准-熵

        熵是表示随机变量不确定性的度量 。

        (解释:说白了就是物体内部的混乱程度,比如杂货市场里面什么都有 那肯定混乱呀,专卖店里面只卖一个牌子的那就稳定多啦)

        熵值公式

        举例

        A集合[1,1,1,1,1,1,1,1,2,2] B集合[1,2,3,4,5,6,7,8,9,1]

        显然A集合的熵值要低,因为A里面只有两种类别,相对稳定一些。而B中类别太多了,熵值就会大很多。


三、信息增益原理

1、熵值

        不确定性越大,得到的熵值也就越大。

        当p=0或p=1时,H(p)=0,随机变量完全没有不确定性。

        当p=0.5时,H(p)=1,此时随机变量的不确定性最大。

        

2、信息增益

        特征X使得类Y的不确定性减少的程度。 (分类后的专一性,希望分类后的结果是同类在一起) 

        划分数据集的大原则是:将无序数据变得更加有序,但是各种方法都有各自的优缺点,信息论是量化处理信息的分支科学,在划分数据集前后信息发生的变化称为信息增益,获得信息增益最高的特征就是最好的选择,所以必须先学习如何计算信息增益,集合信息的度量方式称为香农熵,或者简称熵。


 四、决策树构造及实例

        

        决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得各个子数据集有一个最好的分类的过程。这一过程对应着对特征空间的划分,也对应着决策树的构建。

  • 1) 开始:构建根节点,将所有训练数据都放在根节点,选择一个最优特征,按着这一特征将训练数据集分割成子集,使得各个子集有一个在当前条件下最好的分类。
  • 2) 如果这些子集已经能够被基本正确分类,那么构建叶节点,并将这些子集分到所对应的叶节点去。
  • 3)如果还有子集不能够被正确的分类,那么就对这些子集选择新的最优特征,继续对其进行分割,构建相应的节点,如果递归进行,直至所有训练数据子集被基本正确的分类,或者没有合适的特征为止。
  • 4)每个子集都被分到叶节点上,即都有了明确的类,这样就生成了一颗决策树。

决策树的特点:

  • 优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据。
  • 缺点:可能会产生过度匹配的问题
  • 适用数据类型:数值型和标称型

过程:

        首先,确定当前数据集上的决定性特征,为了得到该决定性特征,必须评估每个特征,完成测试之后,原始数据集就被划分为几个数据子集,这些数据子集会分布在第一个决策点的所有分支上,如果某个分支下的数据属于同一类型,则当前无序阅读的垃圾邮件已经正确的划分数据分类,无需进一步对数据集进行分割,如果不属于同一类,则要重复划分数据子集,直到所有相同类型的数据均在一个数据子集内。

创建分支的伪代码 createBranch() 如下图所示:

检测数据集中每个子项是否属于同一类:

If so return 类标签:
Else寻找划分数据集的最好特征划分数据集创建分支节点for 每个划分的子集调用函数createBranch()并增加返回结果到分支节点中return 分支节点

         

         

        在历史数据中(14天)有9天打球,5天不打球,所以此时的熵应为:

        

        4个特征逐一分析,先从outlook特征开始:

        Outlook = sunny时,熵值为0.971

        Outlook = overcast时,熵值为0

        Outlook = rainy时,熵值为0.971

        加权计算

        根据数据统计,outlook取值分别为sunny,overcast,rainy的概率分别为:5/14, 4/14, 5/14

        熵值计算:5/14 * 0.971 + 4/14 * 0 + 5/14 * 0.971 = 0.693

        (gain(temperature)=0.029 gain(humidity)=0.152 gain(windy)=0.048)

        计算信息增益

        信息增益:系统的熵值从原始的0.940下降到了0.693,增益为0.247。

        同样的方式可以计算出其他特征的信息增益,那么我们选择最大的那个,相当于是遍历了一遍特征,找出来了大当家,然后再其余中继续通过信息增益找二当家!

        (找:信息增益大,熵值小)


五、信息增益率与gini系数

决策树算法

  • ID3
    • 信息增益 (有什么问题呢?)
    • 问题:ID当做特征,熵值为0,不适合解决稀疏特征,种类非常多的。
  • C4.5
    • 信息增益率/信息增益比 (解决ID3问题,考虑自身熵)
  • CART
    • 使用GINI系数来当做衡量标准
    • GINI系数
    • (和熵的衡量标准类似,计算方式不相同)
  • 连续值
    • 进行离散化。


六、决策树剪枝策略

决策树剪枝策略

  • 为什么要剪枝
  • 决策树过拟合风险很大,理论上可以完全分得开数据
  • (想象一下,如果树足够庞大,每个叶子节点不就一个数据了嘛)

预剪枝

  • 边建立决策树过程中进行剪枝的操作(更实用)。
  • 限制深度,叶子节点个数。叶子节点样本数,信息增益量等。
     

后剪枝

  • 当建立完决策树后来进行剪枝操作。 
  • 通过一定的衡量标准\large C_{a}(T)=C(T)+\alpha \left | T_{leaf} \right |
  •  \large C_{a}(T):损失
  • \large C(T):gini系数
  • \large T_{leaf}:叶子节点个数
  • (叶子节点越多,损失越大)


七、回归问题解决

        回归问题将方差作为衡量(评估)标准。看标签的平均方差。

        分类问题将熵值作为衡量标准。


部分参考于

【精选】机器学习笔记——决策树(Decision Tree)(1)_决策树节点_吃花椒的恩酱的博客-CSDN博客

【机器学习实战】3、决策树_机器学习实战决策树-CSDN博客

【精选】唐宇迪学习笔记11:决策树算法_决策树的训练和测试是_小丑呀~的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/123267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推理还是背诵?通过反事实任务探索语言模型的能力和局限性

推理还是背诵?通过反事实任务探索语言模型的能力和局限性 摘要1 引言2 反事实任务2.1 反事实理解检测 3 任务3.1 算术3.2 编程3.3 基本的句法推理3.4 带有一阶逻辑的自然语言推理3.5 空间推理3.6 绘图3.7 音乐3.8 国际象棋 4 结果5 分析5.1 反事实条件的“普遍性”5…

基于Qt 文本读写(QFile/QTextStream/QDataStream)实现

​ 在很多时候我们需要读写文本文件进行读写,比如写个 Mp3 音乐播放器需要读 Mp3 歌词里的文本,比如修改了一个 txt 文件后保存,就需要对这个文件进行读写操作。本章介绍简单的文本文件读写,内容精简,让大家了解文本读写的基本操作。 ## QFile 读写文本 QFile 类提供了读…

AIGC应用公司开始赚钱了,创始人来自中国,7个月实现100万美元ARR

图片来源:由无界AI生成 自 2022 年中以来,AIGC 赛道持续 1 年有余。然而,热闹归热闹,赚钱的公司一只手都能数得过来。奇葩如 Midjourney,硬是不靠 VC 输血凭着 11 人年做到 1 亿美元 ARR;幸运如 Jasper&…

ideaSSM在线商务管理系统VS开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 SSM 在线商务管理系统是一套完善的信息管理系统,结合SSM框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码 和数据库,系统主…

No175.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

WIN11新版画图问题解决

1 白色背景被连同删除的问题 解决方法:加层 将层调整为新建的层,在这个层下画图就行。 2 QQ截图无法直接放在画图上的问题 使用QQ截图的时候: 解决方法:使用windows自带的截图工具或者微信截图 步骤: 1. windows自带…

网络安全—小白自学

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高; 二、则是发展相对成熟…

docker-compose安装

1.安装docker-compose: yum install -y docker-compose 出现如下错误: 可以先执行: 添加docker-compose的yum仓库 yum install -y epel-release 附:

【Bug—eNSP】华为eNsp路由器设备启动一直是0解决方案!

问题描述 在上机实验时,打开ensp软件,添加AR设备时启动异常,最开始错误代码是40,最后通过重新安装,又出现了新的问题,启动AR设备一直是0,而且界面卡住。 解决方法 打开VirtualBox,将…

Redis文件事件模型

Redis是事件驱动的程序,并基于Reactor模式开发了自己的网络事件处理器,被称之为文件处理器(File Event Handler)。 文件处理器通过I/O多路复用程序来同时监听多个Socket,并根据Socket目前执行的任务来关联不同的事件处理器。当被监听的Socket…

剪辑中遮罩可分几种 剪辑遮罩视频怎么做

当你觉得剪辑特效很难制作的时候,不妨阅读一下本文,来了解遮罩的原理和用法。它是一种超级剪辑工具,可以制作出各种神奇的画面效果。在了解遮罩的基本原理后,就连初学者也能轻松地制作出令人惊艳的剪辑遮罩。有关剪辑中遮罩可分几…

vue3 code format bug

vue code format bug vue客户端代码格式化缺陷,为了方便阅读和维护,对代码格式化发现这个缺陷 vue.global.min.3.2.26.js var Vuefunction(r){"use strict";function e(e,t){const nObject.create(null);var re.split(",");for(le…

Spark新特性与核心概念

一、Sparkshuffle (1)Map和Reduce 在shuffle过程中,提供数据的称之为Map端(Shuffle Write),接受数据的称之为Redeuce端(Shuffle Read),在Spark的两个阶段中,总…

基于springboot,vue校园社团管理系统

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 系统分前后台,项目采用前后端分离 前端技术:vueelementUI 服务端技术:springbootmybatis-plus 本系…

Linux之系统编程

1.yum 1.yum list可以出现所有可下载的程序 辅助grep进行查找 2.yum install可以下载并安装 3.yum remove可以卸载程序 不同的商业操作系统内核都是一样的,主要是配套社区不一样。 开源组织,各大公司,既得利益者。 同上 基础软件源可以保证…

李沐——论文阅读——VIT(VIsionTransformer)

一、终极结论: 如果在足够多的数据上面去做预训练,那么,我们也可以不用 卷积神经网络,而是直接用 自然语言处理那边搬过来的 Transformer,也能够把视觉问题解决的很好 (tips:paperswithcode.co…

STM32F10xx 存储器和总线架构

一、系统架构 在小容量、中容量和大容量产品 中,主系统由以下部分构成: 四个驱动单元 : Cotex-M3内核、DCode总线(D-bus)和系统总线(S-bus) 通用DMA1和通用DMA2 四个被动单元 内部SRAM 内部…

UE5使用Dash插件实现程序化地形场景制作

目录 0 dash下载后激活 1 初步使用 2 导入bridge的资产路径 3 练习成果 4 参考链接 0 dash下载后激活 1 初步使用 Dash插件点击蓝色的A,可以使用。 通过输入不同提示命令,来激活不同的功能。 2 导入bridge的资产路径 这里需要注意是UAsserts…

NCCL后端

"NCCL" 代表 "NVIDIA Collective Communications Library","NVIDIA 集体通信库",它是一种由 NVIDIA 开发的用于高性能计算的通信库。NCCL 专门设计用于加速 GPU 群集之间的通信,以便在并行计算和深度学习等领域…

stable-diffusion-webui环境部署

stable-diffusion-webui环境部署 1. 环境创建2. 安装依赖库3.下载底模4. 获取lora参数文件5.运行代码6. 报错信息报错1报错2 1. 环境创建 创建虚拟环境 conda create -n env_stable python3.10.0进入虚拟环境 conda activate env_stableclone源码 git clone https://github.com…