机器学习模型——决策树

决策树的定义: 

决策树利用树形数据结构来展示决策规则和分类结果,它是一种归纳学习算法,可以将复杂数据转化为可以预测未知数据的模型。每一条从根节点到叶节点的路径都代表一条决策规则。

决策树内的一些重要名词:

信息熵:

用来衡量一个随机变量出现的期望值。如果信息的不确定性越大,熵的值也就越大,出现的各种情况也就越多。

                                     H(X) = -∑p(x)log_2p(x)

范围:                     0 ~  log分类个数 (以2为底)

条件熵:

条件熵是在信息论中用来描述在一个随机变量X的值给定的前提下,另一个随机变量Y的不确定性。它反映了在已知X的条件下,Y的信息量或者说是剩余的不可预测性。

具体来说,条件熵H(Y|X)定义为在已知随机变量X的条件下,随机变量Y的条件概率分布的熵对X的期望值。这可以理解为,在知道了X的具体值之后,Y的不确定性或者信息量的平均值。

可以理解为加上某个条件后的信息熵

信息增益:

信息增益是在知道某个条件后,事件不确定性下降的程度

信息增益是信息论中的一个重要概念,它量化了在给定一个条件下,随机变量不确定性的减少量。具体来说,信息增益被定义为信息熵和条件熵之差,这里的信息熵指的是随机变量的不确定性,而条件熵则表示在已知一个随机变量的条件下,另一个随机变量的不确定性。数学上,信息增益可以表示为 H(X) - H(Y|X) ),其中 \( H(X) 是随机变量X的信息熵, H(Y|X) H(Y∣X) 是在给定X的条件下随机变量Y的条件熵。

值得一提的是,信息增益越大,意味着这个条件对于分类或决策过程越重要。例如,在决策树算法中,选择信息增益最大的特征作为节点分裂的依据,因为它能够最大限度地降低系统的不确定性,从而提高分类的准确性。

信息增益率:

信息增益率是一种特征选择的度量方法,它通过比较信息增益和条件的信息熵来评估特征的重要性

信息增益率是在信息增益的基础上发展起来的,它考虑了信息增益中可能存在的偏差,即某些属性可能因为其取值较多而具有较高的信息增益,但并不意味着该属性对分类有实质性的帮助。信息增益率通过引入“条件的信息熵”这一概念,来对信息增益进行校正,从而得到一个更为准确的特征重要性评估标准。

在决策树算法中,尤其是在C4.5算法中,信息增益率被用来衡量特征对于分类的贡献程度。与ID3算法中使用的信息增益不同,信息增益率提供了一个更稳定的特征选择标准,特别是在数据集含有多个属性或者属性之间存在相关性时,能够避免选择那些看似有信息但实际上并不具有预测能力的属性。

决策树的构建过程:

特征选择:从训练数据的特征中选择一个特征作为当前节点的分裂标准(特征选择的标准不同产生了不同的特征决策树算法)。

决策树生成:根据所选特征评估标准,从上至下递归地生成子节点,直到数据集不可分则停止决策树停止生长。

剪枝:决策树容易过拟合,需要剪枝来缩小树的结构和规模(包括预剪枝和后剪枝)。 决策树的生成是一个递归的过程,在决策树的基本算法中,有三种情况会导致递归返回:

   当前节点包含的样本全属于同一类别,无需划分;

   当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;

   当前节点包含的样本集为空,不能划分。

决策树的三种算法:

一.ID3算法(现在基本不用了)

ID3算法是由Ross Quinlan提出的决策树的一种算法实现,以信息论为基础,以信息熵和信息增益为衡量标准,从而实现对数据的归纳分类。

ID3算法是建立在奥卡姆剃刀的基础上:越是小型的决策树越优于大的决策树(be simple简单理论)。

ID3算法的核心思想:以信息增益度量属性选择,选择分裂后信息增益最大的属性进行分裂。

ID3算法流程:

1、初始化属性集合和数据集合。

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

3、更新数据集合和属性集合(删除掉上一步中使用的属性,并按照属性值来划分不同分支的数据集合)。

4、依次对每种取值情况下的子集重复第二步。

5、若子集只包含单一属性,则为分支为叶子节点,根据其属性值标记。

6、完成所有属性集合的划分。

优缺点:

ID3算法的优点主要包括决策树易于理解和解释、可以处理多种类型的数据以及计算复杂度相对较低。

易于理解和解释:决策树的结构直观,可以帮助人们更好地理解分类过程。

数据处理能力:ID3算法可以处理离散型和连续型数据,也能够应对多分类问题。

计算复杂度低:与其他算法相比,ID3算法的计算复杂度不高,使得它在实际应用中效率较高。

对数据缺失不敏感:ID3算法对中间值的缺失不敏感,这意味着它可以处理不完整或不相关特征的数据。

ID3算法的缺点则主要体现在它倾向于选择取值较多的特征,并且容易发生过拟合

特征选择偏好:信息增益偏向于选择取值较多的特征,这可能导致那些实际上并不具有强预测能力的特征被选中。

过拟合问题:决策树容易过拟合,即模型可能会过于复杂,对训练数据过度拟合,从而降低了对新数据的泛化能力。为了解决这个问题,通常会采用剪枝技术,包括前置剪枝和后置剪枝两种策略来避免决策树过于“茂盛”。

C4.5算法(ID3算法的改进版):

C4.5的改进:

上面讨论的决策树的ID3算法,属性只能是离散的,当然属性值可以是连续的数值型,但是需要对这些数据进行预处理,变为离散型的,才可以运用ID3算法。 C4.5是继承了ID3算法的优点,并在此基础上做出改进:

改进1:用信息增益率代替信息增益来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性不足:

改进2:能够完成对连续值属性的离散化处理。

改进3:能处理属性值缺失的情况。

改进4:在决策树构造完成之后进行剪枝。(预剪枝和后剪枝)

**预剪枝是在决策树构建过程中提前停止树的增长。它通过在每个节点处评估划分前后的泛化性能,如果划分不能显著提高性能,则不进行划分。这种方法可以有效地控制决策树的复杂度,减少计算成本,但可能会导致欠拟合。

**后剪枝则是在构建完整的决策树之后进行优化。它允许决策树完全增长,然后通过删除或合并一些子树来简化模型,以提高泛化能力。后剪枝通常能够得到比预剪枝更复杂的模型,因此欠拟合的风险较小,但计算成本较高。

优缺点:

C4.5算法是一种广泛使用的分类决策树算法,它通过信息增益率选择属性、对连续属性的离散化处理、对不完整数据的处理、以及在树构造过程中的剪枝操作,提高了决策树的精度和鲁棒性。

C4.5算法的优点:

易于理解和解释:C4.5算法产生的分类规则清晰易懂,非专业人士也能理解决策树所表示的规则。

处理连续属性:C4.5能够处理连续属性,通过离散化过程将连续属性转化为离散值。

处理不完整数据:C4.5可以处理含有缺失值的数据,这增强了算法的实用性和鲁棒性。

避免过拟合:通过剪枝技术,C4.5可以有效降低模型复杂度,防止过拟合,提高泛化能力。

C4.5算法的缺点:

计算效率较低:在构建树的过程中,需要多次扫描和排序数据集,导致算法效率不高,尤其是在大数据集上更为明显。

对噪声和异常值敏感:C4.5对噪声和异常值较为敏感,可能会造成决策树不稳定。

偏向于选择取值多的属性:尽管使用信息增益率作为选择标准已经减轻了这一问题,但在某种程度上仍存在偏向于选择取值较多的属性的倾向。

处理大规模数据时的挑战:由于算法需要将整个数据集加载到内存中,对于超出内存容量的大型数据集,C4.5算法面临挑战。

CART算法(最常用的):

CART的基本概念:

CART既能是分类树,又能是回归树。 当CART是分类树时,采用GINI值作为节点分裂的依据;

当CART是回归树时,采用样本的最小方差作为节点分裂的依据。  

CART是一棵二叉树,即CART只能做二分类。

https://blog.csdn.net/qq_35269774/article/details/88593661 回归树

CART的节点分裂:

分裂的目的是为了能够让数据变纯,使决策树输出的结果更接近真实值。如果是分类树,CART采用GINI值衡量节点纯度;如果是回归树,采用样本方差衡量节点纯度。节点越不纯,节点分类或者预测的效果就越差

小结:

ID3: ID3决策树可以有多个分支,但是不能处理特征值为连续的情况。在ID3中,每次根据“最大信息增益”选取当前最佳的特征来分割数据,并按照该特征的所有取值来切分,也就是说如果一个特征有4种取值,数据将被切分4份,一旦按某特征切分后,该特征在之后的算法执行中,将不再起作用,所以有观点认为这种切分方式过于迅速。

C4.5: 针对ID3采用的信息增益度量存在一个缺点,它一般会优先选择有较多属性值的特征,因为属性值多的特征会有相对较大的信息增益。C4.5中是用信息增益比率(gain ratio)来作为选择分支的准则。信息增益比率通过引入一个被称作分裂信息(Split information)的项来惩罚取值较多的Feature,在候选属性中选择基尼系数最小的属性作为最优划分属性。除此之外,C4.5还弥补了ID3中不能处理特征属性值连续的问题。

CART: 分类回归树(只做二分类)。CART分类时,使用基尼指数(Gini)来选择最好的数据分割的特征,gini描述的是纯度,与信息熵的含义相似。CART中每一次迭代都会降低GINI系数。当CART是分类树时,采用GINI值作为节点分裂的依据;当CART是回归树时,采用样本的最小方差作为节点分裂的依据。

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

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

相关文章

第1章:芯片及引脚介绍

芯片及引脚介绍 1: 芯片介绍1.1:芯片系列1.2 :STM32F103C8T6型号的介绍 2:引脚2.1:寄存器2.2:最小系统板 3:最小系统板的引脚3.1:特殊引脚3.2:普通引脚3.3:最…

BoostCompass —— 搜索引擎

文章目录 一、项目简介二、Boost库简介1. 简介2. Boost 库的特点 三、项目主要模块1. 网页内容获取,数据预处理模块2. 建立正排索引和倒排索引,项目核心模块3. 编写 http_server 模块,进行网络开放 四、项目功能预览1. 项目文件预览2. 项目执…

java自动化测试学习-03-06java基础之运算符

运算符 算术运算符 运算符含义举例加法,运算符两侧的值相加ab等于10-减法,运算符左侧减右侧的值a-b等于6*乘法,运算符左侧的值乘以右侧的值a*b等于16/除法,运算符左侧的值除以右侧的值a/b等于4%取余,运算符左侧的值除…

Linux systemd 配置为守护(daemon)运行模式

在 CentOS7、Ubuntu 16及以上版本均支持 systemd 配置,但需要注意:systemd 配置运行对应用程序有一定限制,这些被运行ELF程式必须考虑在 systemd 环境下工作的兼容性。 操作命令及配置文件; cd /etc/systemd/system nano 您的服务…

开启短剧盈利新模式:短剧CPS分销系统开发助力创作者与分销商共赢

在数字内容蓬勃发展的今天,短剧以其独特的魅力迅速占领了市场的一席之地。短剧以其紧凑的剧情、精彩的演绎,吸引了大量用户的关注和喜爱。然而,如何在短剧市场中实现商业价值的最大化,一直是业内关注的焦点。为此,我们…

个人品牌打造IP孵化运营培训教程架构课件

【资料持续更新,以防走丢】 个人品牌打造IP孵化运营培训教程架构课件 部分资料预览 资料部分是网络整理,仅供学习参考。 个人品牌运营合集 (完整资料包含以下内容)目录 详细的个人IP运营方案: 1. 确定个人定位和…

【Linux】进程控制之进程程序替换

目录 前言 替换的原理 替换函数 记忆技巧 函数使用 execl execlp execv execvp execle execvpe 调用其它语言的程序 模拟实现一个shell 前言 关于本文可以先去看看上一篇【Linux】进程控制详解-CSDN博客可以更好的理解这里的内容 学完本篇文章,你就…

浅聊什么是Redis?

需求:MySQL面临大量的查询,即读写操作,因此类比CPU,给数据加缓存,Redis诞生。应用程序从MySQL查询的数据,在Redis设置缓存(记录在内存中,无需IO操作),后再需要…

【吊打面试官系列】Redis篇 - 使用过 Redis 分布式锁么,它是什么回事?

大家好,我是锋哥。今天分享关于 【使用过 Redis 分布式锁么,它是什么回事?】面试题,希望对大家有帮助; 使用过 Redis 分布式锁么,它是什么回事? 先拿 setnx 来争抢锁,抢到之后&#…

2.Swift基础控件:图标文字按钮

Swift图标标题按钮 一、自定义IconTitleButton类 import Foundation/* 枚举 设置 图片的位置 */ enum ButtonImagePosition : Int {case imageTop 0case imageLeftcase imageBottomcase imageRight } extension UIButton {/**type :image 的位置Space &#xff1…

并查集 + Tarjan算法

并查集 Tarjan 算法 并查集是一种用于找出一个森林(图)中树(连通分支)的个数的算法,也可用于判断两个节点是否在同一棵树上。它在每一棵树(连通分支)上选择一个节点作为本棵树(连通…

leetcode代码记录(买卖股票的最佳时机

目录 1. 题目:2. 我的代码:小结: 1. 题目: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股…

蓝桥-时间显示

目录 题目链接 代码 题目链接 1.时间显示 - 蓝桥云课 (lanqiao.cn) 代码 #include <bits/stdc.h> using namespace std;int main() {long long x;cin>>x;int h,m,s;x x / 1000 % (3600*24); // 毫秒化秒&#xff0c;并且保留最后一天的时间h x / 3600; //求得…

python中OrderedDict有序字典类

OrderedDict 是 Python 标准库 collections 模块中的一个类&#xff0c;它实现了有序字典。与普通字典&#xff08;dict&#xff09;不同&#xff0c;OrderedDict 记住了元素被插入时的顺序&#xff0c;因此你可以按照元素被添加的顺序来迭代遍历字典的元素。 OrderedDict 的主…

第四百四十三回

文章目录 1. 概念介绍2. 思路与方法2.1 整体思路2.2 使用方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"自定义Action菜单"相关的内容&#xff0c;本章回中将介绍如何获取屏幕相关参数.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本…

Qtxlsx第三方库的安装和使用

本文仅作为一个记录&#xff0c;安装QtXlsx方便操作excel&#xff0c;主要参考了这篇博文&#xff1a;https://blog.csdn.net/u014779536/article/details/111769792 1&#xff0c;下载安装Perl脚本Strawberry Perl for Windows&#xff0c;默认安装strawberry-perl-5.30.0.1-…

MySQL Payload

常见Payload Version SELECT version Comment SELECT 1 -- commentSELECT 1 # commentSELECT /*comment*/1 Space 0x9 0xa-0xd 0x20 0xa0 Current User SELECT user()SELECT system_user()SELECT current_role() List User SELECT user FROM mysql.user Current Database SELEC…

Vue中的ref与reactive

在 Vue 中&#xff0c;ref 和 reactive 是用于处理响应式数据的两个不同的 API。 1. ref ref 是 Vue 3 中引入的 API&#xff0c;用于创建一个响应式的引用对象。它接收一个初始值作为参数&#xff0c;并返回一个包含了一个 .value 属性的对象。这个 .value 属性持有着实际的值…

程序·人生

诡异之极 2024.03.12 清新环境&#xff08;股票代码002573&#xff09;委托卖出 20000股&#xff0c;委托价4.58&#xff0c;当日最高价4.57 2024.03.11 清新环境&#xff08;股票代码002573&#xff09;委托卖出 20000股&#xff0c;委托价4.55&#xff0c;当日最高价4.54 …

汉明码检错与纠错的结论(hamming code)

假如一组二进制数据为101&#xff0c;另外一组为111&#xff0c;那么显然把第一组的第二位数据0改成1就可以变成第二组数据111&#xff0c;所以两组数据的汉明距离就为1 简单点说&#xff0c;汉明距离就是一组二进制数据变成另一组数据所需的步骤数&#xff08;它表示两个相同长…