当前位置: 首页 > news >正文

机器学习 | 决策树算法

一、决策树算法概述


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博客

相关文章:

机器学习 | 决策树算法

一、决策树算法概述 1、树模型 决策树:从根节点开始一步步走到叶子节点(决策)。所有的数据最终都会落到叶子节点,既可以做分类也可以做回归。 在分类问题中,表示基于特征对实例进行分类的过程,可以认为是if-then的集合&#xff0…...

javascript中各种风骚的代码

1.判断数值符号是否相同 function numericSymbolsIsEqual(x: number, y: number): boolean {return (x ^ y) > 0}console.log(numericSymbolsIsEqual(1, 1))console.log(numericSymbolsIsEqual(-1, 1))console.log(numericSymbolsIsEqual(1, -1))console.log(numericSymbols…...

el-tree横向纵向滚动条

el-tree未展开时样式 el-tree展开时样式 给容器一个高度&#xff0c;然后样式加上overflow: scroll&#xff0c;这样纵向滚动条就出来了。 <el-card style"height: 528px;overflow: scroll"><el-inputplaceholder"输入关键字进行过滤"v-model&…...

STM32G030F6P6 芯片实验 (一)

STM32G030F6P6 芯片实验 (一) 淘宝搞了几片, 没试过 G系列, 试试感觉. 先搞片小系统版: 套 STM32F103C8T6小系统板格式. 原理图: (1) Ref 有点跳, 从 STM32F103C8T6 系统板改的, 没重编号. (2) Type-C 纯给电, 砍了 16pin的, 直接换 6pin的。 (3) 测试LED放 B2。 (4) 测试底…...

Wpf 使用 Prism 实战开发Day01

一.开发环境准备 1. VisualStudio 2022 2. .NET SDK 7.0 3. Prism 版本 8.1.97 以上环境&#xff0c;如有新的版本&#xff0c;可自行选择安装新的版本为主 二.创建Wpf项目 1.项目的名称:MyToDo 项目名称:这里只是记录学习&#xff0c;所以随便命名都无所谓,只要觉得合理就…...

6G关键新兴技术- 智能超表面(RIS)技术演进

摘要&#xff1a; 根据欧盟5G公私联盟协会定义&#xff0c;可重构智慧表面技术是由能够任意塑造电磁波面的材料组成&#xff0c;几乎是被动设备&#xff0c;可以适应或改变发射器和接收器之间的无线电信号。 一、产品定义及范围 根据欧盟5G公私联盟协会(5G Infrastructure P…...

【redhat9.2】搭建Discuz-X3.5网站

步骤 1.配置软件仓库 2.安装对应的软件 httpd php* mariadb* 3.启动服务 httpd mariadb 4.配置数据库 创建数据库 修改root密码 数据库的 5.传源码包&#xff08;Discuz-X3.5&#xff09; 解压 6.web页面初始化 关闭防火墙 允许http服务通过 修改权限 实…...

算法篇 : 并查集

介绍 英文名&#xff1a;union find set 作用&#xff1a;合并集合&#xff0c;查询集合 合并&#xff1a;将有直接关系的顶点放在一个集合里面 查找&#xff1a;查询某个顶点所属的集合 集合的标志&#xff1a;用祖先点的标号作为每个集合的标识 案例 如果说将下图的集合2合并…...

AM@微积分基本定理@微积分第二基本定理

文章目录 abstract微积分第二基本定理微积分基本公式公式书写例 结合不定积分的方法求定积分定积分换元法证明 定积分换元公式逆用例 和不定积分第二类换元法的差别定积分分部积分法例 abstract 微积分第一基本定理告诉我们,总是能够通过积分法构造(表达)一个连续函数的原函数…...

goland常用快捷键

移动光标 控制光标的移动&#xff1a;fn上下左右 移至当前页的页头&#xff1a;ctrlPgUp 移至并选中光标到当前页头&#xff1a;ctrlshiftPgUp 移至当前页的页尾&#xff1a;ctrlPgDn 移至并选中当前光标到当前页尾&#xff1a;ctrlshiftPgDn 返回到当前的光标处&#xf…...

CSDN写文章时常见问题及技巧

CSDN写文章时常见问题及技巧 1.有序待续、更新中 1.有序 过程&#xff1a; 写 1.空格 &#xff0c;注意“.”后加个空格就可以生成序号&#xff0c;随心所欲编辑了 待续、更新中 ————————————————————— 以上就是今日博客的全部内容了 创作不易,若对您有…...

JVM虚拟机详解

目录 01JVM由哪些部分组成/运行流程 什么是程序计数器 详细介绍堆 介绍方法区&#xff08;Method Area&#xff09; 直接内存 虚拟机栈(Java Virtual machine Stacks) 垃圾回收是否涉及栈内存 栈内存分配越大越好吗 方法内的局部变量是否线程安全 什么情况下会导致栈…...

Go 怎么操作 OSS 阿里云对象存储

1 介绍 在项目开发中&#xff0c;我们经常会使用对象存储&#xff0c;比如 Amazon 的 S3&#xff0c;腾讯云的 COS&#xff0c;阿里云的 OSS 等。本文我们以阿里云 OSS 为例&#xff0c;介绍怎么使用 Go 操作对象存储。 阿里云 OSS 提供了 REST Api 和 OSS Go SDK&#xff0…...

vue3 Suspense组件

在 Vue 3 中&#xff0c;<Suspense> 组件用于处理异步组件加载时的等待状态和错误处理。它允许你在加载异步组件时显示一个自定义的加载指示器&#xff0c;以及在加载失败时显示错误信息。以下是一个详细的 <Suspense> 组件的使用示例&#xff1a; 首先&#xff0…...

NlogPrismWPF

文章目录 Nlog&Prism&WPF日志模块实现原理添加配置注入服务应用测试其他模块怎么调用&#xff1f; Nlog&Prism&WPF 日志模块 介绍了为WPF框架Prism注册Nlog日志服务的方法 实现原理 无论是在WPF或者ASP.NET Core当中, 都可以使用ServiceCollection来做到着…...

文件上传漏洞(2), 文件上传实战绕过思路, 基础篇

文件上传漏洞实战思路(基础) 准备一句话木马文件 mm.php 一, 前端绕过 p1 浏览器禁用js先把mm.php后缀名修改为mm.jpg, 点击提交后, 用 burp 截取请求, 将数据包中的文件名修改回mm.php再提交. 二, 类型MIME绕过 p2 使用 burp 修改 Content-Type: image/jpeg 三, 黑名单绕…...

论文阅读 - Hidden messages: mapping nations’ media campaigns

论文链接&#xff1a; https://link.springer.com/content/pdf/10.1007/s10588-023-09382-7.pdf 目录 1 Introduction 2 The influence model 2.1 The influence‑model library 3 Data 4 Methodology 4.1 Constructing observations 4.2 Learning the state‑transiti…...

[AutoSAR系列] 1.3 AutoSar 架构

依AutoSAR及经验辛苦整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《深入浅出AutoSAR》 1. 整体架构 ​ 图片来源&#xff1a; AutoSar 官网 从官往图中可以看出autosar作为汽车ECU软件架构&#xff0c;是通过分层来实现软硬件隔离。就像大多数操作系统一样&#xff…...

迁移学习 - 微调

什么是与训练和微调&#xff1f; 你需要搭建一个网络模型来完成一个特定的图像分类的任务。首先&#xff0c;你需要随机初始化参数&#xff0c;然后开始训练网络&#xff0c;不断调整参数&#xff0c;直到网络的损失越来越小。在训练的过程中&#xff0c;一开始初始化的参数会…...

09 用户态跟踪:如何使用eBPF排查应用程序?

09 用户态跟踪&#xff1a;如何使用eBPF排查应用程序&#xff1f; sudo bpftrace -e usdt:/usr/bin/python3:function__entry { printf("%s:%d %s\n", str(arg0), arg2, str(arg1))} # -*- coding: UTF-8 -*- import socket from socket import SOL_SOCKET, SO_R…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...

表单设计器拖拽对象时添加属性

背景&#xff1a;因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...