《机器学习》决策树 C4.5算法、cart算法

news2024/9/20 15:27:09

一、什么是C4.5算法

1、概念

        C4.5算法是一种决策树生成算法,它使用信息增益比(gain ratio)来选择最优分裂属性,它是ID3算法的改进版本。

        C4.5算法的核心思想是选择信息增益比最大的特征作为节点进行划分,以获得最好的分类能力。它使用熵来度量数据集的不确定性,通过计算特征的信息增益来评估特征对分类的贡献程度。信息增益比越大,表示该特征对分类的影响越大。

公式及定义如下:

2、具体步骤如下:(全篇log底数为2)

        1、计算所有样本的类别熵(H)。

        2、对于每一个属性,计算该属性的熵【也为自身熵】(Hi)。

        3、对于每一个属性,计算该属性对于分类所能够带来的信息增益(Gi = H - Hi)。

        4、计算每个属性的信息增益比(gain ratio = Gi / Hi),即信息增益类别自身熵的比值。

选择具有最大信息增益比的属性作为分裂属性。

3、什么是自身熵

        即不考虑标签解结果来只考虑自己本身类别的比例

例如:A集合:[1,1,1,2,2,3,3,3,3]

        其自身熵为:-3/9log(3/9) - 2/9log(2/9) - 4/9log(4/9) = 1.5304930567574826(此处使用上节课所说的熵值计算公式)

        所以集合A的自身熵为 1.5304930567574826

4、实例,依旧是上节课的文件

4.1 计算第一层节点

        在上节课中,我们在第一步就求出了每个特征的信息增益,即:

 outlook  信息增益= 标签熵值 - 总熵值 = 0.2471

        自身熵 = -5/14log(5/14) - 4/14log(4/14) - 5/14log(5/14) = 1.577

        信息增益率 = 0.2471 / 1.577 = 0.1566

• temperature 信息增益 = 0.94 - 0.91 = 0.03

        自身熵 = -4/14log(4/14) - 6/14log(6/14) - 4/14log(4/14) = 1.557

       信息增益率 = 0.03 / 1.557 = 0.0186

• humidity信息增益 = 0.94 - 0.788 = 0.152

        自身熵 = -7/14log(7/14) - 7/14log(7/14) = 1.0

        信息增益率 = 0.152 / 1.0 =0.152

• windy信息增益 = 0.94 - 0.89 = 0.05

        自身熵 = -8/14log(8/14) - 6/14log(6/14) = 0.985

        信息增益率 = 0.05 / 0.985 = 0.049

所以有信息增益率的排序:

        天气 > 湿度 > 有风  > 温度

由此可知第一个节点为天气

此时得到以下决策树图形:

4.2 计算第二层节点
4.2.1 对hot,将hot单独取出

play 标签熵值 = -2/5log(2/5) - 3/5log(3/5) = 0.97

 temperature自身熵 = -2/5log(2/5) - 1/5log(1/5) - 2/5log(2/5) = 1.52

        信息增益 = play标签熵值 - 总熵值 =0.97 -(2/5*hot熵 + 2/5 *milld熵 + 1/5 *cool熵)= 0.57

        信息增益率 = 0.57 / 1.52 = 0.375

• humidity自身熵 = -3/5log(3/5) - 2/5log(2/5) = 0.97

        信息增益 = 标签熵值 - 总熵值 = 0.97 - 0 = 0.97

        信息增益率 = 1.0

• windy自身熵 = -3/5log(3/5) - 2/5log(2/5) = 0.97

        信息增益 = 标签熵值 - 总熵值 = 0.97 - (3/5 * FALSE熵值 + 2/5 * TRUE熵值)= 0.0192

        信息增益率 = 0.0192 / 0.97 = 0.02

由此可见,humidity天气信息增益率最大

4.2.2 对hot,将rainy单独取出

play 标签熵值 = -2/5log(2/5) - 3/5log(3/5) = 0.97

 temperature自身熵 = -3/5log(3/5) - 2/5log(2/5) = 0.97

        信息增益 = 0.97 - (3/5 * mild熵 + 2/5 * cool熵)= 0.0192

        信息增益率 = 0.0192 / 0.97 = 0.02

• humidity自身熵 = -3/5log(3/5) - 2/5log(2/5) = 0.97

        信息增益 = 标签熵值 - 总熵值 = 0.97 -(3/5 * normal熵 + 2/5 * high熵)= 0.0192

        信息增益率 = 0.0192 / 0.97 = 0.02

• windy自身熵 = -3/5log(3/5) - 2/5log(2/5) = 0.97  

        信息增益 = 标签熵值 - 总熵值 = 0.97 - 0 = 0.97

        信息增益率 = 1

所以由此可见,windy有风信息增益率最大

4.2.3 所以可得当前决策树图:

二、什么是CART算法

1、概念

        在分类问题中,CART算法通过构建一棵二叉决策树,将数据集划分为多个子集,使得每个子集内的样本属于同一类别。它通过对特征进行划分,选择最优的切分点来构建决策树。

        在回归问题中,CART算法同样构建一棵二叉决策树,但是目标是预测一个连续的数值。它通过对特征进行划分,选择最优的切分点来构建决策树。

        CART算法的优点包括简单易于实现、具有较好的解释性、对非线性关系的建模能力强等。它在实际应用中被广泛应用于分类和回归问题的解决。

2、衡量标准

        基尼指数,GINI,其公式及定义如下:

3、实例,有如下贷款申请数据表

        首先计算各特征值的基尼系数,选择最优特征以及其最优切分点,选择最优特征以及以A1,A2,A3,A4表示有年龄、有工作、有自己的房子和信贷情况4个特征,并以1,2,3表示年龄的值为青年、中年、和老年,以1,2表示有工作和有自己房子的值为是和否,以1,2,3表示信贷情况的值为非常好、好、一般。

1)此时计算特征值为A1=1(青年)的基尼指数:
        • 首先计算青年的基尼系数(5个青年,2个贷款)

                青年的基尼系数为:2/5 *(1-2/5)+ 3/5 *(1-3/5)= 0.48

        注意:如果是二分类,这里的基尼系数可以直接为:2p*(1-p) = 2*2/5(1-2/5) = 0.48

                非青年的基尼系数为:2 * (3/10) * (1-3/10) = 0.42

        注意:这里的非青年为中年和老年

        所以,此时的总基尼指数为:5/15 * 0.48 + 10/15 * 0.42 = 0.44

2) 此时计算特征值为A1=2(中年)的基尼指数:

直接看总公式:

3) 此时计算特征值为A1=3(老年)的基尼指数:

因为老年和青年一样最小,所以都可以作为最优切分点

4)计算所有特征的基尼指数

分别计算A2(有工作)、A3(有自己房子)、A4(信贷情况)的基尼指数

同样通过上一步得到

A2=1(有工作):基尼系数为 0

A2=0(没有工作):基尼系数为 2 * 6/10 * (1 - 6/10) = 0.48

所以A2总基尼指数为:0.48 * 10/15 = 0.32

同理:A3(有自己房子)基尼指数为 0.27

A4总基尼指数为 :

A4=3(一般)基尼指数最小,为最优切分点

        所以,在A1,A2,A3,A4几个特征中,Gini(D,A3=1)=0.27最小,所以选择特征A3为最优特征A3=1为其最优切分点,于是根结点生成两个子结点,一个是叶结点,对另一个结点继续使用以上方法在A1,A2,A4中选择最优特征及其最优切分点,结果是A2=1,依此计算得知,所得结点都是叶结点.
        对于本问题,按照 CART算法所生成的决策树与按照 ID3算法所生成的决策树完全一致.

有上述结果可以画决策树如下所示:

        剩下的方法和上述基本一致,即切分出有房子的和没有房子的两组,分别对有房子和没房子对应的整个数据求基尼指数,最后即可得到下一步,切分结果如下所示:

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

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

相关文章

12.3.案例分析专题-面向对象设计

文章目录 面向对象分析与设计关系类图用例图包含 练习题2021年上真题2021年下真题 考点:用例图和类图 面向对象分析与设计 关系 依赖:一个事物的语义依赖于另一个事物的语义的变化而变化 关联:是一种结构关系,描述了一组链&#…

嵌入式C语言中函数宏基本操作方法

大家好,今天给大家分享一下,如何使用C语言中的函数宏,配置方法。 1 函数宏介绍 函数宏,即包含多条语句的宏定义,其通常为某一被频繁调用的功能的语句封装,且不想通过函数方式封装来降低额外的弹栈压栈开销。 函数宏本质上为宏,可以直接进行定义,例如: #define IN…

【后续更新】python搜集上海二手房数据

源码如下: import asyncio import aiohttp from lxml import etree import logging import datetime import openpyxlwb openpyxl.Workbook() sheet wb.active sheet.append([房源, 房子信息, 所在区域, 单价, 关注人数和发布时间, 标签]) logging.basicConfig(l…

华为账号“一键登录”能力让美团用户尽享安全便捷的登录体验

背景 随着全场景智能生态的日益完善,用户面临着众多应用与服务的登录需求, 而繁琐的注册登录流程通常是用户转化的隐形障碍,用户可能因为步骤繁琐、记忆密码困难而中途放弃,导致应用错失潜在用户。其次,高门槛的登录方…

Springcloud从零开始--Eureka(一)

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有…

Java数组06:冒泡排序

本节内容视频链接:Java数组08:冒泡排序_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV12J41137hu?p58&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 冒泡排序是一种简单的排序算法,‌它重复地遍历要排序的数列,‌…

day37动态规划+三.Github链接本地仓库

一.动态规划 474.一和零 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。 思路:这道题更像是另一种的0-…

Linux编辑器gcc/g++使用及Vim的配置

🌈个人主页:Yui_ 🌈Linux专栏:Linux 🌈C语言笔记专栏:C语言笔记 🌈数据结构专栏:数据结构 🌈C专栏:C 文章目录 1.简单的vim配置1.1 配置文件的位置1.2 常用配…

20 Tkinter Spinbox 组件

Tkinter Spinbox 组件使用指南 Tkinter 的 Spinbox 组件是一个带有上下箭头的输入框,允许用户通过点击箭头来增加或减少数值,或者从下拉列表中选择一个值。它通常用于需要限制用户输入范围的场景。以下是对 Spinbox 组件的详细说明和一个使用案例。 Sp…

linux文件——用户缓冲区——概念深度探索、IO模拟实现

前言:本篇文章主要讲解文件缓冲区。 讲解的方式是通过抛出问题, 然后通过分析问题, 将缓冲区的概念与原理一步一步地讲解。同时, 本节内容在最后一部分还会带友友们模拟实现一下c语言的printf, fprintf接口&#xff0c…

前端面试题 webpack的工作流程

一、流程图 二、重要概念 1.entry入口: Webpack 从配置的入口点开始,分析应用程序的依赖关系 2.output出口: 定义了打包后的文件如何输出,包括文件名和输出路径。 3.loader加载器: Webpack 本身只能处理 JavaScr…

2024 Python3.10 系统入门+进阶(六):random模块常用方法以及元组常用操作详解

目录 一、random模块1.1 random模块快用导航1.2 choice()方法---从非空序列中返回一个随机元素1.3 choices()方法---返回序列的随机元素1.4 randint()方法---获取指定范围的随机整数1.5 random()方法---获取0.0~1.0范围内随机浮点数1.6 randrange()方法---获取指定范围的随机整…

ArcGIS Pro基础:如何将数据和引用地图样式一起打包分享

如上所示,有2个矢量图斑,一个是耕地地块,另一个是范围图斑,如果我们需要把此工程的所有数据以及引用地图一起分享给别人,就可以使用【打包工程】这个工具。 如上所示,在【地理处理】下输入【打包工程】&am…

Excel的使用总结1

目录 1、汇总公式:TEXTJOIN 2、excel中选择某个区域的方法 3、excel中如何在复制的时候,不将公式一起复制过去 4、想要自动填充某个区域的值的方法 1、汇总公式:TEXTJOIN TEXTJOIN 函数 - Microsoft 支持 例:TEXTJOIN("…

Java数组07:稀疏数组

本节内容视频链接: https://www.bilibili.com/video/BV12J41137hu?p59&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p59&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 稀疏数组(‌sparse …

[SWPUCTF 2023 秋季新生赛]UnS3rialize

[SWPUCTF 2023 秋季新生赛]UnS3rialize 点开之后得到一串php代码&#xff1a; <?php highlight_file(__FILE__); error_reporting(0); class NSS {public $cmd;function __invoke(){echo "Congratulations!!!You have learned to construct a POP chain<br/>&q…

CDGA|数据治理为企业赋能价值的几种形式

在当今这个数据驱动的时代&#xff0c;数据已成为企业最宝贵的资产之一&#xff0c;而数据治理作为确保数据质量、安全性、合规性和可访问性的关键过程&#xff0c;正逐步成为企业转型升级、提升竞争力的核心驱动力。数据治理不仅关乎技术层面的优化&#xff0c;更是企业战略实…

【C++ Primer Plus习题】2.5

问题: 解答: #include <iostream> using namespace std;#define CEL_TO_FAH(c) 1.8*c32.0float celToFah(float value) {float fahrenheit CEL_TO_FAH(value);return fahrenheit; }int main() {float celsius 0;cout << "请输入一个摄氏温度的值:";ci…

ARM——驱动——内核编译

一、内核的介绍 Linux内核是Linux操作系统的核心内容&#xff0c;它负责管理系统的硬件资源&#xff0c;并为上层的应用程序提供接口。&#xff08;在上文都有所介绍&#xff09; 功能&#xff1a; 进程管理&#xff1a;内核负责创建、调度、同步和终止进程。它还管理进程间的…

linux应用编程--网络编程(socket编程基础)

介绍&#xff1a;套接字&#xff08;socket&#xff09;是 Linux 下的一种进程间通信机制&#xff08;socket IPC&#xff09;&#xff0c;在前面的内容中已经给大家提到过&#xff0c; 使用 socket IPC 可以使得在不同主机上的应用程序之间进行通信&#xff08;网络通信&#…