决策树(1)

原理

基础概念

决策树属于判别模型。

决策树算法属于监督学习方法。

决策树是一种树状结构,通过做出一系列决策(选择)来对数据进行划分,这类似于针对一系列问题进行选择。

决策树的决策过程就是从根节点开始,测试待分类项中对应的特征属性,并按照其值选择输出分支,直到叶子节点,将叶子节点的存放的类别作为决策结果。

决策树算法是一种归纳分类算法,它通过对训练集的学习,挖掘出有用的规则,用于对新数据进行预测。

决策树归纳的基本算法是贪心算法,自顶向下来构建决策树。

在决策树的生成过程中,分割方法即属性选择的度量是关键。

08c0588bb7c14b4794c1c7f8e069cf86.png 

决策树分类 

分类树:分类树的目标变量是确定的,分类的。分类树被用来去预测不同的类别。图1就是一个简单的分类树的例子,我们的目标预测为是否选择作为男朋友。分类树不局限于二元分类,多元分类也是可行的。

回归树:回归树就是当目标变量是数值的时候。举一个例子,比如你想预测一个房子的卖价,这就是一个连续的数值变量。 

决策树的特点

优点

推理过程容易理解,计算简单,可解释性强。

比较适合处理有缺失属性的样本。

可自动忽略目标变量没有贡献的属性变量,也为判断属性变量的重要性,减少变量的数目提供参考。

缺点

容易造成过拟合,需要采用剪枝操作。

忽略了数据之间的相关性。

对于各类别样本数量不一致的数据,信息增益会偏向于那些更多数值的特征。

决策树的三种基本类型 

e07e92ce711342b8b1b844eb185aeef7.png 

ID3算法

基础概念

ID3 算法是以信息论为基础,以信息增益为衡量标准,从而实现对数据的归纳分类。

在信息论中,期望信息越小(熵),那么信息增益就越大,从而纯度就越高。ID3算法的核心思想就是以信息增益来度量属性的选择,选择分裂后信息增益最大的属性进行分裂。该算法采用自顶向下的贪婪搜索遍历可能的决策空间; 在信息增益中,重要性的衡量标准就是看特征能够为分类系统带来多少信息,带来的信息越多,该特征越重要。

ID3算法的做法是每次选取当前最佳的特征来分割数据,并按照该特征的所有可能取值来切分。

算法步骤 

其大致步骤为:

1.初始化特征集合和数据集合。

2.计算数据集合信息熵和所有特征的条件熵,选择信息增益最大的特征作为当前决策节点。

3.更新数据集合和特征集合(删除上一步使用的特征,并按照特征值来划分不同分支的数据集合)。

4.重复 2,3 两步,若子集值包含单一特征,则为分支叶子节点。

信息熵

ID3算法使用信息增益为准则来选择划分属性,"信息熵"是度量样本结合纯度的常用指标,集合信息的度量方式称为香农熵或者简称为熵,这个名字来源于信息论之父克劳德·香农。熵定义为信息的期望值。在信息论与概率统计中,熵是表示随机变量不确定性的度量。在明确熵的概念之前,我们需要知道信息的定义,如果待分类的事物可能划分在多个分类之中,则符号的信息定义为 :eq?l%28x_%7B_i%7B%7D%7D%29%3D-%5Clog_%7B2%7Dp%28x_%7B_i%7B%7D%7D%29。其中eq?p%28x_%7Bi_%7B%7D%7D%29是选择该分类的概率。

通过上式,我们可以得到所有类别的信息。香农用信息熵的概念来描述信息源的不确定程度。信息熵越大,不纯度越高,即不确定性越大;信息熵越小,纯度越高。

信息熵的公式如下:eq?H%28X%29%3D-%20%5Csum_%7Bi%3D1%7D%5E%7Bn%7DP%28x_%7Bi_%7B%7D%7D%29%5Clog%20P%28x_%7Bi_%7B%7D%7D%29。需要注意的是:熵只依赖于X的分布,而与X的取值无关。在分类任务中,eq?P%28x_%7Bi_%7B%7D%7D%29表示分类的类型所占的比例。

进一步理解,根据公式eq?H%28X%29%3D-%20%5Csum_%7Bi%3D1%7D%5E%7Bn%7DP%28x_%7Bi_%7B%7D%7D%29%5Clog%20P%28x_%7Bi_%7B%7D%7D%29,假如是 2 分类问题,当 A 类和 B 类各占 50% 的时候,可算得结果为1。当只有 A 类,或只有 B 类的时候,结果为0。所以当信息熵最大为1的时候,是分类效果最差的状态,当它最小为0的时候,是完全分类的状态。

f4eab5473ae040f8bf7d280d52ab5c9d.png

条件熵

原概念

H(Y|X)表示在已知随机变量 X 的条件下随机变量 Y 的不确定性。

条件熵 H(Y|X)定义为 X 给定条件下 Y 的条件概率分布的熵对 X 的数学期望:eq?H%28Y%7CX%29%3D%5Csum_%7Bi%3D1%7D%5E%7Bn%7Dp_%7Bi%7DH%28Y%7CX%3Dx_%7Bi%7D%29  eq?p_%7Bi%7D%3DP%28X%3Dx_%7Bi%7D%29%2Ci%3D1%2C2%2C...%2Cn

在ID3算法中的条件熵

eq?H%28D%7CA%29%3D%5Csum_%7Bi%3D1%7D%5E%7Bn%7D%5Cfrac%7B%7CD_%7Bi%7D%7C%7D%7B%7CD%7C%7DH%28D_%7Bi%7D%29   eq?H%28D_%7Bi%7D%29%3D%5Csum_%7Bk%3D1%7D%5E%7BK%7D%5Cfrac%7B%7CC_%7Bk%7D%7C%7D%7B%7CD_%7Bi%7D%7C%7D%5Clog_%7B2%7D%5Cfrac%7B%7CC_%7Bk%7D%7C%7D%7B%7CD_%7Bi%7D%7C%7D 

A是特征,i是特征取值, eq?H%28D_%7Bi%7D%29是为当取第i个特征时分类的信息熵 

391c0f0bd793455e808170f90c079a97.png

信息增益

信息熵:表示随机变量的不确定性。 条件熵:在一个条件下,随机变量的不确定性。信息增益代表了在一个条件下,信息复杂度(不确定性)减少的程度。信息增益是相对于特征而言的。

信息增益:信息熵 - 条件熵。表示在一个条件下,信息不确定性减少的程度。 如果选择一个特征后,信息增益最大(信息不确定性减少的程度最大),那么我们就选取这个特征。即表示由于该特征使得对数据集的分类的不确定性减少的程度。

信息增益偏向取值较多的特征。即当特征的取值较多时,根据此特征划分更容易得到纯度更高的子集,因此划分之后的熵更低,由于划分前的熵是一定的,因此信息增益更大,因此信息增益偏向取值较多的特征。

信息增益越大,表示使用该属性划分样本集D的效果越好,因此ID3算法在递归过程中,每次选择最大信息增益的属性作为当前的划分属性。

ID3算法缺点

  1. 缺点 ID3 没有剪枝策略,容易过拟合;

  2. 信息增益准则对可取值数目较多的特征有所偏好,因为更多取值情况代表了树要分裂非常多的叶子结点,并且每个叶子结点上的样本数很少,越小的数据自己其"纯度"显然越容易高,导致了信息增益会很大;

  3. 只能用于处理离散分布的特征并且只能处理分类问题;

  4. 没有考虑缺失值;

  5. 训练决策树通常是很耗时间的,因为熵计算比较耗时。

 

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

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

相关文章

SpringBoot中的对象

BeanFactory 是 Spring 框架的核心接口之一,用于管理和创建 Bean。它提供了一种机制,通过配置文件或注解来定义和实例化 Java 对象,并将这些对象存储在一个容器中,以便在应用程序的其他部分进行使用。 主要功能 管理 Bean 的生…

UNION 联合查询

1.UNION ALL联合查询 同样为了演示方便,先向 teacher 表插入多条测试数据: INSERT INTO teacher (name,age,id_number,email) VALUES (姓名一,17,42011720200604077X,NULL), (姓名二,18,42011720200604099X,123qq.com), (姓名三,19,42011720200604020X…

007、链表的回文结构

0、题目描述 链表回文结构 1、法1 一个复杂的问题可以拆解成几个简单的问题,找中间节点和逆置链表(翻转链表)之前都做过。 class PalindromeList { public://1、找中间节点ListNode* FindMid(ListNode* A){if (A nullptr || A->next …

ConcurrentHashMap 存储机制(源码解析)

源码系列开更啦 🥰🥰 目录 1. 初始化 1.1. 无参 1.2. 带参 2. 存储操作 2.1. 计算下标 2.2. 初始化数组 2.3. 将数据插入到数组中 2.4. 协作扩容 2.5. 将数据插入到链表 2.6. 将数据插入到红黑树 2.7. 链表树化操作 1. 初始化 1.1. 无参 如…

【ROS2】订阅手柄数据,发布运动命令

1、相关消息 sensor_msgs::msg::Joy:用来描述手柄控制器数据 geometry_msgs::msg::Twist :用来描述物体运动时的线速度和角速度 参见博客: 【ROS2】geometry_msgs::msg::Twist和sensor_msgs::msg::Joy 2、订阅和发布 2.1 定义、创建订阅者和发布者 订阅手柄的按键、摇杆…

流程图 LogicFlow

流程图 LogicFlow 官方文档&#xff1a;https://site.logic-flow.cn/tutorial/get-started <script setup> import { onMounted, ref } from vue import { forEach, map, has } from lodash-es import LogicFlow, { ElementState, LogicFlowUtil } from logicflow/core …

前端学习---(2)CSS基础

CSS 用来干什么&#xff1f; CSS 是用来指定文档如何展示给用户的一门语言——如网页的样式、布局、等等。 css语法: 选择器{ 属性名: 属性值; 属性名: 属性值; } h1 {color: red;font-size: 5em; }h1: 选择器 color: 属性 冒号之前是属性&#xff0c;冒号之后是值。 font-size…

Jmeter监控服务器性能

目录 ServerAgent 安装 打开Jmeter ServerAgent 在Jmeter上监控服务器的性能比如CPU&#xff0c;内存等我们需要用到ServerAgent&#xff0c;这里可以下载我分享 ServerAgent-2.2.3.zip 链接: https://pan.baidu.com/s/1oZKsJGnrZx3iyt15DP1IYA?pwdedhs 提取码: edhs 安装…

[云] Project Analysis

项目要求分析&#xff1a; 开放性选题&#xff1a; 主题范围&#xff1a;任何与云计算系统相关的主题。项目类型&#xff1a;可以是技术、商业或研究项目。团队规模&#xff1a;最多可组成三人小组。 示例主题&#xff1a; 分析公共云数据&#xff1a;例如&#xff0c;AWS公共数…

System.Text.Json类库进行json转化时ValueKind:Object问题

当你的使用的Json库是System.Text.Json&#xff0c;而不是Newtonsoft.Json库的时候&#xff0c;你可能遇到以下问题及其解决办法。通常的解决办法是进行一些对应的配置。此外就需要根据情况使用自定义转换器实现你的需求。以下是通常遇到的使用自定义转换器解决的例子: Q1.当遇…

FPGA图像处理之均值滤波

文章目录 一、什么是图像滤波&#xff1f;1.1 噪声类型1.2 滤波类型 二、均值滤波原理2.1 3*3窗口滑动过程2.2 图像扩展 三、Matlab实现均值滤波四、FPGA实现均值滤波4.1 生成 3*3 矩阵4.2 仿真3*3矩阵4.3 计算均值4.4 仿真均值滤波 一、什么是图像滤波&#xff1f; 图像滤波是…

调整Android板子的分辨率

Android板子通过HDMI连接外屏发现很模糊&#xff0c;先用以下命令查询下板子的分辨率&#xff1a; adb shell wm size 发现板子目前的分辨率是&#xff1a; Physical size: 800x480 调整分辨率命令行&#xff1a; adb shell wm size 1920x1080 注意&#xff1a;系统是roo…

得物App3D创新应用引关注,世界设计之都大会启幕

近日&#xff0c;2024世界设计之都大会&#xff08;WDCC&#xff09;在上海盛大启幕。此次大会以“设计无界 新质生长”为主题&#xff0c;汇聚了全球设计领域的精英与前沿成果&#xff0c;展现了设计作为新质生产力的巨大潜力。主场展览占据了整整3个楼面&#xff0c;总面积达…

Python字符串格式化方法format()

字符串.format(变量1, 变量2, ...)使用大括号{}作为占位符,格式化的两种方法&#xff0c;参数序号法和关键字法&#xff0c;即在大括号中填入关键字还是序号&#xff0c;代码举例 # 参数序号法 print("姓名{0}&#xff0c;班级{1}&#xff0c;年龄{2}".format(张三,…

C#学习笔记(十)

C#学习笔记&#xff08;十&#xff09; 第七章 对象的构造方法与实例方法一、对象的构造方法1. 构造方法初识2. 构造方法的创建3. this关键字4. 构造方法的规范和重载4.1 构造方法的规范 5. 对象初始化器5.1 对象初始化器和构造方法的区别 二、对象的实例方法1. 简单应用2.实例…

代码随想录算法训练营第二天(补) | 滑动窗口、模拟、前缀和

目录 3.4 长度最小的子数组 3.5螺旋矩阵II 3.6 区间和 文章讲解&#xff1a;[58. 区间和 | 代码随想录 3.4 长度最小的子数组 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;拿下滑动窗口&#xff…

Linux历史

Linux 于 1991 年由芬兰学生 Linus Torvalds 作为个人项目开始&#xff0c;旨在创建一个新的免费操作系统内核。在其历史发展中&#xff0c;Linux 内核经历了持续的增长。自 1991 年首次发布源代码以来&#xff0c;Linux 内核从少量的 C 语言文件&#xff0c;且受限于禁止商业发…

机器视觉基础系列四—简单了解背景建模算法

机器视觉基础系列四—简单了解背景建模算法 首先我们应该了解的是背景建模的定义是什么&#xff1f;又有哪些应用场景呢&#xff1f; 背景建模是指通过分析视频序列中的像素值变化情况&#xff0c;从中提取出静态背景部分&#xff0c;并将其用于目标检测、运动跟踪等计算机视觉…

高效地理位置数据处理:Redis Geospatial Indexes详解

在现代应用中&#xff0c;地理位置数据处理变得越来越重要。无论是共享单车、外卖配送还是社交应用&#xff0c;地理位置服务都扮演着关键角色。Redis提供了Geospatial Indexes数据结构&#xff0c;能够高效地存储和查询地理位置数据。本文将介绍Redis的Geospatial Indexes的基…

渗透测试导论

渗透测试的定义和目的 渗透测试&#xff08;Penetration Testing&#xff09;是一项安全演习&#xff0c;网络安全专家尝试查找和利用计算机系统中的漏洞。 模拟攻击的目的是识别攻击者可以利用的系统防御中的薄弱环节。 这就像银行雇用别人假装盗匪&#xff0c;让他们试图闯…