监督学习算法 之 决策树

我们已经介绍过线性回归和逻辑回归。本文介绍机器学习算法里最贴合人类日常决策思维的模型 - 决策树。

1、大白话说 决策树

你去超市 买西瓜 挑一个好西瓜,遵循以下"五步法":

(1)看瓜皮纹路:瓜皮纹路清晰规整、舒展自然,且条纹深浅对比明显

(2)看瓜底:瓜底发黄且颜色越深、越均匀,说明光照充分、自然熟透、糖分积累充足

(3)看瓜藤与瓜脐:瓜藤翠绿、鲜嫩且自然微弯;瓜脐小、微微向内凹陷

(4)听声音:清脆浑厚、有回弹的"咚咚声",有震动感

(5)掂重量:手感越沉的,说明果肉水分充足、质地饱满

完整走完这一套分层判断的流程,就能精准筛选出优质西瓜,这个过程和决策树的运行逻辑完全契合。从结构上看类似一棵倒过来的树,就是所说的决策树。

决策树包括:

(1)根节点:第一个判断条件(看瓜皮纹路)

(2)内部节点:每一层的细分判断条件,分叉出来的树枝是判断结果

(3)叶节点:最终的结论(好瓜/坏瓜)

决策树就是机器通过学习历史数据,自动总结出一套分层判断规则,以后遇到新数据,就顺着这套规则逐级判断,最终输出预测结果。

总结来说:决策树算法干的事,就是让计算机自己从历史数据里学会这套"提问逻辑"

它会不停地问:"先用哪个特征切分数据,能最快地把'好瓜'和'坏瓜'分开?"

这种"如果......那么......"的逻辑,让决策树拥有了机器学习领域少有的"可解释性"。你可以直接把树画出来解释原因。

2、数学模型

决策树的核心是:通过量化数据混乱度,筛选最优划分特征(找到最好的问题)

机器训练决策树的过程,就是不断找"能让数据变得最有序、最纯净"的特征作为判断条件,层层拆分,直到数据足够纯净、可以直接输出结果。

数据的 纯度和混乱度

(1)如果一组数据里全是同一类样本,说明数据纯度极高、混乱度为0

(2)如果一组数据里各类样本混杂、比例均衡,说明混乱度极高、纯度极低

想象两堆瓜子:

  • A堆:全是红瓜子。(很纯净,不混乱)
  • B堆:红、白、黑各占三分之一。(很混乱)

决策树的训练目标:每一次划分,都最大限度降低数据混乱度、提升纯度。

如何量化"混乱程度"

有两个最常用的指标用于衡量混乱程度:熵(Entropy)基尼系数(Gini)

"熵"(读音:shāng)是物理学里的一个概念,后来被香农引入信息论。你可以把它粗暴地理解为"混乱程度"或者"不确定度"。

举个栗子:

低熵状态:你手里握着5个硬币,全是正面朝上。这时候系统很"纯净",不确定性极低。

高熵状态:5个硬币里,正面、反面、甚至立起来的都有。这时候系统很"混乱",不确定性极高。你完全猜不到下一个拿出来的是什么。

  • 熵(Entropy):可以理解为"不确定性"。B堆的熵就很高,因为你随便抓一把,不知道会抓出什么颜色。
  • 基尼系数(Gini):它衡量的是"随便抽两个样本,类别不一样的概率"

树的生长策略

决策树的生长策略:每次分裂,都选择能让"混乱程度"下降最快的那个特征,就是想尽办法降低系统的熵值。

通过不断地"提问"(分裂节点),把原本混乱的数据(混合了好瓜和坏瓜),变得越来越纯净(全变成好瓜,或者全变成坏瓜)。

决策树终止

当数据集完全纯净(所有样本属于同一类)、没有更多特征可用、或者达到预设的树深度(防止过拟合)时,树停止生长。

3、最佳落地场景

凡是需要"白盒决策"、需要把模型结论翻译成"业务规则"的场景,都是决策树的最佳落脚点,因此决策树依然是金融、医疗、政务等传统行业的"心头好"。

常见应用场景

金融风控

银行每天要处理成千上万个贷款申请,人工审不过来,又不能乱拒。

决策树把专家经验固化成规则。

决策树可以明确告诉拒绝原因,黑箱模型很难做到。

医疗辅助诊断

一些常见病初筛中,决策树常被用作辅助工具。根据患者的血常规指标、影像学特征,一步步缩小怀疑范围。

设备故障预警

根据 监测温度、振动频率、电流波动 做故障预判。

相关推荐
学计算机的计算基1 小时前
操作系统内存管理全解:虚拟内存、页表、COW、malloc、OOM一篇搞定
java·笔记·算法
tachibana21 小时前
hot100 前 K 个高频元素(347)
java·数据结构·算法·leetcode
AOwhisky1 小时前
Python 学习笔记(第五期)——组合数据类型:列表、元组、集合与字典精讲——核心知识点自测与详解
开发语言·笔记·python·学习·云计算
woshihuanglaoshi1 小时前
数据迁移与版本管理 - Flutter在鸿蒙平台实现数据库升级策略
数据库·学习·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
To_OC9 小时前
LC 131 分割回文串:刚学回溯时,我连怎么切字符串都想不明白
javascript·算法·leetcode
旖-旎10 小时前
LeetCode 518:零钱兑换||(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
To_OC11 小时前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
世人万千丶11 小时前
参数管理_Flutter在鸿蒙平台路由参数最佳实践
学习·flutter·华为·harmonyos·鸿蒙
delishcomcn11 小时前
AI视觉识别+分切算法:电化铝缺陷检测与裁切一体化解锁
人工智能·算法