1. 决策树是什么?
决策树就是一个**"连环追问"**的流程图,帮你一步步做出决定。
- 核心结构 :像一棵倒长的树,有根节点 (第一个问题)、内部节点 (后续问题)、分支 (问题的答案)和叶节点(最终结论)。
- 生活例子 :妈妈要给你介绍对象,决策过程可能是:
- 问题1:长得帅吗? → 是
- 问题2:有房吗? → 是
- 结论:嫁(叶节点)
2. 决策树是怎么构建的?
具体步骤
构建的核心原则是:每次提问,都要让剩下的"不确定性"减少得最多(也就是让数据分得最开)。
具体构建步骤(以分类树为例):
- 把所有数据放在根节点。
- 寻找最佳分裂点 :遍历所有特征(比如"颜值"、"收入"),计算如果按这个特征划分,数据混乱程度(熵)降低多少。降低最多的那个特征,就是当前节点的分裂依据。
- 分裂成子节点:根据该特征的不同取值(如"帅/不帅"),把数据分成几堆。
- 递归重复:对每一个子节点,重复步骤2和3,继续分裂。
- 停止生长 :直到节点里的数据全是同一类(全嫁或全不嫁),或者没有特征可用,或者树已经达到预设的最大深度,就停止,形成叶节点。
节点的选择
构建决策树的核心,就是在当前节点的所有数据中,找到一个特征 和一个分裂阈值,使得分裂后,子节点里的数据尽可能"纯"(即尽量属于同一类)。
怎么衡量"纯不纯"? 常用三大指标(三选一):
- 信息增益(基于熵):看混乱度下降了多少。下降越多越好。
- 基尼系数(Gini):看随机抽两个样本,它们不是同一类的概率。这个概率越小越好(最常用,因为计算快)。
- 方差减少(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棵树):
-
随机挑选数据(行抽样):
- 从原始数据集中,有放回地随机抽取同样数量的样本(这叫Bagging)。这意味着有些样本会被抽到多次,有些一次也没抽到(这些叫OOB数据,用来做内部验证)。
- 每棵树用的数据集都不一样。
-
随机挑选特征(列抽样):
- 传统决策树会考虑所有特征去找最佳分裂点,但随机森林不这样。
- 在每一棵树的每一个节点准备分裂时,只随机从所有特征中选出一小部分(比如总共100个特征,只随机选10个)。
- 强制这棵树只能从这10个特征里选最好的那个来分裂。
-
分别生长:
- 基于以上"双重随机"选出的数据和特征,让每一棵树按照正常的决策树构建方式(但不剪枝,让它尽量长深)自由生长。
-
合成森林:
- 把生成的100棵完全不同的树组合在一起,就构成了随机森林。