常用决策树模型ID3、C4.5、CART算法

决策树概述

决策树(decision tree):是一种基本的分类与回归方法,下面提到的ID3、C4.5、CART主要讨论分类的决策树。

在分类问题中,表示基于特征对实例进行分类的过程,可以认为是if-then的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。
决策树通常有三个步骤

  • 特征选择
  • 决策树的生成
  • 决策树的剪枝

决策树的优点和缺点

优点:

  1. 决策树算法中学习简单的决策规则建立决策树模型的过程非常容易理解
  2. 决策树模型可以可视化,非常直观
  3. 应用范围广,可用于分类和回归,而且非常容易做多类别的分类
  4. 能够处理离散型和连续的样本特征
  5. 训练极端样本对树模型的性能影响相对其他模型较小(不包括回归树)
  6. 不平衡样本数据集也能取得好的表现(CART树)

缺点:

  1. 很容易在训练数据中生成复杂的树结构,造成过拟合(overfitting)。剪枝可以缓解过拟合的负作用,常用方法是限制树的高度、叶子节点中的最少样本数量。
  2. 学习一棵最优的决策树被认为是NP-Complete问题。实际中的决策树是基于启发式的贪心算法建立的,这种算法不能保证建立全局最优的决策树。Random Forest 引入随机能缓解这个问题

常用的决策树模型

决策树模型在监督学习中非常常见,决策树是一个非常常见并且优秀的机器学习算法,它易于理解、可解释性强,其可作为分类算法,也可用于回归模型。本文主要介绍常用的基本树(包括 ID3、C4.5、CART)。一般而言一棵“完全生长”的决策树包含,特征划分、决策树构建、剪枝三个过程。

在介绍决策树之前我们先了解一下“纯度”的概念:
决策树的构建是基于样本概率和纯度进行构建操作的,判断数据集“纯”的指标有:Gini指数、信息熵、不确定性、错误率、标准方差。他们的值越小,说明越“纯”。并且他们有以下关系:

信息熵:可以理解为衡量不确定性的指标。
Gini指数:可以理解为衡量错误率的指标。

下面开始介绍一下常用的三种算法ID3、C4.5、CART。

ID3算法

划分标准:ID3选用使得信息增益最大(纯度提升)的那个特征作为决策节点来划分样本。

ID3算法的三个基本概念和通俗的理解:
信息熵(entropy): 表示随机变量的不确定性。
条件熵(Conditional Entropy): 在一个条件下,随机变量的不确定性。
信息增益(Information Gain): 信息增益=信息熵 - 条件熵。表示在一个条件下,信息不确定性减少的程度(纯度提升)。

ID3算法缺点

  • 倾向于使用属性值多的特征来划分样本
  • 不能处理具有连续值的特征。
  • 不能处理特征具有缺失值的样本。
  • ID3 没有剪枝策略,容易过拟合。

由于上述缺点,如今几乎没人再使用ID3,但是信息增益的概念是重要的。

C4.5算法

划分标准:C4.5算法选用使得信息增益率(gain ratio)最大的那个特征作为决策节点来划分样本。

因为ID3算法中选用信息增益来作为决策树的生成策略,导致了生成过程中倾向于使用属性值多的特征来划分样本,为了克服这一缺点。引进了信息增益率(信息增益比)的概念。

C4.5算法相对于ID3算法主要有以下几个改进:

  • 用信息增益率来选择属性;
  • 引入悲观剪枝策略进行后剪枝;
  • 可以对连续数据进行离散化处理;
  • 能够处理具有缺失值的样本。

CART算法

CART(classification and regression tree),分类回归树,它既可以用来解决分类问题也可以用来解决回归问题。

划分标准:使用使得gini系数最小的那个属性来划分样本。

基尼系数:(Gini不纯度)表示在样本集合中一个随机选中的样本被分错的概率。

注意:Gini系数越小表示集合中被选中的样本被分错的概率越小,也就是说集合的纯度越高,反之,集合越不纯。当集合中所有样本只有一个类时,基尼系数为0.

CART 在 C4.5 的基础上进行了很多提升:

  • C4.5 为多叉树,运算速度慢,CART 为二叉树,运算速度快;
  • C4.5 只能分类,CART 既可以分类也可以回归;
  • CART 使用 Gini 系数作为变量的不纯度量,减少了大量的对数运算;
  • CART 采用代理测试来估计缺失值,而 C4.5 以不同概率划分到不同节点中;
  • CART 采用“基于代价复杂度剪枝(CPP)”方法进行剪枝,而 C4.5 采用悲观剪枝(PEP)方法。

简单总结一下CART:

  1. CART与C4.5算法是非常相似的,但是CART支持预测连续的值(即回归)。
  2. CART构建二叉树,而C4.5则不一定。显然由于二叉树的原因使得CART5不会出现ID3的问题(倾向于选择属性值多的属性来划分样本)
  3. CART用训练集和交叉验证集不断地评估决策树的性能来修剪决策树,从而使训练误差和测试误差达到一个很好地平衡点。
  4. 此外,CART 的一大优势在于,无论训练数据集有多失衡,它都可以将其子冻消除不需要建模人员采取其他操作。

通过前面的介绍我们知道了,基本树ID3、C4.5、CART都是采用“纯度”来做特征选择。它们的思路都相近,得到的模型性能也比较接近。

那么问题来了:基尼指数与熵模型性能接近,但到底与熵模型的差距有多大呢?

我们知道 ln(x) = -1 + x + o(x),所以:
我们可以将基尼指数理解为熵模型的一阶泰勒展开
我们可以将基尼指数理解为熵模型的一阶泰勒展开,下面放上一张很经典的图。
在这里插入图片描述

剪枝

剪枝是应该决策树过拟合的一种重要方法,主要分为以下两种:

预剪枝:该策略就是在对一个节点进行划分前进行估计,如果不能提升决策树泛化精度,就停止划分,将当前节点设置为叶节点。那么怎么测量泛化精度,就是留出一部分训练数据当做测试集,每次划分前比较划分前后的测试集预测精度。

简单来说预剪枝就是在完全正确分类训练集之前,较早地停止树的生长。 具体在什么时候停止决策树的生长有多种不同的方法:

  1. 一种最为简单的方法就是在决策树到达一定高度的情况下就停止树的生长。
  2. 到达此结点的实例具有相同的特征向量,而不必一定属于同一类, 也可停止生长。
  3. 到达此结点的实例个数小于某一个阈值也可停止树的生长。
  4. 还有一种更为普遍的做法是计算每次扩张对系统性能的增益,如果这个增益值小于某个阈值则不进行扩展。

预剪枝的优缺点:

优点:降低了过拟合风险,降低了训练所需的时间。

缺点:预剪枝是一种贪心操作,可能有些划分暂时无法提升精度,但是后续划分可以提升精度。故产生了欠拟合的风险。

后剪枝:该策略是首先正常建立一个决策树,然后对整个决策树进行剪枝。按照决策树的广度优先搜索的反序,依次对内部节点进行剪枝,如果将某以内部节点为根的子树换成一个叶节点,可以提高泛化性能,就进行剪枝。

优点:降低过拟合风险,降低欠拟合风险,决策树效果提升比预剪枝强

缺点:时间开销大得多

常用的后剪枝方法:

  1. REP-错误率降低剪枝
  2. PEP-悲观剪枝(C4.5决策树)
  3. CCP-代价复杂度剪枝(CART树)
  4. MEP-最小错误剪枝

回归树

CART(Classification and Regression Tree,分类回归树),从名字就可以看出其不仅可以用于分类,也可以应用于回归。其回归树的建立算法上与分类树部分相似,这里简单介绍下不同之处。

所谓回归树,就是用树模型做回归问题,每一片叶子都是一个预测值,预测值一般是叶子节点所含训练集元素输出的均值。

划分标准:使用标准差/方差小的那个特征属性来划分样本。

回归树对连续值的处理:

对于连续值的处理,CART 分类树采用基尼系数的大小来度量特征的各个划分点。在回归模型中,我们使用常见的和方差度量方式,对于任意划分特征 A,对应的任意划分点 s 两边划分成的数据集D1 和D2 ,求出使D1 和 D2 各自集合的均方差最小,同时 D1 和D2 的均方差之和最小所对应的特征和特征值划分点。表达式为:
在这里插入图片描述
其中,c1 为 D1 数据集的样本输出均值,c2 为 D2数据集的样本输出均值。

回归树的预测方式:

对于决策树建立后做预测的方式, CART 分类树采用叶子节点里概率最大的类别作为当前节点的预测类别。而回归树输出不是类别,它采用的是用最终叶子的均值或者中位数来预测输出结果。

总结

在这里插入图片描述

参考文献

https://blog.csdn.net/qq_43391414/article/details/109382789
https://zhuanlan.zhihu.com/p/85731206

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

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

相关文章

android webview卡顿检测_Android webview隐藏后跳转新页面input输入卡顿与白屏渲染慢的问题说明及修复方案...

关于此问题的说明:Android System WebView 内核的bug:当webview页面中存在持续渲染(如跑马灯效果。banner轮播等)。页面被隐藏后会导致JS阻塞影响页面渲染效率。从66.0.3359.126版本到最新都存在此问题。注意:此问题必须是页面隐藏hide后,并且…

hdu4841 圆桌问题-vector容器模拟

Problem Description 圆桌上围坐着2n个人。其中n个人是好人,另外n个人是坏人。如果从第一个人开始数数,数到第m个人,则立即处死该人;然后从被处死的人之后开始数数,再将数到的第m个人处死……依此方法不断处死围坐在圆…

五分钟了解Consul

Hi,大家好,我叫consul,翻译成中文叫做“领事”,其实我更喜欢叫自己为中介,因为我觉得自己做的事情和房产中介非常像。比如说想要卖房的房东到我这边登记,我将房屋信息登录到我的表格中(服务注册…

决策树可视化保姆级教程

决策树可视化指南 决策树是机器学习的一种经典的模型,因其泛化性能好,可解释性强而被广泛应用到实际商业预测中。通常在我们完成决策树模型搭建后,我们会进一步研究分析我们搭建好的模型,这时候模型的可视化就显得尤为重要。下面…

ubtunu打开firefox_ubuntu中火狐浏览器问题(也许是)

带宽2M,虽然不多,但是看个网页还是够的在ubuntu中使用火狐浏览器经常会出现以下情况打开某网页,一直都打不开,下方显示正在链接到 某某网页很久之后也许还没连上,接着会有不能上网的提示,然后刷新下大部分…

如何运用领域驱动设计 - 领域事件

开篇距离发布上一篇该系列的文章好像已经过了快一个半月了,好吧,我托更了????。一晃就已经到了3月份,在这樱花????盛开的季节,终于得重新连载该系列了。在停更的期间时不时会收到大家关于DDD的留言和问题,一旦…

滑动窗口最大值-leetcode 239题

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 来源:力扣(LeetCode) 链接:htt…

hdu1276 士兵队列训练问题-list容器

Problem Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三…

diff git 指定时间,git diff日期?

Im accustomed to running a git comparison that will allow comparison with local git revs like:git diff HEAD HEAD~110 -- some/file/path/file.extIs it possible to use the date instead? And if so, how? I would like to be able insert in place of the "11…

一文读懂 Copyleft 开源许可证

开源组件已改变了我们开发软件的方式。来自开源社区的现成库(ready-made libraries)使忙碌的开发者们能专注于他们的秘密武器,这些秘密武器或将成为未来令人兴奋的新软件产品。而且不需要付费。下载开源组件不需要你提供信用卡号码&#xff0…

常用决策树集成模型Random Forest、Adaboost、GBDT详解

常用的集成学习策略 在之前的文章我有介绍过常用的基本决策树模型ID3、C4.5、CART算法,其中提到了一个关于基本决策树模型的缺点,那就是决策树模型学习一棵最优的决策树被认为是NP-Complete问题。实际中的决策树是基于启发式的贪心算法建立的&#xff0…

hdu1213 How Many Tables-并查集

Problem Description Today is Ignatius’ birthday. He invites a lot of friends. Now it’s dinner time. Ignatius wants to know how many tables he needs at least. You have to notice that not all the friends know each other, and all the friends do not want to …

redis spring 切面缓存_今日份学习: Spring中使用AOP并实现redis缓存?

笔记在Spring中如何使用AOP?Spring是如何切换JDK动态代理和CGLIB的?spring.aop.proxy-target-classtrue (在下方第二个链接中,原生doc中提到过)Aspect生命切面BeforeAfterAroundRedis广泛使用的内存缓存常见的数据结构:StringListSetHashZSetRedis为什么…

开源网站云查杀方案,搭建自己的云杀毒。

最近公司的一个客户被勒索病毒攻击了,可悲的是,客户的文件附件太多而且大,没有做双机热备的功能。当客户发现病毒后,还第一时间格式化了服务器。那叫一个惨!!!!!初步分析…

下一个更大元素 leetcode-496

给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。 请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。 nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位…

最简单的并查集模板

代码如下&#xff1a; #include <iostream> using namespace std; const int N 1010; int a[N];void init_set() { //初始化for (int i 1; i < N; i)a[i] i; }int find_set(int x) { //查找return x a[x] ? x : find_set(a[x]); }void union_set(int x, int y) …

linux关机方法有哪些?有何区别_Linux下判断是否正常关机的一个简单方法

思想&#xff1a;系统启动的时候生成一个文件&#xff0c;正常关机的时候则删除这个文件&#xff0c;则可以根据系统开机时有没有那个文件来判断是不是非正常关机。步骤&#xff1a;在/etc/rc.d/init.d/下编程脚本。判断是否正常关机&#xff0c;和生成文件的脚本&#xff1a;t…

二叉树的遍历—广度优先(BFS)和深度优先(DFS)python实现

二叉树 二叉树&#xff08;Binary tree&#xff09;是树形结构的一个重要类型。对于二叉树的基础知识这里不做过多介绍&#xff0c;下面我们直接介绍二叉树的遍历方式和如何用python代码去实现二叉树的遍历。 二叉树的遍历&#xff08;重点&#xff09; “前”、“中”、“后…

五分钟了解数据库事务隔离

前言什么是事务隔离呢&#xff1f;们知道&#xff0c;关系型数据基本都支持事务&#xff0c;事务具备四个特性&#xff0c;分别是&#xff1a;原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;、…

fusionsphere读音_hydroxyapatite

全部Conclusion The absorbable coral hydroxyapatite is a good bone tissue engineering scaffold.结论可吸收性珊瑚羟基磷灰石具有促进骨髓基质细胞表达成骨细胞表型、合成细胞外基质的功能,是良好的细胞载体.互联网Phase changes and structural stability of hydroxyapati…