【机器学习】机器学习的基本分类-监督学习-决策树-C4.5 算法

news2024/12/26 16:05:16

C4.5 是由 Ross Quinlan 提出的决策树算法,是对 ID3 算法的改进版本。它在 ID3 的基础上,解决了以下问题:

  1. 处理连续型数据:支持连续型特征,能够通过划分点将连续特征离散化。
  2. 处理缺失值:能够在特征值缺失的情况下继续构建决策树。
  3. 偏好多值特征的问题:采用信息增益比(Gain Ratio)替代信息增益,减少对多值特征的偏好。
  4. 生成剪枝后的树:通过后剪枝技术,降低过拟合风险。

1. 核心改进

(1) 信息增益比

C4.5 使用**信息增益比(Gain Ratio)**代替 ID3 的信息增益来选择最优特征。

  • 信息增益 IG(D, A):

IG(D, A) = H(D) - H(D|A)

  • 分裂信息 SI(A):

SI(A) = -\sum_{v \in \text{Values}(A)} \frac{|D_v|}{|D|} \log_2 \frac{|D_v|}{|D|}

其中:

  • |D_v|/|D|:特征 AAA 的第 vvv 个取值的样本比例。

  • 信息增益比 GR(D, A):

GR(D, A) = \frac{IG(D, A)}{SI(A)}

分裂信息 SI(A) 是一种归一化因子,用于惩罚取值较多的特征,降低它们被优先选择的可能性。


(2) 连续型特征处理
  • 对连续特征,C4.5 会尝试在特征值的每个分割点(例如两个样本值之间的中点)进行划分。
  • 对每个划分点计算信息增益比,选择最佳划分点。

假设某连续特征 A 的值为 \{v_1, v_2, \dots, v_n\},排序后尝试以下划分点:

划分点 = \frac{v_i + v_{i+1}}{2}, \quad i = 1, 2, \dots, n-1


(3) 处理缺失值

对于缺失值,C4.5 使用以下策略:

  1. 在计算信息增益比时,只考虑特征值非缺失的样本。
  2. 当需要划分含有缺失值的样本时,将这些样本按概率分配到各个子节点。

(4) 剪枝
  • C4.5 采用**后剪枝(Post-Pruning)**技术,通过校验数据集评估剪枝后的树是否提高性能。
  • 剪枝的目标是降低过拟合风险,增强模型泛化能力。

2. C4.5 算法流程

  1. 输入:训练数据集 D、特征集 A。
  2. 递归构造树
    1. 计算当前数据集 D 的信息熵 H(D)。
    2. 对每个特征 A ∈ A:
      • 若 A 为离散特征,计算信息增益比。
      • 若 A 为连续特征,尝试每个划分点,计算信息增益比。
    3. 选择信息增益比最大的特征 A^*,作为当前节点的分裂特征。
    4. 根据 A^* 的取值(或划分点)划分数据集 D。
    5. 对每个子数据集递归构造子树。
  3. 剪枝
    • 基于校验集对生成的决策树进行剪枝,移除不显著的分支。
  4. 输出:剪枝后的决策树。

3. 示例

数据示例

假设有以下训练数据集:

天气温度湿度风力是否运动
晴天30
晴天32
阴天28
雨天24正常
雨天20正常

目标:构造决策树判断是否运动。

步骤
  1. 计算根节点的熵

    H(D) = -\frac{3}{5} \log_2 \frac{3}{5} - \frac{2}{5} \log_2 \frac{2}{5} \approx 0.971
  2. 对每个特征计算信息增益比

    • 天气(离散特征)

      • 计算天气的条件熵 H(D|\text{Weather})
      • 计算信息增益比 GR(D, \text{Weather})
    • 温度(连续特征)

      • 尝试划分点:272727、303030、333333。
      • 对每个划分点计算信息增益比,选择最佳划分点。
    • 湿度、风力

      • 按相同方法计算。
  3. 选择信息增益比最大的特征作为分裂特征,生成子节点。

  4. 对子节点递归分裂,直至满足停止条件(如样本类别纯度高或无特征可分)。

  5. 后剪枝

    • 对生成的树在校验集上进行性能评估,剪去对性能贡献较小的分支。

4. 算法特点

优点
  1. 支持离散和连续特征,适用范围更广。
  2. 减少对多值特征的偏好,提高选择的公平性。
  3. 能处理缺失值,增强算法的鲁棒性。
  4. 剪枝减少过拟合,提高泛化能力。
缺点
  1. 计算复杂度高,特别是连续特征的划分点尝试增加了计算量。
  2. 不支持大规模数据时的并行化。
  3. 剪枝过程可能需要额外的校验集。

5. 代码实现

以下是一个简单的 Python 实现,用于计算信息增益比并构造 C4.5 决策树:

import numpy as np

# 计算熵
def entropy(labels):
    total = len(labels)
    counts = {}
    for label in labels:
        counts[label] = counts.get(label, 0) + 1
    return -sum((count / total) * np.log2(count / total) for count in counts.values())

# 计算信息增益比
def information_gain_ratio(data, labels, feature_index):
    total_entropy = entropy(labels)
    feature_values = [row[feature_index] for row in data]
    unique_values = set(feature_values)
    split_info = 0
    conditional_entropy = 0
    for value in unique_values:
        subset = [labels[i] for i in range(len(data)) if data[i][feature_index] == value]
        proportion = len(subset) / len(data)
        conditional_entropy += proportion * entropy(subset)
        split_info -= proportion * np.log2(proportion)
    info_gain = total_entropy - conditional_entropy
    return info_gain / split_info if split_info != 0 else 0

# 示例数据
data = [
    ["晴天", 30, "高", "弱"],
    ["晴天", 32, "高", "强"],
    ["阴天", 28, "高", "弱"],
    ["雨天", 24, "正常", "弱"],
    ["雨天", 20, "正常", "强"]
]
labels = ["否", "否", "是", "是", "否"]

# 特征索引(天气、温度、湿度、风力)
for i in range(4):
    print(f"Feature {i}, Gain Ratio: {information_gain_ratio(data, labels, i):.4f}")

输出结果 

Feature 0, Gain Ratio: 0.3751
Feature 1, Gain Ratio: 0.4182
Feature 2, Gain Ratio: 0.0206
Feature 3, Gain Ratio: 0.4325

6. 总结

C4.5 是 ID3 的改进版本,针对实际问题的需求(连续特征、缺失值、多值特征偏好等)做了多项优化。尽管计算复杂度高,但其广泛用于分类问题,成为现代决策树算法的基础之一(如 CART)。

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

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

相关文章

Qt 安装Qt Serial Port

最近要用Qt写个串口上位机软件,发现Qt的串口库用不了,上网找了一下资料,找到一种解决办法,具体操作如下: 参考文章:https 目录 一、找到QT安装路径,并运行Qt Maintenance Tool二、选择 添加或移…

【Go 基础】channel

Go 基础 channel 什么是channel,为什么它可以做到线程安全 Go 的设计思想就是:不要通过共享内存来通信,而是通过通信来共享内存。 前者就是传统的加锁,后者就是 channel。也即,channel 的主要目的就是在多任务间传递…

cin/cout的性能优化和缓冲区同步问题

目录 背景导入 问题 1.1ios::sync_with_stdio(false) 1.2为什么要解除C/C IO流同步? 1.3使用场景 2.1cin和cout的绑定关系 2.2为什么要解除绑定关系? 2.3注意事项 背景导入 大家可以先看一下这段背景知识;后面我会谈谈自己的理解; 1.在C中,标准输⼊输出流…

C# 动态类型 Dynamic

文章目录 前言1. 什么是 Dynamic?2. 声明 Dynamic 变量3. Dynamic 的运行时类型检查4. 动态类型与反射的对比5. 使用 Dynamic 进行动态方法调用6. Dynamic 与 原生类型的兼容性7. 动态与 LINQ 的结合8. 结合 DLR 特性9. 动态类型的性能考虑10. 何时使用 Dynamic&…

PDF文件页面转换成图片怎么弄-免费PDF编辑工具分享

>>更多PDF文件处理应用技巧请前往 96缔盟PDF处理器 主页 查阅! —————————————————————————————————————— 序言 我之前的文章也有介绍过如何使用96缔盟PDF处理器对PDF文件转换成图片,但是当时是使用DMPDFU…

“放弃Redis Desktop Manager使用Redis Insight”:日常使用教程(Redis可视化工具)

文章目录 更新Redis Insight连接页面基础解释自动更新key汉化暂时没有找到方法, Redis Desktop Manager在连接上右键在数据库上右键在key上右键1、添加连接2、key过期时间 参考文章 更新 (TωT)ノ~~~ βyё βyё~ 现在在维护另一…

【AI模型对比】Kimi与ChatGPT的差距:真实对比它们在六大题型中的全面表现!

文章目录 Moss前沿AI语义理解文学知识数学计算天文学知识物理学知识英语阅读理解详细对比列表总结与建议 Moss前沿AI 【OpenAI】获取OpenAI API Key的多种方式全攻略:从入门到精通,再到详解教程!! 【VScode】VSCode中的智能AI-G…

在Node.js局域网调试https的Vue项目

需求: 最近在测试在网页端(HTML5)调用移动设备的定位等权限功能,发现某些功能是必须保证域名在https下的否则会出现不正常现象。 解决: 1.在线生成和证书 访问:CSR文件生成工具-中国数字证书CHINASSL …

【采样率、采样定理、同步和异步采样】

内容来源:【数据采集卡的【采样率】【采样定理】【同步采样】【异步采样】的相关说明】 此篇文章仅作笔记分享。 前言 模拟信号需要通过采样、储存、量化、编码这几个步骤转换成数字信号,本篇文章将会对采样进行一个更详细的说明。 采样 采样就是将一…

深度学习常用指标

1. 混淆矩阵(误差矩阵) 2. 准确率(overall accuracy) 代表了所有预测正确的样本占所有预测样本总数的比例 这里分类正确代表了正样本被正确分类为正样本,负样本被正确分类为负样本 3. 平均精度(average…

基于频谱处理的音频分离方法

基于频谱处理的音频分离方法 在音频处理领域,音频分离是一个重要的任务,尤其是在语音识别、音乐制作和通信等应用中。音频分离的目标是从混合信号中提取出单独的音频源。通过频谱处理进行音频分离是一种有效的方法,本文将介绍其基本原理、公…

AI技术在电商行业中的应用与发展

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

微信小程序3-显标记信息和弹框

感谢阅读,初学小白,有错指正。 一、实现功能: 在地图上添加标记点后,标记点是可以携带以下基础信息的,如标题、id、经纬度等。但是对于开发来说,这些信息还不足够,而且还要做到点击标记点时&a…

LeetCode 力扣 热题 100道(十四)二叉树的中序遍历(C++)

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 如下为代码: /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullpt…

极兔速递开放平台快递物流查询API对接流程

目录 极兔速递开放平台快递物流查询API对接流程API简介物流查询API 对接流程1. 注册用户2. 申请成为开发者3. 企业认证4. 联调测试5. 发布上线 签名机制详解1. 提交方式2. 签名规则3. 字段类型与解析约定 物流轨迹服务极兔快递单号查询的其他方案总结 极兔速递开放平台快递物流…

SpringBoot3如何基于ServletRequestHJandledEvent检测接口响应时间以及对应的参数

在 Spring Boot 3 中,可以通过实现 ServletRequestHandledEvent 事件来监测接口的响应时间以及相关的参数。ServletRequestHandledEvent 是 Spring 的应用事件之一,它在请求处理完成时发布,包含有关请求的信息。 以下是一个步骤指南&#xff…

44 基于32单片机的博物馆安全监控系统设计

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 检测 分别是温湿度 光照 PM2.5、烟雾、红外,然后用OLED屏幕显示, 红外超过阈值则蜂鸣器报警,这是防盗报警;温度或烟雾超过阈值,则蜂鸣器…

视频 的 音频通道提取 以及 视频转URL 的在线工具!

视频 的 音频通道提取 以及 视频转URL 的在线工具! 工具地址: https://www.lingyuzhao.top/toolsPage/VideoTo.html 它提供了便捷的方法来处理视频文件,具体来说是帮助用户从视频中提取音频轨道,并将视频转换为可以通过网络访问的URL链接。无…

利用红黑树封装map,和set,实现主要功能

如果不知道红黑树是什么的时候可以去看看这个红黑树 思路 首先我们可以把封装分为两个层面理解,上层代码就是set,和map,底层就是红黑树 就相当于根据红黑树上面套了两个map,set的壳子,像下面这张图一样 对于map和set,map里面存…

电子应用设计方案-39:人工智能系统方案设计

人工智能系统方案设计 一、引言 随着人工智能技术的快速发展,越来越多的领域开始应用人工智能系统来解决复杂的问题和实现智能化的任务。本方案旨在设计一个通用的人工智能系统框架,以满足不同业务需求和应用场景。 二、系统概述 1. 系统目标 - 提供高…