【机器学习】机器学习的基本分类-监督学习-决策树-CART(Classification and Regression Tree)
CART(Classification and Regression Tree)
CART(分类与回归树)是一种用于分类和回归任务的决策树算法,提出者为 Breiman 等人。它的核心思想是通过二分法递归地将数据集划分为子集,从而构建一棵树。CART 算法既可以生成分类树,也可以生成回归树。
1. CART 的特点
- 二叉树结构:CART 始终生成二叉树,每个节点只有两个分支(左子树和右子树)。
- 分裂标准不同:
- 对于分类任务,CART 使用**基尼指数(Gini Index)**作为分裂标准。
- 对于回归任务,CART 使用**最小均方误差(MSE)**作为分裂标准。
- 支持剪枝:通过后剪枝减少过拟合。
- 处理连续和离散数据:支持连续特征的划分点选择。
2. CART 的基本流程
- 输入:训练数据集 D,目标变量类型(分类或回归)。
- 递归分裂:
- 按照基尼指数(分类)或均方误差(回归)选择最佳划分点。
- 对数据集划分为两个子集,递归构造子树。
- 停止条件:
- 节点样本数量小于阈值。
- 划分后不再能显著降低误差。
- 剪枝:
- 通过校验集性能优化,剪去不显著的分支。
- 输出:最终的二叉决策树。
3. 分类树
(1) 基尼指数
基尼指数(Gini Index)用于衡量一个节点的“纯度”,越小表示越纯:
其中:
:类别 k 的样本数量。
- K:类别的总数。
节点分裂的基尼指数计算为:
最佳划分点是使 最小的特征和对应的划分点。
(2) 示例:分类树
数据集:
| 天气 | 温度 | 湿度 | 风力 | 是否运动 |
|---|---|---|---|---|
| 晴天 | 30 | 高 | 弱 | 否 |
| 晴天 | 32 | 高 | 强 | 否 |
| 阴天 | 28 | 高 | 弱 | 是 |
| 雨天 | 24 | 正常 | 弱 | 是 |
| 雨天 | 20 | 正常 | 强 | 否 |
-
计算每个特征的基尼指数:
- 对离散特征(如天气),分别计算不同类别划分后的基尼指数。
- 对连续特征(如温度),尝试所有划分点,计算每个划分点的基尼指数。
-
选择最优特征和划分点:
- 选择基尼指数最小的划分点。
-
生成子树:
- 对每个子集递归分裂,直到满足停止条件。
4. 回归树
(1) 分裂标准
对于回归任务,CART 使用**均方误差(MSE)**作为分裂标准:
其中:
:第 i 个样本的目标值。
:节点中所有样本目标值的均值。
节点分裂的误差计算为:
最佳划分点是使 最小的特征和对应的划分点。
(2) 示例:回归树
假设我们有如下数据集(目标值为房价):
| 面积(平方米) | 房价(万元) |
|---|---|
| 50 | 150 |
| 60 | 180 |
| 70 | 210 |
| 80 | 240 |
| 90 | 270 |
-
尝试划分点:
- 例如,划分点为 656565。
- 左子集:{50,60},右子集:{70, 80, 90}。
-
计算误差:
- 左子集的均值:
。
- 右子集的均值:
。
- 计算分裂后的总均方误差。
- 左子集的均值:
-
选择最佳划分点:
- 选择误差最小的划分点,继续构造子树。
5. 剪枝
CART 使用后剪枝来防止过拟合:
-
生成完全生长的决策树。
-
计算子树的损失函数:
其中:
:第 i 个叶子节点。
:叶子节点的数量。
- α:正则化参数,控制树的复杂度。
-
剪去对验证集性能提升不大的分支。
6. CART 的优缺点
优点
- 生成二叉树,逻辑清晰,易于实现。
- 支持分类和回归任务。
- 支持连续特征和缺失值处理。
- 剪枝机制增强了泛化能力。
缺点
- 易受数据噪声影响,可能生成复杂的树。
- 对高维数据表现一般,无法处理稀疏特征。
- 生成的边界是轴对齐的,可能不适用于复杂分布。
7. 与其他决策树算法的比较
| 特点 | ID3 | C4.5 | CART |
|---|---|---|---|
| 划分标准 | 信息增益 | 信息增益比 | 基尼指数 / MSE |
| 支持连续特征 | 否 | 是 | 是 |
| 树结构 | 多叉树 | 多叉树 | 二叉树 |
| 剪枝 | 无 | 后剪枝 | 后剪枝 |
| 应用 | 分类 | 分类 | 分类与回归 |
8. 代码实现
以下是一个简单的 CART 分类树实现:
import numpy as np# 计算基尼指数
def gini_index(groups, classes):total_samples = sum(len(group) for group in groups)gini = 0.0for group in groups:size = len(group)if size == 0:continuescore = 0.0for class_val in classes:proportion = [row[-1] for row in group].count(class_val) / sizescore += proportion ** 2gini += (1 - score) * (size / total_samples)return gini# 划分数据集
def split_data(data, index, value):left, right = [], []for row in data:if row[index] < value:left.append(row)else:right.append(row)return left, right# 示例数据
dataset = [[2.771244718, 1.784783929, 0],[1.728571309, 1.169761413, 0],[3.678319846, 2.81281357, 0],[3.961043357, 2.61995032, 0],[2.999208922, 2.209014212, 1],
]# 计算基尼指数
split = split_data(dataset, 0, 2.5)
gini = gini_index(split, [0, 1])
print("基尼指数:", gini)
输出结果
基尼指数: 0.30000000000000004
CART 是机器学习中非常经典的算法,同时也是随机森林、梯度提升决策树等模型的基础。
相关文章:
【机器学习】机器学习的基本分类-监督学习-决策树-CART(Classification and Regression Tree)
CART(Classification and Regression Tree) CART(分类与回归树)是一种用于分类和回归任务的决策树算法,提出者为 Breiman 等人。它的核心思想是通过二分法递归地将数据集划分为子集,从而构建一棵树。CART …...
【金猿CIO展】复旦大学附属中山医院计算机网络中心副主任张俊钦:推进数据安全风险评估,防范化解数据安全风险,筑牢医疗数据安全防线...
张俊钦 本文由复旦大学附属中山医院计算机网络中心副主任张俊钦撰写并投递参与“数据猿年度金猿策划活动——2024大数据产业年度优秀CIO榜单及奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 数据要素时代,医疗数据已成为医院运营与决策的重要基石…...
工业机器视觉-基于深度学习的水表表盘读数识别
字轮数字识别、指针读数识别(角度换算)、根据指针角度进行读数修正、根据最高位指针(x0.1)读数对字轮数字进行修正、得到最终读数。 基于深度学习的目标检测技术和OpenCV图像处理技术,可识别所有类型的表盘机械读数。...
基于ZooKeeper搭建Hadoop高可用集群
ZooKeeper搭建Hadoop高可用集群 在之前安装的Hadoop3.3.6集群中HDFS NameNode 和 YARN ResourceManager 都是单节点,集群不具有高可用性。 HDFS 高可用架构 HDFS 高可用架构主要组件: Active NameNode 和 Standby NameNode: 两台 NameNode…...
力扣88题:合并两个有序数组
力扣88题:合并两个有序数组 题目描述 给定两个按非递减顺序排列的整数数组 nums1 和 nums2,以及它们的长度 m 和 n,要求将 nums2 合并到 nums1,使得合并后的数组仍按非递减顺序排列。 输入与输出 示例 1: 输入&am…...
python 笔记之线程同步和死锁
同步: 共享数据: 如果多个线程共同对某个数据修改,则可能出现不可预测的结果,为了保证数据的正确性,需要对多个数据进行同步 同步:一个一个的完成,一个做完另一个才能进来 效率会降低 使用Thre…...
SpringBoot小知识(4):高级配置知识与bean的绑定
一、EnableConfigurationProperties ConfigurationProperties注解在我们之前讲过,他是从配置中读取参数封装给实体类的一个注解。 那么EnableConfigurationProperties是个啥呢? EnableConfigurationProperties 是 Spring Framework 中用于启用基于配置文…...
Python毕业设计选题:基于大数据的淘宝电子产品数据分析的设计与实现-django+spark+spider
开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 电子产品管理 系统管理 数据可视化分析看板展示 摘要 本…...
Lua面向对象实现
Lua中的面向对象是通过表(table)来模拟类实现的,通过setmetatable(table,metatable)方法,将一个表设置为当前表的元表,之后在调用当前表没有的方法或者键时,会再查询元表中的方法和键,以此来实现…...
OpenCV的圆形检测HoughCircles
HoughCircles 函数是 OpenCV 库中用于在灰度图像中检测圆的函数,它基于霍夫变换(Hough Transform)的一种变体——梯度霍夫变换(HOUGH_GRADIENT)函数原型如下: void HoughCircles( InputArray image, OutputArray circles,int method, double dp, double minDist,double …...
iOS视图控制器的生命周期及各阶段的作用
iOS视图控制器(UIViewController)的生命周期是指从它被创建到最终被销毁的过程中所经历的一系列阶段。每个阶段都有其特定的作用和执行时机,这些阶段和作用对于开发高效、稳定的iOS应用至关重要。以下是iOS视图控制器的生命周期及其各个阶段的…...
四轮阿克曼(前轮转向、后轮驱动)车子仿真控制
目录 写在前面的话调用 libgazebo_ros_ackermann_drive.so 插件属性介绍补充 steering_wheel_joint 配置键盘控制命令 结果演示 写在前面的话 这里增加一个四轮阿克曼(前轮转向、后轮驱动)车子仿真控制的版本,使用的事gazebo的插件 参考资料…...
Blender均匀放缩模型
解决办法: 首先选中模型,按下“s”键,如下图所示,此时模型根据鼠标的移动放缩 或者在按下“s”后输入数值,再按回车键Enter,模型会根据你该数值进行均匀放缩 指定放大2倍结果——...
Python基于 Opencv+wxPython 的人脸识别上课考勤系统,附源码
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
【AI工具】强大的AI编辑器Cursor详细使用教程
目录 一、下载安装与注册 二、内置模型与配置 三、常用快捷键 四、项目开发与问答 五、注意事项与技巧 参考资料 近日,由四名麻省理工学院(MIT)本科生共同创立的Anysphere公司宣布,其开发的AI代码编辑器Cursor在成立短短两年…...
DApp开发与APP开发的五大区别
随着比特币与区块链技术的不断发展,DApp应用会逐渐成为主流。与APPAPP相比,DApp有许多不同之处,尤其是在架构、数据存储、用户隐私等方面。本文将通过五大关键点,深入探讨DApp开发与APP开发之间的主要区别。 1. 后端架构ÿ…...
哪款云手机适合多开?常用云手机功能对比
在全球化和数字化时代,云手机以其独特的灵活性和高效性,成为多账号运营和数字营销的热门工具。云手机能够解决传统设备管理的诸多痛点,例如账号关联、硬件成本高等问题。本文将为您推荐多款优质云手机品牌,帮助您选择最适合的工具…...
Python几种常用数据结构(重制版)
一、列表 [List] 定义:有序可重复的数据集合。示例:my_list [element1, element2, element3]增加元素方法: append():在列表末尾增加单个元素(列表特有方法),例如 my_list.append(element)。e…...
C++ 游戏开发:开启游戏世界的编程之旅(2)
三、游戏输入处理 (一)键盘输入处理 在游戏中,玩家通过键盘输入来控制角色的行动。我们需要在游戏循环中不断检测键盘事件,并根据不同的按键按下或松开状态来执行相应的操作。例如,在 SDL 中,可以这样处理…...
用 Python 做数据分析需要掌握哪些基础?
用 Python 做数据分析,需要掌握以下几个基础方面: 1. Python 编程基础 语法基础:变量、数据类型(如字符串、整数、浮点数、布尔值)、条件语句(if-else)、循环(for、while࿰…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...
AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...
GC1808:高性能音频ADC的卓越之选
在音频处理领域,高质量的音频模数转换器(ADC)是实现精准音频数字化的关键。GC1808,一款96kHz、24bit立体声音频ADC,以其卓越的性能和高性价比脱颖而出,成为众多音频设备制造商的理想选择。 GC1808集成了64倍…...
STM32 低功耗设计全攻略:PWR 模块原理 + 睡眠 / 停止 / 待机模式实战(串口 + 红外 + RTC 应用全解析)
文章目录 PWRPWR(电源控制模块)核心功能 电源框图上电复位和掉电复位可编程电压监测器低功耗模式模式选择睡眠模式停止模式待机模式 修改主频一、准备工作二、修改主频的核心步骤:宏定义配置三、程序流程:时钟配置函数解析四、注意…...
