决策树算法详解:从西瓜分类到实战应用

目录

0. 引言

1. 决策树是什么?

1.1 生活中的决策树

1.2 专业版决策树

2. 如何构建决策树?

2.1 关键问题:选哪个特征先判断?

2.1.1 信息熵(数据混乱度)

2.1.2 信息增益(划分后的整洁度提升)

2.1.3 增益率(修正版信息增益)

2.1.4 基尼指数(不纯度指标)

3. 经典算法对比

4. 实战案例:西瓜分类

4.1 数据集

4.2 信息增益计算全过程

4.2.1 计算初始熵

4.2.2 计算各特征的信息增益

5. 进阶技巧

5.1 基尼指数计算示例

步骤:计算每组的基尼指数

5.2 连续值处理(以密度为例)

步骤:计算每组的基尼指数

步骤:计算加权基尼指数

5.3 剪枝示例

6. 算法对比实验

7. 代码实战(伪代码)

8. 总结


0. 引言

大家好!今天我们要学习一种像"做选择题"一样的机器学习算法——决策树。想象你站在西瓜摊前,如何通过观察西瓜的特征(比如颜色、形状、声音)快速判断它是好瓜还是坏瓜?决策树就是帮你做这种"智能选择"的工具。让我们通过吃瓜群众最爱的例子,轻松掌握这个算法!


1. 决策树是什么?

1.1 生活中的决策树

假设你要买西瓜,可能会这样思考:

西瓜颜色是青绿吗?
├─是→ 瓜蒂是否蜷缩?
│   ├─是→ 敲击声是否浑浊?
│   │   ├─是→ 好瓜!
│   │   └─否→ 继续检查...
│   └─否→ 可能是生瓜
└─否→ 看看是不是乌黑皮...

这就是一棵简单的决策树!每个判断节点(如颜色、瓜蒂)都会引导我们走向最终结论。

1.2 专业版决策树

在机器学习中,决策树由以下部分组成:

  • 根节点:第一个判断条件(如"纹理是否清晰")
  • 内部节点:中间判断条件
  • 叶节点:最终结论(是/否好瓜)

2. 如何构建决策树?

2.1 关键问题:选哪个特征先判断?

就像做选择题时要选最有区分度的问题,决策树需要选择"最有价值"的特征优先判断。这里引入三个重要概念:

2.1.1 信息熵(数据混乱度)
  • 通俗解释:想象一个装满红蓝球的箱子,如果红蓝各半(混乱度高),熵值就大;如果全是红球(很整齐),熵值就小。
  • 公式熵 = -Σ(概率 × log概率)(不用记公式,知道概念就好)
2.1.2 信息增益(划分后的整洁度提升)
  • 通俗解释:用某个特征划分数据后,混乱度降低了多少。比如先按"纹理"分,好瓜/坏瓜的区分更明显,说明信息增益大。
  • 例子:西瓜数据中,按"纹理"划分的信息增益(0.381)远高于"触感"(0.006),所以优先选纹理。
2.1.3 增益率(修正版信息增益)
  • 问题:如果某个特征有很多取值(如"编号"),信息增益可能虚高
  • 解决:C4.5算法引入增益率,相当于给信息增益加了个"公平秤",避免偏向取值多的特征
2.1.4 基尼指数(不纯度指标)
  • 通俗解释:随机抽两个样本,类别不同的概率。基尼指数越小,数据越"纯"
  • 公式基尼指数 = 1 - Σ(概率²)

3. 经典算法对比

算法

特征选择标准

树结构

特点

ID3

信息增益

多叉树

基础版,但偏好取值多的特征

C4.5

增益率

多叉树

支持缺失值,能处理连续数据

CART

基尼指数

二叉树

可做分类和回归,效率更高


4. 实战案例:西瓜分类

4.1 数据集

我们用《西瓜书》中的经典数据集(简化版):

编号

色泽

根蒂

敲声

纹理

好瓜

1

青绿

蜷缩

浑浊

清晰

2

乌黑

蜷缩

沉闷

清晰

3

青绿

硬挺

清脆

模糊

4

乌黑

稍蜷

稍糊

稍糊

5

浅白

硬挺

清脆

模糊

6

青绿

稍蜷

稍糊

稍糊

4.2 信息增益计算全过程

目标:找出最优划分特征(色泽/根蒂/敲声/纹理)

4.2.1 计算初始熵
  • 好瓜:2个,坏瓜:4个
  • 熵 = -[(2/6)log₂(2/6) + (4/6)log₂(4/6)] ≈ 0.918
4.2.2 计算各特征的信息增益

① 纹理特征(取值:清晰、稍糊、模糊)

  • 清晰(2样本):2好瓜 → 熵=0
  • 稍糊(2样本):0好瓜 → 熵=0
  • 模糊(2样本):0好瓜 → 熵=0
  • 条件熵 = (2/6)*0 + (2/6)*0 + (2/6)*0 = 0
  • 信息增益 = 0.918 - 0 = 0.918(最大)

② 根蒂特征(蜷缩、硬挺、稍蜷)

  • 蜷缩(2样本):2好瓜 → 熵=0
  • 硬挺(2样本):0好瓜 → 熵=0
  • 稍蜷(2样本):0好瓜 → 熵=0
  • 信息增益=0.918(与纹理相同)

③ 色泽特征(青绿、乌黑、浅白)

  • 青绿(3样本):1好瓜,2坏瓜 → 熵=-(1/3log₂1/3 + 2/3log₂2/3)≈0.918
  • 乌黑(2样本):1好瓜,1坏瓜 → 熵=1
  • 浅白(1样本):0好瓜 → 熵=0
  • 条件熵 = (3/6)*0.918 + (2/6)*1 + (1/6)*0 ≈0.795
  • 信息增益=0.918-0.795=0.123

结论:纹理和根蒂的信息增益最大,但实际数据中纹理更优(完整数据集计算会更复杂)


5. 进阶技巧

5.1 基尼指数计算示例

用编号1-6的数据计算"根蒂"特征的基尼指数:

  • 蜷缩(2样本):基尼=1 - (2/2)² - (0/2)² = 0
  • 硬挺(2样本):基尼=1 - (0/2)² - (2/2)² = 0
  • 稍蜷(2样本):基尼=1 - (0/2)² - (2/2)² = 0
  • 加权基尼指数 = 0 → 说明该特征划分后数据最"纯"
步骤:计算每组的基尼指数

5.2 连续值处理(以密度为例)

假设密度数据:0.245, 0.243, 0.360, 0.310, 0.287, 0.403

步骤

  1. 排序:0.243, 0.245, 0.287, 0.310, 0.360, 0.403
  2. 计算相邻中间点:
    • (0.243+0.245)/2=0.244
    • (0.245+0.287)/2=0.266
    • ...
  1. 计算每个分割点的基尼指数:
    • 以0.310为分割点:
      • ≤0.310(4样本):2好瓜 → 基尼=1-(2/4)²-(2/4)²=0.5

0.310(2样本):0好瓜 → 基尼=0

      • 加权基尼 = (4/6)*0.5 + (2/6)*0 ≈0.333
  1. 选择基尼指数最小的分割点(此处0.310最优)
步骤:计算每组的基尼指数

步骤:计算加权基尼指数

加权基尼指数的公式为:

5.3 剪枝示例

预剪枝

  • 在划分"纹理=稍糊"节点时,若验证集准确率不提升则停止生长

后剪枝

  1. 先生成完整树:
纹理=清晰 → 好瓜
纹理=稍糊 → 根蒂=蜷缩 → 好瓜→ 根蒂=稍蜷 → 坏瓜
  1. 计算剪枝后损失函数:
  • 剪枝前:误差=0.1,复杂度=3
  • 剪枝后:误差=0.2,复杂度=1
  • 若损失函数 α=0.5,则剪枝后更优

6. 算法对比实验

使用完整西瓜数据集(17条数据)进行对比:

算法

划分标准

树深度

正确率

过拟合程度

ID3

信息增益

5

88%

C4.5

增益率

4

92%

CART

基尼指数

3

90%

现象解释

  • ID3因偏好"编号"等特征导致过拟合
  • C4.5通过增益率修正,但树深度仍较大
  • CART用二分法简化结构,泛化能力更强

7. 代码实战(伪代码)

# 计算信息熵
def entropy(data):counts = count_labels(data)total = len(data)ent = 0.0for label in counts:p = counts[label]/totalent -= p * log2(p)return ent# 计算信息增益
def info_gain(data, feature):original_ent = entropy(data)values = unique_values(data, feature)new_ent = 0.0for value in values:subset = split_data(data, feature, value)weight = len(subset)/len(data)new_ent += weight * entropy(subset)return original_ent - new_ent# 选择最优特征
def choose_best_feature(data):features = get_features(data)best_gain = 0best_feature = Nonefor feature in features:gain = info_gain(data, feature)if gain > best_gain:best_gain = gainbest_feature = featurereturn best_feature

8. 总结

决策树就像一个经验丰富的老师傅,通过一系列"是/否"问题快速做出判断。虽然它不是最强大的算法,但胜在简单直观,是机器学习入门的最佳选择之一。下次买西瓜时,不妨试试用决策树来挑瓜!

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

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

相关文章

Python 标准库与数据结构

Python的标准库提供了丰富的内置数据结构和函数,使用这些工具能为我们提供一套强有力的工具。 需要注意的是,相比C与Java,Python的一些特点: Python不需要显式声明变量类型Python没有模板(Template)的概念,因为Pytho…

VUE3 路由配置

1.下载 VueRouter 模块 在命令行中输入 yarn add vue-router 2.导⼊相关函数 在自己创建的router/index.js 文件中 import { createRouter, createWebHashHistory } from vue-router 3.创建路由实例 在自己创建的router/index.js 文件中 const theFirstRouter ()>{return…

算法训练营第二十三天 | 贪心算法(一)

文章目录 一、贪心算法理论基础二、Leetcode 455.分发饼干二、Leetcode 376. 摆动序列三、Leetcode 53. 最大子序和 一、贪心算法理论基础 贪心算法是一种在每一步选择中都采取当前状态下的最优决策,从而希望最终达到全局最优解的算法设计技术。 基本思想 贪心算…

Apifox下载安装

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Apifox下载安装使用1. 下载2. 安装 &#x1…

如何区别在Spring Boot 2 和 Spring Boot 3 中使用 Knife4j:集成与配置指南

在现代的 Web 开发中,API 文档是不可或缺的一部分。Knife4j 是基于 Swagger 的增强工具,它不仅提供了更友好的 API 文档界面,还支持更多实用的功能,如离线文档导出、全局参数配置等。本文将详细介绍如何在 Spring Boot 2 和 Sprin…

超融合服务器与普通服务器的具体区别

超融合服务器与普通服务器的具体区别 超融合服务器(Hyper-Converged Infrastructure, HCI)与传统服务器在架构设计、功能整合、管理方式、性能表现及适用场景等方面存在显著差异。以下从多个维度进行详细对比分析: 一、硬件架构与资源整合 集…

(基本常识)C++中const与引用——面试常问

作者:求一个demo 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 内容通俗易懂,没有废话,文章最后是面试常问内容(建议通过标题目录学习) 废话不多…

数据库与表的操作

1. SQL 分类 SQL 根据功能分为以下几类: **DDL **: 定义数据库对象(库、表、列、索引等) 常用语句:CREATE, DROP, ALTER, RENAME, TRUNCATE示例:CREATE TABLE t_user (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHA…

2025年渗透测试面试题总结-某shopee -红队-Singapore(题目+回答)

网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 shopee -红队-Singapore 一、Linux提权方式扩展分析 二、入侵痕迹清除技术 三、真实IP发现技术 四、…

GeoChat : Grounded Large Vision-Language Model for Remote Sensing论文精读

GeoChat : Grounded Large Vision-Language Model for Remote Sensing 是一个针对遥感场景的llm,提供支持多任务对话(对高分辨率遥感图像)。也造了个数据集。 一些思考: 文中提到的局限性:小物体和多框预测较难。小物…

基于STM32的PID算法控制电机调速

一、制作目标 以STM32F103C8T6单片机作为主控,使用PID控制算法,控制TB6612FNG电机驱动板模块驱动直流减速电机(带AB相编码器),实现任意设定转速的电机转速动态控制,类似于汽车的定速巡航功能,可…

系统思考—看见未来

感谢上海财经大学终身教育学院的持续邀请!每个月,都会带着不同的思维火花,走进财大与学员们一起探索系统思考的奥秘。 这次为宜宾市的干部们带来了一场深刻的学习体验。通过系统思考,帮助大家从整体视角去发现问题、分析问题、解…

qwindowkit 编译教程

1、Windows编译及示例 1.1 下载源码 https://github.com/stdware/qwindowkit 1.2 cmake编译 1.3 VS构建 1.4 编译成功

HashMap的位操作是什么?HashSet 的 contains 方法复杂度是多少?红黑树简单讲一下?

一、HashMap 的位操作设计 HashMap 使用位运算优化哈希计算与索引定位,核心场景如下: 哈希扰动函数 计算键的哈希值时,将高16位与低16位异或: static final int hash(Object key) {int h;return (key null) ? 0 : (h key.hash…

软件开发过程中常用的调试工具(gdb)

gdb 因为我们公司其中脚本中有rk的gdb调试工具脚本,内部只需要将其打开后进行编译即可: 需要将编译出来的cvr_app 第一种:使用gdb将app给跑起来:gdb cvr_app 然后在出现问题时: 输入bt,可以打印出当前…

S32K144外设实验(七):FTM输出多路互补带死区PWM

文章目录 1. 概述1.1 时钟系统1.2 实验目的2. 代码的配置2.1 时钟配置2.2 FTM模块配置2.3 输出引脚配置2.4 API函数调用1. 概述 互补对的PWM输出是很重要的外设功能,尤其应用再无刷电机的控制。 1.1 时钟系统 笔者再墨迹一遍时钟的设置,因为很重要。 FTM的CPU接口时钟为SY…

Qt6相对Qt5的主要提升(AI总结)

我: Qt 6 相对于5 有哪些新功能? Qt 6 相对于 Qt 5 有诸多新功能和改进,以下是主要的新增特性: 1. 架构和核心库的重构 模块化设计:Qt 6 采用了更加灵活的模块化设计,开发者可以按需引入必要的功能模块&a…

一文解读DeepSeek的安全风险、挑战与应对策略

引言 DeepSeek作为中国领先的AI大模型提供商,凭借其开源、低成本和高性能的优势,迅速在全球AI市场占据重要地位。然而,随着其应用范围的扩大,DeepSeek在数据安全、模型漏洞、网络攻击等方面面临严峻挑战。本文基于最新公开资料&am…

文生图语义识别插件使用(controlnet)

1. 插件下载(github) https://github.com/Mikubill/sd-webui-controlnet https://github.com/lllyasviel/ControlNet2. 模型下载(hugging face) https://github.com/Mikubill/sd-webui-controlnet/wiki/Model-download https://huggingface.co/bdsqlsz/qinglong_controlnet-l…

论华为 Pura X 折叠屏性能检测

在科技浪潮中,折叠屏手机以其创新形态掀起市场热潮。华为 Pura X 作为华为最新折叠手机,承载前沿科技与精湛工艺,成为行业焦点。它融合先进折叠屏技术与优质材质,致力于打破传统手机使用边界,为用户开启全新体验。但产…