深度学习3 基于规则的决策树模型

news2024/12/29 19:39:39

1.决策树是一种归纳学习算法,从一些没有规则、没有顺序、杂乱无章的数据中,推理出决 策模型。不管是什么算法的决策树,都是一种对实例进行分类的树形结构。决策树有三个要素:节点(Node)、分支(Branches)和结果(Leaf)。

训练决策树,其实就是对训练样本的分析,把样本通过某个边界划分成不同的结果。如 图3.2所示,王华想玩游戏,但是他妈妈要求他写完作业才能玩。

2. ID3 算法

ID3算法通过熵(Entropy)  来决定谁来做父节点,也就是“条件”。 一般来说,决策树就是不断地if…else不断地做判断,每做一个判断就会产生新的分支,这个叫分裂。谁来分类,是根据Entropy 最小的原则来判断的。

(1)Entropy 衡量一个系统的混乱程度,例如,气体的 Entropy 会高于固体的Entropy。

(2)Entropy 可以表示一个随机变量的不确定性,例如,很多 低概率事件的 Entropy 很高,很少 高概率事件的Entropy 会很低。

(3)Entropy也可以用来计算比特信息量。

Entropy不断最小化,其实就是提高分类 正确率的过程。

3.C4.5

        通过对 ID3 的学习,可以发现一个问题:如果一个模型,无限地延长分类,越细小的分割错误率就会越小。继续猫狗分类的实验,假设把决策树延伸,最后有10种结果,每个结果 都只有1只猫或者1只狗,每个结果的Entropy 一定都是0。

        但是,这样的分类是没有意义的,即过拟合、过度学习(Overfitting)  举一个简单的例 子来理解Overfitting,  像是私人定制的衣服非常适合某一个人穿,此时出现一个新人,就无 法用这些既定的胸围、腰围来定制衣服了,必须重新测量。

        因此,为了避免分割太细,C4.5  的改进之处是提出了信息增益率。如果分割太细,会降低信息增益率。其他原理与 ID3 相差不多。

4.CART

        CART  的结构非常简单, 一个父节点只能分为2个子节点,它使用的是GINI 指标来决 定怎么分类的。CART 之所以是回归树,是因为使用回归方法来决定分布是否终止。不管如何分割, 总会出现一些结果,仅有一点的不纯净。因此CART  对每一个结果(叶子节点)的数据分析均值方差,当方差小于一个给定值,就可以终止分裂。

        CART  也有与ID3 类似的问题,就是分割过于细小,这里使用了一个技巧    剪枝,把 特别长的树枝直接剪掉。这个通过计算调整误差率(Adjusted Error Rate)实现。

5.随机森林

        随机森林是一种集成学习的方法,是把多棵决策树集成在一起的一种算法,基本单元是决策树。其思想从一个直观的角度来解释,就是每一棵决策树,都是一个分类器,很多决策树必然会有很多不一样的结果。这个结果就是每一个决策树的投票,投票次数最多的类别 就是最终输出。

6.Boosting 家族

        XGBoost 所应用的算法内核就是GBDT(Gradient Boosting Decision Tree),也就是梯度提升决策树。这里XGBoost 应用的算法严格来说是优化的GBDT。XGBoost 是一种集成学习。这种集成学习,与Random   Forest的集成学习,两者是不 一 样的。XGBoost 的集成学习是相关联的集成学习,决策树联合决策;而Random   Forest 算法中各个决策树是独立的。第二棵决策树的训练数据,会与前面决策树的训练效果有关,每棵树之间是相互关联的。而Random   Forest算法中每棵树都是独立的,彼此之间什么关系都没有。

        泛化能力是指一个模型在新数据上的表现能力,即它能够处理未见过的数据或情况的能力。如果一个模型具有强大的泛化能力,这意味着它不仅在训练数据上表现良好,而且在未见过的数据上也能保持较高的准确率和有效性。

7.LightGBM

        XGBoost 在每一次迭代的时候,都需要遍历整个训练数据多次。如果把整个训练集都放在内存就需要大量内存,如果不装进内存,每次读写就需要大量时间。所以XGBoost  缺点主要就是计算量巨大,内存占用巨大。因为 XGBoost 采用的贪婪算法,可以找到最精确的划分条件(就是节点的分裂条件),但是这也是一个会导致过拟合的因素。过拟合:模型在训练集上的表现非常好,但在新的、未见过的数据上表现很差。

         LightGBM  采用直方图算法(Histogram   Algorithm),思想很简单,就是把连续的浮点数据离散化,然后把原来的数据用离散之后的数据替代。换句话说,就是把连续数据变成了离散数据。例如,现在有几个数字[0,0.1,0.2,0.3,0.8,0.9,0.9],把这些分为两类,最后 离散结果就是:[0,0,0,0,1,1,1]。很多数据的细节被放弃了,相似的数据被划分到同一个bin中,数据差异消失了。① bin是指直方图中的一个柱子,直译过来是桶。②很多数据细节被放弃了,这 从另一个角度来看可以增加模型的泛化能力,防止过拟合。   

        除此之外,LightGBM  还支持类别特征。大多数机器学习工具无法支持类别特征,而需要把类别特征通过one-hot  编码。这里简单讲一下one-hot 编码,如图3.5所示(其中,“0”代表是,“1”代表是)。

         这样的编码方式会降低时间和空间的效率。尤其是当原来的特征动物类别中有几百种 one-hot  编码之后会多出几百列特征,效率非常低。此外,one-hot  编码会导致决策树分类时出现很多数据量很小的空间,容易导致过拟合问题。如图3.6(a)   XGBoost 会生 成一棵更长、泛化能力更弱的决策树,而图3.6(b)   LightGBM   可以生成一个泛化能力强 的模型。

8. CatBoost

        CatBoost 的优势是可以很好地处理类别特征CatBoost 提供了一种处理类别特征的方案:

(1)对所有的样本进行随机排序;

(2)把类别特征转化为数值型特征,每个数值型特征都是基于排在该样本之前的类别标签取均值,同时加入了优先级及权重系数。

 总 结:

(1)介绍了决策树的发展史。基本上后续的算法都是优于先前的算法的。

(2)ID3 算法:输入只能是分类数据(这意味着ID3 只能处理分类问题,不能处理回归任务),分裂的标准是Entropy

(3)CART 算法:输入可以是分类数据(categorical),也可以是连续数据(numerical)。 分裂标准是GINI 指标。

(4)Random  Forest和 XGBoost 算法虽然都是集成学习,但是二者存在不同。

(5)XGBoost   虽然精准分裂,但是容易过拟合、耗时长、效率低; LightGBM  使用直方 图算法,速度快、泛化能力较强。

(6)XGBoost   使用one-hot 编码,LightGBM 可以直接对类别特征进行处理;CatBoost  在处理类别特征的时候,更胜 LightGBM 一筹。总之,对于大数据的竞赛,LightGBM   CatBoost是主力。

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

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

相关文章

在线制作网页PHP源码+IAPPv3源码

好久以前刚学PHP的时候搞的,现在翻出来并修复了一下就分享出来了,希望可以给初学者一点借鉴学习例子,虽然不是很好哈,但拿来耍耍应该还算可以吧。 使用教程 环境是PHP就行,直接把源码上传到服务器(虚拟主…

[算法] 优先算法(四):滑动窗口(下)

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

代码随想录算法训练营第五十三天| 739. 每日温度 , 496.下一个更大元素 I , 503.下一个更大元素II

739. 每日温度 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int[] dailyTemperatures(int[] temperatures) {int[] result new int[temperatures.length];Deque<Integer> monoStack new LinkedList<Integer>();for(int i0;i<temperatures…

PXIe-6674T PXIe,OCXO PXI同步模块

PXIe-6674T PXIe&#xff0c;OCXO PXI同步模块 PXIe‑6674T可生成时钟和触发信号&#xff0c;并在单个PXI Express机箱中的多个设备之间路由这些信号&#xff0c;也可将这些信号路由到其他PXI和PXI Express机箱或第三方仪器。 PXIe‑6674T可利用PXI Express的高级低电压差分…

项目一单机安装基于LNMP结构的WordPress网站 web与数据库服务分离

网站的类型&#xff1a; Jave:LNMT PHP:LNMP Python: LNMU 项目部署&#xff1a; 1.项目的类型&#xff08;项目的开发语言&#xff09; 2.项目运营平台的技术选择 3.尽快让项目运行起来 all in one部署 4. 架构的优化 配置ansible管理环境 配置nginx 配置数据库服务…

[Flink]二、Flink1.13

7. 处理函数 之前所介绍的流处理 API,无论是基本的转换、聚合,还是更为复杂的窗口操作,其实都是基于 DataStream 进行转换的;所以可以统称为 DataStream API ,这也是 Flink 编程的核心。而我们知道,为了让代码有更强大的表现力和易用性, Flink 本身提供了多…

数据库性能优化系统设计

设计一个数据库性能优化系统&#xff0c;目标是监测、诊断并改善数据库的运行效率&#xff0c;确保系统能够高效稳定地处理大量数据请求。以下是一个概要设计&#xff0c;包括关键模块、功能和实现思路&#xff1a; 1. 系统架构 分布式监控中心&#xff1a;采用分布式架构收集…

Alt与Tab切换窗口时将Edge多个标签页作为一个整体参与切换的方法

本文介绍在Windows电脑中&#xff0c;使用Alt与Tab切换窗口时&#xff0c;将Edge浏览器作为一个整体参与切换&#xff0c;而不是其中若干个页面参与切换的方法。 最近&#xff0c;需要将主要使用的浏览器由原本的Chrome换为Edge&#xff1b;但是&#xff0c;在更换后发现&#…

Vine: 一种全新定义 Vue 函数式组件的解决方案

7月6日的 vue confg 大会上 ShenQingchuan 大佬介绍了他的 Vue Vine 项目&#xff0c; 一种全新定义 Vue 函数式组件的解决方案。 和 React 的函数式组件有异曲同工之妙&#xff0c;写起来直接起飞了。 让我们来快速体验一下 vine&#xff0c; 看看到底给我们带来了哪些惊喜吧…

【漏洞复现】TerraMaster TOS exportUser.php 远程命令执行

免责声明&#xff1a; 本文内容旨在提供有关特定漏洞或安全漏洞的信息&#xff0c;以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步&#xff0c;并非出于任何恶意目的。阅读者应该明白&#xff0c;在利用本文提到的漏洞信息或进行相关测…

@[TOC](六、数据可视化—Echars(爬虫及数据可视化))

六、数据可视化—Echars&#xff08;爬虫及数据可视化&#xff09; Echarts应用 Echarts Echarts官网&#xff0c;很多图表等都是我们可以 https://echarts.apache.org/zh/index.html 是百度自己做的图表&#xff0c;后来用的人越来越多&#xff0c;捐给了orange组织&#xf…

多国广播无线电台RadioMaximus Pro 2.33.00

RadioMaximus Pro是一款适用于Windows的程序,可让您收听和录制互联网上数以千计的广播电台。使用RadioMaximus Pro,您可以享受来自世界各地的最多样化的收音机。 RadioMaximus Pro是一款具有录音功能的全功能收音机播放器,您可以同时收听和录制多个电台,创建自动录音时间表…

redis并发、穿透、雪崩

Redis如何实现高并发 首先是单线程模型&#xff1a;redis采用单线程可以避免多线程下切换和竞争的开销&#xff0c;提高cpu的利用率&#xff0c;如果是多核cpu&#xff0c;可以部署多个redis实例。基于内存的数据存储&#xff1a;redis将数据存储在内存中&#xff0c;相比于硬…

28个常用的损失函数介绍以及Python代码实现总结

28个常用的损失函数介绍以及Python代码实现总结 最近在做多分类的研究&#xff0c;总是遇到这么多损失函数&#xff0c;应该挑选哪一个损失函数呢&#xff1f;这样的问题。于是心血来潮便想着对损失函数进行总结。 以下是一个预览总结&#xff1a; 损失函数名称问题类型L1范…

数据结构/作业/2024/7/7

搭建个场景: 将学生的信息&#xff0c;以顺序表的方式存储&#xff08;堆区)&#xff0c;并且实现封装函数︰1】顺序表的创建&#xff0c; 2】判满、 3】判空、 4】往顺序表里增加学生、5】遍历、 6】任意位置插入学生、7】任意位置删除学生、8】修改、 9】查找(按学生的学号查…

通俗易懂的信道复用技术详解:频分、时分、波分与码分复用

在现代通信网络中&#xff0c;信道复用技术 扮演着至关重要的角色。今天&#xff0c;我们将用通俗易懂的语言来讲解几种常见的信道复用技术&#xff1a;频分复用、时分复用、波分复用 和 码分复用。这篇文章特别适合基础小白&#xff0c;希望能帮助你快速理解这些概念。 一、频…

【Excel】 批量跳转图片

目录标题 1. CtrlA全选图片 → 右键 → 大小和属性2. 取消 锁定纵横比 → 跳转高度宽度 → 关闭窗口3. 最后一图拉到最后一单元格 → Alt吸附边框![](https://i-blog.csdnimg.cn/direct/d56ac1f41af54d54bb8c68339b558dd1.png)4. CtrlA全选图片 → 对齐 → 左对齐 → 纵向分布!…

QT5.14.2与Mysql8.0.16配置笔记

1、前言 我的QT版本为 qt-opensource-windows-x86-5.14.2。这是QT官方能提供的自带安装包的最近版本&#xff0c;更新的版本需要自己编译源代码&#xff0c;可点击此链接进行下载&#xff1a;Index of /archive/qt/5.14/5.14.2&#xff0c;选择下载 qt-opensource-windows-x86…

掌握java泛型

泛型方法 一般定义如下&#xff0c;即方法的前面加了个<T> public class FTest {public <T> List<T> f(T t){...}; }三种泛型参数推断方式&#xff1a; 直接在f()前面加确定泛型 fTest.<Integer>f(xxx)通过输入参数确定&#xff0c; 下面这个推断为…

STM32-外部中断浅析

本篇解释了STM32中断原理 MCU为什么需要中断 中断&#xff0c;是嵌入式系统中很重要的一个功能&#xff0c;在系统运行过程中&#xff0c;当出现需要立刻处理的情况时&#xff0c;暂停当前任务&#xff0c;转而处理紧急任务&#xff0c;处理完毕后&#xff0c;恢复之前的任务…