决策树算法和CART决策树算法详细介绍及其原理详解
相关文章
- K近邻算法和KD树详细介绍及其原理详解
- 朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解
- 决策树算法和CART决策树算法详细介绍及其原理详解
文章目录
- 相关文章
- 前言
- 一、决策树算法
- 二、CART决策树算法
- 2.1 基尼系数
- 2.2 CART决策树算法
- 总结
前言
今天给大家带来的主要内容包括:决策树算法、基尼系数和CART决策树算法。废话不多说,下面就是本文的全部内容了!
一、决策树算法
假设有这么一个例子,小明毕业后来到一家银行当行长,上班第一天就有15位客人申请了贷款,刚刚入行的小明仔细整理了客户的基本信息,这些基本信息包括:
- 是否有工作
- 是否有固定资产
- 信誉是否良好
经过深思熟虑后,小明逐一审查了这15份申请,并做了相应批复:

但是小明觉得这工作量实在是太大了,如果可以想一个办法快速的判断一个用户是否可以申请贷款呢?

经过几天几夜的努力思考后,小明根据客户的基本信息尝试得出结论:
- 按照工作为标准。其中五个有工作的用户都被批准了,而另外十个没有工作的客户有四个被批准了,六个被拒绝了

如果以少数服从多数为原则的话,可以得出结论:有工作的客户就会被批准,而没有工作的客户就会被直接拒绝。以上方法得到的结果显然和样本绝大部分的结果都相悖,所以按照工作为标准并不可行
- 按照信誉为标准。其中四个信誉非常好的客户被批准了;信誉良好的有四个客户被批准,两个被拒绝;而信誉一般的只有一个客户被批准,四个被拒绝

如果仍以少数服从多数为原则的话,那么可以得出结论:信誉非常好或者好的客户就会被批准,而信誉一般的客户就直接拒绝。以上方法得到的结果显然和样本绝大部分的结果仍然都相悖,所以按照信誉为标准也不可行
- 按照工作和信誉为标准。首先考虑工作因素,其中有工作的客户被分类得很好,全部客户的申请都被批准了,没有特例;而没有工作的客户,既有批准的,也有拒绝的。然后按照信誉的等级将剩下的客户分类,可以看到其中信誉非常好的客户和信誉一般的客户都被分类得很好,要不申请都批准了,要不都拒绝了,没有特例;而信誉好的客户的申请更偏向于拒绝

还是以少数服从多数为原则,可以得出结论:如果客户有工作,那么可以批准贷款;如果没有工作,我们再考虑他的信誉情况做出判断。通过以上方法得到的结果的正确率显然比前两种方法的正确率更高一些。这种方法就是利用决策树(Decision Tree)算法进行决策分类的过程,这种方法称为决策树算法的原因就是因为通过判断得到结果的过程分支很像一棵树,故而得名决策树算法
当小明发现决策树算法可以帮他快速进行客户申请的结果判断后,他非常高兴。假设此时有一个新客户的贷款申请,此客户没有工作,但是信誉非常好(忽略房子的因素),小明就可以按照上面介绍的决策树算法直接得出结论:

在刚才的决策树算法中,我们先按照是否有工作分类,又按照信誉等级进行分类,并且只考虑了这两种因素。那么我们目前就面临两个问题:
- 如果先按照信誉等级分类,再按照工作分类可不可以呢?
- 如果把是否有房子这个因素也考虑在内,又该按照什么顺序来选择标准呢?

二、CART决策树算法
2.1 基尼系数
刚才我们提到了,应该如何构建决策树呢?应该如何选择合理的因素呢?又应该如何选择多个因素合理的顺序呢?也就是说我们应该选择一个合理的标准,来作为决策树的分类节点,这个时候我们就需要对我们选择的标准进行好坏的判断,而标准的好坏可以用一个值来定义,这个值被称为基尼系数(Gini Index):
Gini=1−∑k=1Kpk2\operatorname{Gini}=1-\sum_{k=1}^{K} p_{k}^{2} Gini=1−k=1∑Kpk2
其中pk(1≤k≤K)p_{k}(1≤k≤K)pk(1≤k≤K)是某一类别出现的概率,所以基尼系数的定义就是:1减去所有类别出现的概率的平方和。根据以上定义,就可以得到在我们这个二元分类问题中的基尼系数为:
Gini=1−p(批准)2−p(拒绝)2Gini=1-p(\text{批准})^{2}-p(\text{拒绝})^{2} Gini=1−p(批准)2−p(拒绝)2
刚才我们也提到了,可以使用基尼系数来确定当前标准的好坏:
- 当基尼系数越大时,此标准的不确定性越大,说明此标准较坏
- 当基尼系数越小时,此标准的不确定性越小,说明此标准较好
所以基尼系数的含义为当前标准的不确定程度,以上面的例子举例来说:
-
当p(批准)=1,p(拒绝)=0p(\text{批准})=1,p(\text{拒绝})=0p(批准)=1,p(拒绝)=0时:
Gini=1−1−0=0Gini=1-1-0=0 Gini=1−1−0=0 -
当p(批准)=0,p(拒绝)=0p(\text{批准})=0,p(\text{拒绝})=0p(批准)=0,p(拒绝)=0时:
Gini=1−0−1=0Gini=1-0-1=0 Gini=1−0−1=0 -
当p(批准)=0.5,p(拒绝)=0.5p(\text{批准})=0.5,p(\text{拒绝})=0.5p(批准)=0.5,p(拒绝)=0.5时:
Gini=1−0.25−0.25=0.5Gini=1-0.25-0.25=0.5 Gini=1−0.25−0.25=0.5
我们也可以通过下图更直观的看出基尼系数随概率的变化。我们可以看到,当客户一定被拒绝,或者一定被批准的情况下,这种确定性会得到一个接近于零的基尼系数;而如果我们认为客户被拒绝和批准的概率一样时,基尼系数值会达到最大值。

2.2 CART决策树算法
那么根据以上分析,我们只需要选择基尼系数最小的条件来作为决策树下一级分类的标准就可以了。再回到我们上面讲述的例子中。首先我们不考虑任何标准,根据贷款结果直接计算数据的基尼系数:

可以看到当我们不选用任何标准时的基尼系数非常大,此时的数据类似于随机生成的,这也就意味着当前的贷款结果有着很大的不确定性。
很明显不考虑任何标准就莽撞地分类,那么分类结果一定不好,所以我们应该考虑选取最佳的分类标准,我们首先考虑“工作”这个分类标准,整个计算过程如下所示:

- 首先计算有工作的客户的基尼系数,因为这些客户都获得了批准,所以基尼系数为零
- 然后同样根据基尼系数公式得到没有工作的客户的基尼系数为0.48
- 最后通过加权的方式并求和,就可以得到以工作为分类标准的最终基尼系数为0.32
以此类推,按照上面的做法,我们也可以计算得到以房子和信誉作为分类标准的基尼系数:

我们比较上面计算得到的四个基尼系数,可以发现以房子作为分类结果的基尼系数最小,所以我们应该首先按照“房子”这个分类标准来构建决策树:

如果客户有房子,可以直接批准他的贷款,所以决策树左边的节点已经被分类好了;那如果客户没有房子,我们也不能直接拒绝客户的贷款,而是应该考虑决策树右边节点的标准,这个时候我们只需要考虑那些没有房子的客户就可以了,以这些没有房子的客户样本作为新的集合,计算剩余所有标准的基尼系数:

可以看到,其中以工作作为分类标准的基尼系数为零,是最低的基尼系数值,所以我们选择工作作为下一步分类的标准:

这样,我们就把所有的类别都分类好了,这就是决策树的生成过程。这种以基尼系数为核心的决策树算法就称为CART决策树算法(Classification and Regression Tree)。
另外还有一点需要注意,我们一般看到的决策树都是二叉树的构造形式,这只是一种个人选择,并不是强制要求。这样做的目的只是为了方便处理连续的变量,如果样本分布在0~100之间,在没有具体的切割要求下,我们一般取平均数作为切割点,这样就自然地生成了一棵二叉树。

总结
以上就是本文的全部内容了,这个系列还会继续更新,给大家带来更多的关于机器学习方面的算法和知识,下篇博客见!
相关文章:
决策树算法和CART决策树算法详细介绍及其原理详解
相关文章 K近邻算法和KD树详细介绍及其原理详解朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解决策树算法和CART决策树算法详细介绍及其原理详解 文章目录相关文章前言一、决策树算法二、CART决策树算法2.1 基尼系数2.2 CART决策树算法总结前言 今天给大家带来的主要内容包…...
ChatGPT风口下的中外“狂飙”,一文看懂微软、谷歌、百度、腾讯、华为、字节跳动们在做什么?
毫无疑问,ChatGPT正成为搅动市场情绪的buzzword。 历史经历过无线电,半导体,计算机,移动通讯,互联网,移动互联网,社交媒体,云计算等多个时代,产业界也一直在寻找Next Big…...
前端的核心技术有哪些?
前端即网站前台部分,运行在PC端,移动端等浏览器上展现给用户浏览的网页。随着互联网技术的发展,HTML5,CSS3,前端框架的应用,跨平台响应式网页设计能够适应各种屏幕分辨率,合适的动效设计&#x…...
Talk预告 | 悉尼科技大学澳大利亚人工智能研究所讲师方震:广义分布外检测的学习理论
本期为TechBeat人工智能社区第476期线上Talk! 北京时间2月22日(周三)20:00,悉尼科技大学澳大利亚人工智能研究所讲师——方震的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “广义分布外检测的学习理论”,届时将…...
企业微信的聊天机器人来了,免费下载(Python版)
大家好,这里是程序员晚枫,个人网址:python-office.com 上次分享了微信机器人的视频以后,视频下面有一个热门评论: 什么时候开发企业版微信机器人?自动回复、自动群发等等~ 在经历了一段时间的查找和开发以…...
DataGear 4.5.0 发布,数据可视化分析平台
DataGear 4.5.0 发布,带来数据集计算属性新功能,具体更新内容如下: 新增:数据集属性新增计算表达式功能,可对原始数据进行二次计算处理;新增:HTTP接口数据集新增文本、XML请求体类型支持&#…...
Java使用Aria2c进行文件下载
在Java服务中有复杂网络环境下下载大文件的需求,一开始自己写了一个多线程下载,但遇到校园网下载1G以上大文件时直接卡死了。 经调研后决定用aria下载器,成熟稳定,避免自己去处理各种网络问题。下面记录一下windows和ubuntu系统上…...
Dart 表达式以及语法糖汇总
前言 Dart语言中有许多语法糖或者说lambda表达式,语法和代码量是简洁了许多,但给想要入门的我添加了许多困扰,我经常看官方API或者第三方文档API的时候,在示例中大量的使用了类似的语法糖,让代码的可读性大大下降&…...
支付宝支付功能使用
1、进入“蚂蚁金服开放平台” https://open.alipay.com/https://open.alipay.com/ 2、下载支付宝官方 demo,进行配置和测试 文档地址 手机网站支付 DEMO | 网页&移动应用支付宝文档中心https://opendocs.alipay.com/open/02no47 demo下载 网页…...
数据库必知必会:TiDB(11)TiDB集群安装
数据库必知必会:TiDB(11)TiDB集群安装TiDB集群安装单机环境上安装集群下载并安装TiUP工具安装TiUP cluster组件创建拓扑文件配置SSH免密登录检查安装要求创建安装目录部署集群启动集群验证集群启动使用命令验证通过Dashboard查看通过Grafana查…...
ubuntu18安装Autoware 标定工具箱
参考链接:https://blog.csdn.net/zbr794866300/article/details/107109186#:~:textAutoware1.10%E4%BB%A5%E4%B8%8A%E7%9A%84%E8%BD%AF%E4%BB%B6%E9%83%BD%E9%9C%80%E8%A6%81%E5%8D%95%E7%8B%AC%E5%AE%89%E8%A3%85%E8%BF%99%E4%B8%AAcalibration%E6%A0%87%E5%AE%9A%…...
【面试题】ES6 如何将 Set 转化为数组
大厂面试题分享 面试题库后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库Set 是 ES6 中新增的一种集合类型,类似于数组,但其成员的值是唯一的,即不会重复。关于Set,可以阅…...
vs2022 实现无线调试安卓(Windows)
文章目录VS安装安卓调试环境前提条件Android SDK 版本查看安卓开启无线调试开启开发者模式打开USB调试功能打开无线调试功能查看配对信息(再次点击无限调试,不是switch开关)准备电脑端输入adb命令配对安卓查看设备清单如果没有设备VS无线调试…...
手把手教你做插件(2)模块大串联
0,前言 这篇文章笔记比较简略,大部分的操作都是和上一篇文章重复了,建议先看上一节文章,直达电梯:UE4 手把手教你做插件(1) 从代码引用插件_asiwxy的博客-CSDN博客UE4 手把手教你创建插件https:…...
LU Accepted or Rejected过程介绍
本文介绍LU成功和失败的过程。 LU accepted过程 [MS->NW] MM__LOCATION_UPDATING_REQUEST(LU type:MM_NORMAL_LU) MM_T3210_TIMER_ID Timer starts [NW->MS] MM__LOCATION_UPDATING_ACCEPT MM_T3210_TIMER_ID Timer stopped 通过OTA消息LOCATION_UPDATE_REQUEST查看LU ty…...
Teradata退了? 无所谓,GBASE会出手
近期,就在2月15日,国内IT界有搞出个大瓜,Teradata以对中国当前及未来商业环境的不确定性,慎重考虑后决定退出中国运营,后续将进入中国公司关闭程序。Teradata是一家有着40多年历史的数据仓库企业,被业界专业…...
华为OD机试 - 病菌感染(Python) | 机试题+算法思路+考点+代码解析 【2023】
病菌感染 题目 在一个地图中(地图有N*N个区域组成) 有部分区域被感染病菌 感染区域每天都会把周围上下左右的四个区域感染 请根据给定的地图计算多少天以后全部区域都会被感染 如果初始地图上所有区域都被感染 或者没有被感染区域返回-1 备注 1 <= N < 200 输入 一行…...
前置知识-边值问题、打靶法、bvp 系列函数的用法
1.2 边值问题 微分方程边值问题(Boundary Value Problem,简称BVP)是微分方程求解中的一个重要问题。与初值问题(Initial Value Problem,简称IVP)不同,BVP是在某个区间内寻求微分方程解的特定边界条件下的解。 在实际问题中,许多微分方程的解必须满足一些特定的边界条…...
为什么越来越多的企业选择智能客服系统?
现在智能客服系统越来越普遍,但是大部分的企业在配备智能客服系统的同时也会配置人工客服。因为目前为止,智能客服并不可以完全取代人工客服。智能客服系统之所以能够受到众多企业的青睐,主要是存在以下几点原因: 1、反应速度快&a…...
打造一款日志分析工具
一、简介 作为一名安全从业者,网络安全事件的应急响应工作是必不可少的,那么在应急支撑时,针对大量的日志数据便需要借助自动化工具实现快速的归类检测,并提取出所需的关键日志数据。本篇文章主要通过利用python语言编写一款web日…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
