【机器学习】决策树 随机森林

1. 决策树是什么?

决策树就是一个**"连环追问"**的流程图,帮你一步步做出决定。

  • 核心结构 :像一棵倒长的树,有根节点 (第一个问题)、内部节点 (后续问题)、分支 (问题的答案)和叶节点(最终结论)。
  • 生活例子 :妈妈要给你介绍对象,决策过程可能是:
    • 问题1:长得帅吗? → 是
    • 问题2:有房吗? → 是
    • 结论:(叶节点)

2. 决策树是怎么构建的?

具体步骤

构建的核心原则是:每次提问,都要让剩下的"不确定性"减少得最多(也就是让数据分得最开)。

具体构建步骤(以分类树为例):

  1. 把所有数据放在根节点
  2. 寻找最佳分裂点 :遍历所有特征(比如"颜值"、"收入"),计算如果按这个特征划分,数据混乱程度(熵)降低多少。降低最多的那个特征,就是当前节点的分裂依据。
  3. 分裂成子节点:根据该特征的不同取值(如"帅/不帅"),把数据分成几堆。
  4. 递归重复:对每一个子节点,重复步骤2和3,继续分裂。
  5. 停止生长 :直到节点里的数据全是同一类(全嫁或全不嫁),或者没有特征可用,或者树已经达到预设的最大深度,就停止,形成叶节点

节点的选择

构建决策树的核心,就是在当前节点的所有数据中,找到一个特征 和一个分裂阈值,使得分裂后,子节点里的数据尽可能"纯"(即尽量属于同一类)。

怎么衡量"纯不纯"? 常用三大指标(三选一):

  1. 信息增益(基于熵):看混乱度下降了多少。下降越多越好。
  2. 基尼系数(Gini):看随机抽两个样本,它们不是同一类的概率。这个概率越小越好(最常用,因为计算快)。
  3. 方差减少(MSE):用于回归树,看分裂后误差减小了多少。

为了让你秒懂,我们重点拿"基尼系数"(因为sklearn默认用它)。

基尼系数

节点不纯度计算

设数据集为 DDD,共有 KKK 个类别,pkp_kpk 为第 kkk 类样本占比:

Gini(D)=1−∑k=1Kpk2 Gini(D) = 1 - \sum_{k=1}^{K} p_k^2 Gini(D)=1−k=1∑Kpk2

特征分裂后的加权基尼指数

若特征 AAA 将 DDD 分成 VVV 个子集 DvD_vDv:

Ginisplit(D,A)=∑v=1V∣Dv∣∣D∣⋅Gini(Dv) Gini_{split}(D, A) = \sum_{v=1}^{V} \frac{|D_v|}{|D|} \cdot Gini(D_v) Ginisplit(D,A)=v=1∑V∣D∣∣Dv∣⋅Gini(Dv)

二分类简化形式

当 K=2K=2K=2 时,设正类比例为 ppp:

Gini(D)=2p(1−p) Gini(D) = 2p(1-p) Gini(D)=2p(1−p)

分裂准则

在CART(分类与回归树)算法中,选择使得 Ginisplit(D,A)Gini_{split}(D, A)Ginisplit(D,A) 最小的特征 AAA 进行分裂。

正式分裂------选出本节点的"最优解"

刚才我们分别计算了:

  • "有无房产"基尼下降 0.23
  • "年收入"的最佳切分点(假设在20万处)基尼下降 0.35

决策树的逻辑基尼下降最大的那个特征 + 对应的切分条件,就是当前节点的最优选择。

  • 如果"年收入"胜出,那么当前节点就写:"年收入 ≤ 20万?"
  • 左边走"≤20万",右边走">20万"。

3. 随机森林是什么?

一句话概括 :随机森林就是把很多棵"弱弱"的决策树集合在一起,通过投票来做决策。

  • 核心思想"三个臭皮匠,顶个诸葛亮"。单棵树容易"死记硬背"(过拟合),但几百棵树一起投票,准确率更高,也更稳定。
  • 生活例子 :不是问一个媒人"这人行不行",而是请100个媒人(每人的标准略有不同)分别看这个人,最后统计哪个结论(嫁/不嫁)票数多,就听谁的。

4. 随机森林的"森林"是怎么构建的?

构建森林的核心原则是:"双重随机" 。这保证了每棵树都是独一无二的。

具体构建步骤(假设要建100棵树):

  1. 随机挑选数据(行抽样)

    • 从原始数据集中,有放回地随机抽取同样数量的样本(这叫Bagging)。这意味着有些样本会被抽到多次,有些一次也没抽到(这些叫OOB数据,用来做内部验证)。
    • 每棵树用的数据集都不一样
  2. 随机挑选特征(列抽样)

    • 传统决策树会考虑所有特征去找最佳分裂点,但随机森林不这样。
    • 在每一棵树的每一个节点准备分裂时,只随机从所有特征中选出一小部分(比如总共100个特征,只随机选10个)。
    • 强制这棵树只能从这10个特征里选最好的那个来分裂。
  3. 分别生长

    • 基于以上"双重随机"选出的数据和特征,让每一棵树按照正常的决策树构建方式(但不剪枝,让它尽量长深)自由生长。
  4. 合成森林

    • 把生成的100棵完全不同的树组合在一起,就构成了随机森林
相关推荐
咖啡星人k30 分钟前
2026 AI Agent 记忆系统:让智能体告别“三秒失忆“,像人类一样越用越懂你(MonkeyCode 实战)
人工智能·深度学习·机器学习·语言模型·自然语言处理
墨染天姬44 分钟前
[人工智能训练师]机器学习的流程
人工智能·机器学习
大模型码小白1 小时前
MCP协议开发实战:从零搭建AI Agent工具链
运维·人工智能·算法·机器学习·自动化
Omics Pro1 小时前
整合多组学分析+生物医学发现!对话式多智能体AI
数据库·人工智能·mysql·机器学习·自然语言处理
梦想的颜色1 小时前
ComfyUI 深度硬核科普:节点式 AI 生成框架完整实战(安装、原理、使用场景、避坑)
人工智能·机器学习·计算机视觉·aigc·comfyui·ai视频·图生视频
流浪0012 小时前
大模型技术全景(一):AI、机器学习、深度学习,三者的关系到底是什么?一文搞懂
人工智能·深度学习·机器学习
sel_914 小时前
【PEFT】参数高效微调(PEFT)技术详解:从原理到 LoRA/QLoRA 实战
人工智能·python·深度学习·算法·机器学习·参数高效微调
阳明山水15 小时前
Mamba与两阶段XGBoost的融合架构:面向间歇性需求的双路径预测框架
人工智能·深度学习·算法·机器学习·架构
千里码aicood16 小时前
基于SNMP+LLDP的某企业网络设备管理系统的设计与实现
机器学习