机器学习系列六【打破线性束缚——深入理解决策树与随机森林】
机器学习系列六【打破线性束缚——深入理解决策树与随机森林】
JayVei机器学习系列六:打破线性束缚——深入理解决策树与随机森林
欢迎来到“机器学习系列”的第六篇文章!在前面的文章中,我们学习了线性回归和逻辑回归。它们非常优雅,但都有一个共同的局限性:它们本质上都是在画“直线(或超平面)”。
如果数据像太极图一样互相嵌套,或者特征之间的关系非常复杂,一条直线根本切不开怎么办?今天,我们将彻底打破线性的束缚,向你介绍一种不仅极其强大,而且非常符合人类直觉的算法模型——决策树(Decision Tree),以及它的进阶完全体——随机森林(Random Forest)。
1. 什么是决策树?(像人类一样做决定)
如果你玩过“猜猜看(20个问题)”的游戏,你就已经掌握了决策树的精髓。
假设你要判断今天是否适合去打网球。你不会去算一个复杂的线性公式,而是会在脑海中走一个流程图:
- 今天天气怎么样?(晴天 / 阴天 / 雨天)
- 如果是晴天,紫外线强不强?(强 -> 不去;弱 -> 去)
- 如果是雨天,风大不大?(大 -> 不去;小 -> 去)
决策树本质上就是一个由“节点”和“分支”组成的树状结构。 * 根节点与内部节点:代表对某一个特征的测试(例如“天气”)。
- 分支:代表测试的结果(例如“晴天”)。
- 叶子节点:代表最终的分类结果或预测值(例如“去打球”或“不去”)。
通过对特征提出一系列的“如果是这样,那就那样”的问题,决策树极其巧妙地把复杂的数据空间划分成了多个矩形区域。它不需要数据是线性可分的,它可以切出各种阶梯状的非线性边界!
2. 核心问题:树该怎么长?(信息熵与基尼系数)
决策树的原理看似简单,但如果你是计算机,面对成百上千个特征,你会面临一个灵魂拷问:我该先问哪个问题?(即:我该选哪个特征作为根节点?)
直觉告诉我们:一个好问题,应该能让剩下的选项变得尽可能的“纯”。为了衡量这种“纯度”,我们需要引入数学工具。
2.1 信息熵(Information Entropy)
在信息论中,熵代表了系统的混乱程度。一个集合里包含的类别越杂乱,熵就越高;类别越单一(纯),熵就越低。假设一个分类问题有 $K$ 个类别,第 $k$ 类的概率为 $p_k$,那么系统的熵定义为:
$$H(X) = -\sum_{k=1}^{K} p_k \log_2 p_k$$
决策树的生长原则:每次都在所有特征中,挑选出那个能让划分后数据的信息熵下降最多(即信息增益最大)的特征来作为分裂节点。
2.2 基尼系数(Gini Impurity)
除了信息熵,另一种常用的纯度衡量标准是基尼系数(CART 决策树默认使用)。它的计算稍微简单一些:
$$Gini(X) = 1 - \sum_{k=1}^{K} p_k^2$$
同样的,基尼系数越小,代表数据越纯。决策树每次都会寻找能让基尼系数降到最低的特征进行劈裂。
3. 决策树的致命弱点:过拟合与剪枝
如果你不对一棵决策树加以限制,它会像疯了一样疯狂生长,直到每一个叶子节点里只包含一个样本。这意味着它完美地“死记硬背”了训练集里的每一个细节(哪怕是噪音)。
结果就是:模型在训练集上准确率 100%,但在测试集上一塌糊涂。这就是极度的过拟合(Overfitting)。
为了防止树长得太深、太繁茂,我们需要对它进行剪枝(Pruning)。
- 预剪枝:在树生长的过程中,提前设定规则。比如“树的最大深度不能超过 5 层”,或者“如果一个节点里的样本少于 10 个,就停止分裂”。
- 后剪枝:让树先长到最大,然后从下往上评估,把一些对泛化能力没有帮助的枝丫砍掉。
💡 思考:就算剪了枝,单棵决策树依然像一个固执的人,容易受到训练数据中微小变动的影响(方差大)。我们该如何彻底解决这个问题呢?
4. 众人拾柴火焰高:随机森林(Random Forest)
俗话说:“三个臭皮匠,顶个诸葛亮”。在机器学习中,这种思想被称为集成学习(Ensemble Learning)。而随机森林,就是集成学习中最闪耀的明星之一。
既然一棵树容易过拟合且不稳定,那我们就种一片森林!随机森林的核心机制可以概括为四个字:Bagging(装袋法)与随机性。
为了保证森林里的每一棵树都不一样(如果都一样,那集成也就失去了意义),随机森林引入了双重随机:
- 样本随机(行采样):
从总共 $N$ 个训练样本中,有放回地随机抽取 $N$ 个样本,训练一棵树。这意味着每棵树看到的训练数据都是略有不同的。 - 特征随机(列采样):
在决策树的每个节点分裂时,不考虑所有的特征,而是随机抽取一部分特征(例如总特征数的平方根),从这部分特征中寻找最佳分裂点。
随机森林如何做决策?
当有新的数据需要预测时,森林里的每一棵决策树都会独立给出一个结果。
- 分类问题:少数服从多数,大家投票决定(Voting)。
- 回归问题:求所有树预测值的平均数(Averaging)。
通过引入随机性并把众多决策树的结果平均起来,随机森林奇迹般地抵消了单棵树的过拟合倾向,极大地提升了模型的稳定性和准确率。它是你在面对结构化数据时,绝对应该首选的“基准模型”。
5. 总结
- 决策树打破了线性模型的束缚,通过不断地进行条件判断来切分数据空间。它解释性极强,计算过程就像人类做决策。
- 信息熵和基尼系数是决策树寻找最佳分支的数学罗盘。
- 随机森林通过“样本随机”和“特征随机”构建了成百上千棵各不相同的决策树,通过群体投票的方式,完美克服了单棵树容易过拟合的缺陷。
从线性模型到树模型,你的机器学习武器库已经极其丰富了!
太棒了!这正是让读者直观感受到决策树魅力的最佳方式。当读者亲眼看到模型自动生成的“思考流程图”时,他们会对算法的“可解释性”有极其深刻的印象。
你可以将以下实战代码和解析直接追加到《机器学习系列六》的末尾。
6. 实战演练:用 Python 种一棵决策树并可视化
理论听起来很神奇,但用代码实现其实只需要几行。在 Scikit-Learn 中,我们不仅能轻松训练一棵决策树,还能直接把它“脑海中的思考过程”画出来!
这里我们使用机器学习界极其经典的鸢尾花(Iris)数据集。我们的目标是根据花瓣和花萼的尺寸,让决策树自动学会判断鸢尾花的品种。
1 | import matplotlib.pyplot as plt |
如何阅读这棵树?
当你运行上述代码后,会弹出一张漂亮的树状结构图。每一个方块(节点)里都包含了以下核心信息:
- 测试条件(例如
petal length (cm) <= 2.45):这是模型在当前节点提出的“核心问题”。如果某个样本满足这个条件,它就会走到左边的分支(True);不满足则走右边(False)。 - gini:当前节点的基尼系数。你可以清晰地观察到,越往下走,叶子节点的 gini 值越接近 0(代表数据越来越纯)。
- samples:当前节点处理的样本总数。
- value:当前节点中,不同类别样本的具体数量分布(例如
[50, 50, 50])。 - class:如果在这个节点直接停止并做出预测,模型会得出的类别。节点背景颜色的深浅,直观地反映了该类别的纯净程度。
通过这张图,你可以极其清晰地向老板或非技术同事解释模型的决策依据:“为什么模型判定这是一朵杂色鸢尾(versicolor)?因为它的花瓣长度大于 2.45 厘米,并且花瓣宽度小于 1.75 厘米。”
这就是决策树无与伦比的业务解释力!
单棵树的可视化非常适合用来解释业务逻辑,但如果要追求极致的预测性能,我们通常会使用随机森林。
7. 进阶实战:随机森林的隐藏大招——“特征重要性”(Feature Importance)
在上一节中,我们成功把单棵决策树的“大脑”剖开看了看。但是,如果换成随机森林呢?里面动辄成百上千棵树,我们显然不可能把它们全部画出来。
这就带来了一个问题:随机森林虽然预测极准,但它变成了一个难以解释的“黑盒”。为了解决这个问题,随机森林为数据科学家提供了一个极其强大的副产品:特征重要性(Feature Importance)。
怎么理解特征重要性?
既然随机森林里的每一棵树都在努力用不同的特征去降低数据的“不纯度”(如基尼系数),那么我们只需要统计一下:在整片森林中,哪个特征为降低不纯度做出的总贡献最大? 贡献越大的特征,自然就越重要。
这就相当于模型在默默地帮你完成特征选择(Feature Selection)。我们来看看具体的代码实现。
Python 实战:揪出影响乳腺癌的关键特征
为了展示特征选择的威力,我们这次换一个特征更多的经典数据集:乳腺癌数据集(Breast Cancer Dataset)。它包含了 30 个不同的细胞特征(如半径、纹理、周长等),我们要用随机森林找出,到底哪几个特征对判断肿瘤是良性还是恶性起着决定性作用。
1 | import numpy as np |
运行结果与业务价值解析
运行这段代码后,你会得到一张非常直观的水平柱状图,以及终端打印出的前 5 大特征排名。
你会惊讶地发现,在这 30 个特征中,绝大多数的权重都非常低,而排名前三的特征(通常是“细胞凹陷程度 worst concave points”、“细胞周长 worst perimeter”、“细胞面积 worst area”等)加起来可能就占据了超过 50% 的重要性!
这个“隐藏大招”在实际业务中有着无可替代的价值:
- 降维打击,提升效率:如果 30 个特征里只有 5 个真正有用,我们完全可以把剩下的 25 个特征扔掉,重新训练模型。这不仅能极大地加快训练速度,还能防止无用特征带来的噪音干扰。
- 业务洞察,指导决策:如果是电商流失预测模型,随机森林告诉你“最近一次登录时间”和“客服投诉次数”是最重要的特征,老板就可以立刻针对这两点制定挽留策略,而不是盲目地去搞全场打折。
8. 总结
至此,我们的树模型之旅就告一段落了。
- 决策树就像一位逻辑严密的探长,拿着放大镜(信息熵/基尼系数)一步步缩小范围,虽然容易钻牛角尖(过拟合),但极其透明。
- 随机森林则像是一个由成百上千位探长组成的智囊团。他们各自查看不同的线索(特征随机),询问不同的证人(样本随机),最后汇总投票。它不仅预测极其稳健,还能顺手塞给你一份“关键线索排行榜(特征重要性)”。
无论你面对的是结构化数据的比赛(如 Kaggle),还是真实公司的业务报表,随机森林都应该是你第一个掏出来的“重武器”!
(《机器学习系列六》完)




