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

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棵完全不同的树组合在一起,就构成了随机森林
相关推荐
雾屿_Mistisle4 小时前
模型窃取与隐私泄露(二)模型反演与模型提取
机器学习·数据分析
别动我齐刘海5 小时前
ROS2 Jazzy + C++ 实战路线——基础学习2
c++·人工智能·vscode·python·学习·机器学习·机器人
tellmewhoisi6 小时前
机器学习:集成学习2(GBDT算法)
机器学习
tellmewhoisi6 小时前
机器学习:朴素贝叶斯
机器学习
逻辑君6 小时前
MoreLogic RAG 个人免费版 · 产品宣传手册和产品白皮书
人工智能·机器学习
雾屿_Mistisle6 小时前
AI安全设计总结
人工智能·机器学习·数据分析
皇儒无上7 小时前
智慧矿山-关于推进山西省煤矿灾害差异化智能化建设强化 AI 风险防控的政策建议
人工智能·机器学习·区块链
雾屿_Mistisle8 小时前
对抗样本攻击(四)对抗训练
机器学习·数据分析
Rocky Ding*8 小时前
【三年面试五年模拟】阿里巴巴-千问技术部算法一面全解析
论文阅读·人工智能·深度学习·机器学习·aigc·ai-native·ai agent
xx_xxxxx_8 小时前
论文阅读-REINFORCE++与Lessons of Developing PRMs
人工智能·深度学习·机器学习·强化学习