机器学习算法系列(四)-- 决策树

news2024/12/23 18:15:06

机器学习算法之–决策树

最经典的机器学习模型之一,成树型结构,决策树的目的是为了产生一颗泛化能力强,处理未见实例能力强的树,通过特征判断不断分类,基本流程遵循“分而治之”的递归分类策略。

一、算法原理

1.1、特征选择

关键就是选取对训练数据具有分类能力的特征,可提高决策树学习的效率。通常特征选择的准则是信息增益或信息增益比。

1.2、信息增益

  • 熵:表示随机变量不确定性的度量;熵越大,随机变量的不确定性就越大。
  • 信息熵:出自香浓的《通信数学原理》,是度量样本集合纯度最常用的一种指标

假定当前样本集合X中第k类样本所占比例: p k ( k = 1 , 2 , . . . , ∣ y ∣ ) p_k(k=1,2,...,|y|) pk(k=1,2,...,y),信息熵(Information Entropy)定义为:
E n t ( D ) = − ∑ k = 1 ∣ y ∣ p k l o g 2 p k Ent(D)=-\sum_{k=1}^{|y|}p_klog_2p_k Ent(D)=k=1ypklog2pk

  • 熵Ent(D)随概率p(x)变化的曲线如下图所示
    在这里插入图片描述

Ent(D)越小,D纯度越高;熵越大,随机变量的不确定性就越大。
当概率越接近0或1时,信息熵值越小,不确定性越小,数据越纯

  • 条件熵:H(Y|X),表示在已知随机变量X的条件下随机变量Y的不确定性。
  • 信息增益:表示得知特征X的信息而使得类Y的信息的不确定性减少的程度

属性a有V个不同取值 { a 1 , . . . . . . , a V } \{a^1,......,a^V \} {a1,......,aV},若使用a对样本集D进行划分,则会产生V个分支节点, D v D^v Dv表示数据集在属性a上取值为 a V a^V aV的样本,根据信息熵公式可计算出该信息熵,再考虑到不同分支包含的样本数不同,给分支节点赋予权重 ∣ D v ∣ ∣ D ∣ \frac{|D^v|}{|D|} DDv,也就是样本数越多的分支结点影响最大,于是便可计算出使用属性a进行划分所获得的“信息增益”(information gain)
G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D, a)=Ent(D)-\sum_{v=1}^{V}\frac{|D^v|}{|D|}Ent(D^v) Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)

  • |D|表示样本容量
  • 其中, ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) \sum_{v=1}^{V}\frac{|D^v|}{|D|}Ent(D^v) v=1VDDvEnt(Dv)称为:条件熵 H(D|A),表示特征A对训练数据集D的条件熵
  • 一般而言,信息增益越大,意味着使用属性a进行划分所获得的“纯度提升”越大,因此可使用信息增益来进行决策划分的属性选择依据(ID3算法就是使用该原理)
  • 信息增益比:以信息增益作为划分训练数据集的特征,存在偏向于选取取值较多的特征的问题,使得信息增益比可以对这一问题进行校正,这也是特征选择的另一标准

g R ( D , A ) = G a i n ( D , a ) H a ( D ) g_R(D, A)=\frac{Gain(D, a)}{H_a(D)} gR(D,A)=Ha(D)Gain(D,a)
其中Gain(D,a)表示特征信息增益; H a ( D ) H_a(D) Ha(D)表示训练数据集D关于特征a的值的熵,且 H a ( D ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ H_a(D)=-\sum_{v=1}^{V}\frac{|D^v|}{|D|}log_2\frac{|D_i|}{|D|} HaD=v=1VDDvlog2DDi,且概率 ∣ D i ∣ ∣ D ∣ = p i \frac{|D_i|}{|D|}=p_i DDi=pi

  • 特征选择:特征选择在于选取对训练数据具有分类能力的特征,可以提高决策树学习的效率。通常特征选择的准则是信息增益或信息增益比。

二、决策树的创建(ID3算法)

叶结点对应一个决策结果,其余分支节点对应一个属性测试

  • 信息熵计算:①计算数据集DataSet划分前的信息熵;②遍历所有未作为划分条件的特征,分别计算根据每特征划分的信息熵
  • 特征选择:选择信息增益最大的特征,使用其作为DS划分节点来划分DS
  • 递归:递归处理被划分后的所有子数据集DS,从未被选择的特征中继续进行划分
  • 终止:①直到所有特征都用完,终止决策;②或者当划分后的信息增益足够小,也停止决策

算法模拟
输入:训练数据集D,特征集A,阈值 ϵ \epsilon ϵ
输出:决策树T

  • 若D中所有实例属于同一类 C k C_k Ck,则T为单结点树,并将类 C k C_k Ck作为该结点的类标记并返回T
  • 若A=空集,则T为单结点树,并将D中实例数最大的类 C k C_k Ck作为该结点类标记并返回T
  • 否则,计算A中各特征对D的信息增益,选择信息增益最大的特征 A g A_g Ag
  • 如果 A g A_g Ag信息增益小于某阈值 ϵ \epsilon ϵ,则置T为单结点树,并将D中实例数最大的类 C k C_k Ck作为该结点类标记,并返回T
  • 否则,对于 A g A_g Ag每一个可能值 a i a_i ai,依 A g = a i A_g=a_i Ag=ai将D分割为若干非空子集 D i D_i Di,将 D i D_i Di中实例数最大的类作为标记,构建子结点,由节点及其子节点构成树T,返回T
  • 对第i个子结点,以 D i D_i Di为训练集,以 A − A g A-{A_g} AAg为特征集,递归地调用前5步,得到子树 T i T_i Ti,返回 T i T_i Ti

ID3算法相当于用极大似然法进行概率模型的选择。

注意:

  • 特征是连续值,将其离散化(划分区间)
  • 避免极端分类:加上正则项,整体再作为最后信息熵的值;或使用信息增益比作为特征选择标准(C4.5算法,与ID3相比不同之处在于根据信息增益比来作为划分依据)。

三、剪枝算法

在决策树学习中将以生成的数进行简化的过程。剪枝从已生成的树上裁掉一些子树或叶结点,是为了解决过拟合问题

前剪枝:也叫预剪枝,构造决策树的过程中无法进一步降低信息熵时,停止建立该分支;(设定一个阈值,即使减小量小于该阈值,也停止建立分值)

后剪枝(可由一种动态规划算法来实现):决策树建立完成之后再进行剪枝操作,是比较普遍使用的方法,根据“大多数原则”;

  • 对于拥有同样父节点的一组节点进行检查、判断。
  • 将其合并之后,信息熵的增量是否小于某一阈值?
  • 小于:合并结点,用叶结点中类别最多的那个作为新结点的类别
  • 例:降低错误率剪枝法(简化版)

四、集合算法

自助聚合算法Bagging(Bootstrap Aggregating):有放回采样。

原理:从m个样本中采样n次,组成包含n个样本的训练集,训练模型,重复B次,得到B个模型。如果是分类问题,由B个模型得到的结果投票决定(少数服从多数);若用于回归问题,取B个模型所的结果的平均值作为最终结果。

正向激励算法boosting:

原理:初始化时,m个训练样本的数据集,每个样本分配一个初始权重,使用带权数据集训练模型,得到模型后,增加预测错误样本权重,采用新的带权数据集训练新模型,重复B次,得到B个模型。

随机森林:每次训练时,随机选取一个特征的子集进行训练

  • 两个关键参数:构建的决策树个数t,单棵树特征数f

随机森林中单棵决策树的构建:

  • 有放回地采样m次
  • 从n个特征中无放回采样f次,构成一个新的数据集
  • 新数据集上构建决策树
  • 重复上述过程t次,构建t棵决策树

随机森林分类结果

  • 数字型:平均值
  • 分类型:少数服从多数

为什么不选全部特征训练:为了解决过拟合问题,强关联,使得每个特征值都保持少量的贡献

以上就是关于决策树的分享,若有不妥之处,欢迎各路大佬不吝赐教~

喜欢的伙伴点个赞关注一下吧~

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

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

相关文章

《C++程序设计原理与实践》笔记 第17章 向量和自由空间

本章和后面四章介绍C标准库的容器和算法部分(通常称为STL)。本章和后面两张的重点是最常用、最有用的STL容器——向量的设计和实现。 17.1 引言 C标准库中最有用的容器是vector。vector提供了给定类型的元素序列。标准库vector是一个方便、灵活、&…

Redis从零上手

文章目录 NoSQL概述互联网发展史单机MySQL的年代(90年代)缓存时代: Memcached MySQL 垂直拆分(读写分离)分库分表 水平拆分(MySQL集群)如今最近的年代 为什么要用NoSQL什么是NoSQLNoSQL特点阿里巴巴演进分析阿里巴巴中文站架构发展历程简单分析 NoSQL…

MySQL架构设计其实很简单

一、概述 我们很多互联网项目首选的数据库就是MySql5.7,因为免费,支持数据库主从复制,读写分离,且语法简单,容易上手,虽然对sql的函数、触发器、存储过程有一定的了解,也能说出一些优化sql语句…

基于SpringBoot+Vue的前后端分离的博客管理系统

菜单 首页写文章内容管理 博客管理相册管理归档登录、注册(项目整合了shiro+jwt+redis,用户未登录不能发布博客、内容管理、相册、归档等功能) 文章​​​​​​​末尾赋前后端代码以及数据库文件链接!!! 1 首页 首页包括菜单、博客、登录用户、推荐博客排行、博客分类…

Autosar-Interface接口

文章目录 一、Autosar接口1、AUTOSAR Interface2、Standardized Interface3、Standardized AUTOSAR Interface二、AUTOSAR接口的通用规则三、示例-存储四、总结一、Autosar接口 在Autosar里规定了三类接口,分别是AUTOSAR接口,标准AUTOSAR接口和标准接口。 下图将所有的接口…

【Linux】I/O复用

概述 I/O复用使得程序能同时监听多个文件描述符,看文件上是否有用户感兴趣的事件发生,提高程序性能。 使用I/O复用技术的情况: 客户端同时处理多个套接字 客户端同时处理用户输入和网络连接 同时监听多个端口 同时处理TCP和UDP请求 TCP服务器…

【JavaEE】文件操作(InputStream、OutputStream)

博主简介:想进大厂的打工人博主主页:xyk:所属专栏: JavaEE初阶 在Java中总会用到文件操作,比如从盘符读写文件,按字节和字符进行数据读写,那么你真的认识什么是文件路径吗?平时谈到的“文件”,…

mybatis实现CRUD详解(使用mapper映射文件实现增删改查)

mybatis实现CRUD详解(使用mapper映射文件实现增删改查) 创建maven项目&#xff1a;项目结构如图所示 准备数据库表&#xff1a; 准备pom.xml所需的依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.…

快速弄懂RPC

快速弄懂RPC 常见的远程通信方式远程调用RPC协议RPC的运用场景和优势 常见的远程通信方式 基于REST架构的HTTP协议以及基于RPC协议的RPC框架。 远程调用 是指跨进程的功能调用。 跨进程可以理解为一个计算机节点的多个进程或者多个计算机节点的多个进程。 RPC协议 远程过…

C++string类

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容讲解了C中的string类以及类内的一些常用函数 Cstring类 文章…

k8s_3节点集群部署

背景 近期想在自己电脑上部署一套3节点K8s 作为自己平时的学习测试环境。 本来想看一下有没有比较便捷的部署方式如&#xff1a; rancherdesktop: https://docs.rancherdesktop.io/zh/next/getting-started/installation/ sealos: https://www.sealos.io/docs/getting-started…

【超算/先进计算学习】日报3

目录 今日已完成任务列表遇到的问题及解决方案任务完成详细笔记作业管理系统 slurm作业管理系统及常用用户命令节点状态查询/作业提交命令作业队列查询/作业取消命令任务练习 调试器 GDB实时调试core 文件调试 对自己的表现是否满意简述下次计划其他反馈 今日已完成任务列表 4-…

Spring的体系结构

Spring的体系结构 一、Spring简介1. Spring介绍1.1 为什么要学1.2 学什么1.3 怎么学 2. 初识Spring2.1 Spring家族2.2 Spring发展史 3. Spring体系结构3.1 Spring Framework系统架构图3.2 Spring Framework课程学习路线 4. Spring核心概念4.1 目前我们代码存在的问题4.2 核心概…

『Linux从入门到精通』第 ⑫ 期 -深入了解冯诺依曼体系结构与操作系统(Operator System)

文章目录 &#x1f490;专栏导读&#x1f490;文章导读&#x1f337;计算机之父——冯诺依曼&#x1f337;冯诺依曼体系结构&#x1f33a;木桶效应 &#x1f337;操作系统(Operator System)&#x1f33a;如何理解操作系统&#x1f33a;系统调用和库函数概念 &#x1f490;专栏导…

论文结构商讨

论文查重 pass软件 提出问题 1、由于选取的算法太多了&#xff0c;不知道是简单介绍&#xff0c;还是深入介绍 希望找到一个具体的模板 2、数据库要是用一个就在前面介绍&#xff0c;用不一样的就在每章里面分别介绍 4、数据集介绍放在那个具体位置&#xff1f; 如果可以画出…

蓝精灵事件来袭: 深受喜爱的蓝色角色来 Web3 啦!

起源于漫画并成为国际知名的卡通和电影明星的蓝色x小家伙正在进入 NFT 舞台。 作者&#xff1a;Coindesk——Toby Bochan 因漫画、卡通片和电影而闻名的热门动画系列“蓝精灵”正在展开新的冒险&#xff0c;由蓝精灵协会推出一系列新的非同质化通证&#xff08;NFT&#xff09;…

汽车ECU的内部构成与功能模块

摘要&#xff1a; ECU作为与外部通信的接口&#xff0c;为了通过微控制器运算实现符合实际状态的最佳控制&#xff0c;需要检测外部状态的输入手段及实际控制驱动的输出手段。 1. 常规功能模块 ① 电源&#xff1a;向ECU内的各模块提供稳定的电压&#xff08;5V、3V等&#xf…

sequelize + Nodejs + MySQL 的简单用法

How to Use Sequelize ORM in NodeJS - Tutorial 1 Sequlize 简介 Sequelize 是最流行的可以与 Nodejs 一起使用的一种关系数据库 ORM (Object-relational mapping 对象关系映射)&#xff0c;Mongoose 是 MongoDB 的 ORM. Sequelize 的作用&#xff0c;简单地说&#xff0c;就…

Netty编解码器,Netty自定义编解码器解决粘包拆包问题,Netty编解码器的执行过程详解

文章目录 一、编解码器概述1、编解码器概述2、编码器类关系图3、解码器类关系图 二、以编解码器为例理解入站出站1、Server端2、Client端3、编解码器3、执行查看结果4、注意事项 三、Netty其他内置编解码器1、ReplayingDecoder2、其他编码器3、内置编解码器处理粘包拆包问题 四…

[LeetCode复盘] LCCUP‘23春季赛 20230422

[LeetCode复盘] LCCUP23春季赛 20230422 一、总结二、 1. 补给马车1. 题目描述2. 思路分析3. 代码实现 三、2. 探险营地1. 题目描述2. 思路分析3. 代码实现 四、 3. 最强祝福力场1. 题目描述2. 思路分析3. 代码实现 五、 4. 传送卷轴1. 题目描述2. 思路分析3. 代码实现 六、 5…