第14章:集体智慧——决策树与随机森林
前面几章我们聊的分类器——逻辑回归、SVM——都有一个共同特点它们把整个数据集揉成一个数学公式然后一刀切下去。一刀切有它的好处干净、利落、有理论保证。但它也有一个隐含的假设——数据背后有一个可以用公式描述的整体规律。如果这个规律根本就不是一个公式呢如果它是一连串的“如果……那么……”呢比如你要判断一个人会不会买某款车。你可能会先问“他年收入多少”再问“他有没有孩子”再问“他住在城市还是郊区”。每一个问题都在缩小候选范围最后一个问题问完你大概就知道答案了。这种“一问一答、逐步逼近”的逻辑就是决策树在做的事情。二十个问题的游戏决策树的直觉来自一个你小时候可能玩过的游戏——“二十个问题”。一个人心里想一个东西另外一个人通过提问来猜。“是动物吗”“是活物吗”“它会飞吗”“它吃草吗”……每问一个问题答案“是”或“不是”就把范围缩小一半。通常在二十个问题之内你就能猜出来。决策树就是把这个逻辑变成算法。它的工作原理是这样的你有一个数据集每个样本有若干特征比如“年收入”“有没有孩子”“住在哪”还有一个标签“买”或“不买”。你要做的是找出一个“最好的问题”来先把数据集分成两堆。然后对每一堆再找下一个“最好的问题”继续分。一直分下去直到每一堆里的样本标签都基本一致——或者你决定停下来。最终的结果就是一棵倒挂的树。最上面是“根节点”——第一个问题。中间是“内部节点”——后续的问题。最下面是“叶子节点”——最终判断结果。这棵树的每一片叶子都对应了一条从根到叶的“决策路径”收入高→有孩子→住城市→会买。什么是“最好的问题”你注意到了吗——整个算法的核心是“怎么选最好的问题”。在每一步你需要从所有特征和所有可能的取值里挑出一个能把当前这堆数据“切得最干净”的问题。“最干净”的意思是分出来的两堆各自内部的标签越统一越好。比如你有一堆人一半买、一半不买。你问“年收入大于50万吗”左边是“是”右边是“不是”。如果左边的人几乎都买右边的人几乎都不买——那这个问题就是“好问题”。它把混乱的数据分成了两个纯净的组。衡量“混乱程度”的指标就是我们在第10章讲过的熵。一个数据集越混乱——两类各占一半——熵就越高接近1。一个数据集越纯净——全部是同一类——熵就越低接近0。决策树的每一层都在计算用这个问题分完之后左右两堆的加权熵之和减少了多少减少得越多这个问题就越好。这个“熵的减少量”在决策树里有一个专门的名字叫信息增益。用信息增益来选问题就是决策树的核心训练算法。一棵树太容易“背答案”决策树有一个致命的弱点它太擅长“背答案”了。如果你不给它设限制它会一直往下分直到每一个叶子节点里只剩一个样本或者全部同类别。这意味着它完美地记住了你给它的每一个训练样本。这听起来像是好事但实际上是大问题。因为它记住的是“这些特定的样本”而不是“数据背后的规律”。当它遇到没见过的新样本时很容易做出错误的判断。这个现象叫过拟合——我们在第15章会详细讲。直观来说这就像一个学生把课本上的例题全部背下来但考试题目只要换一换数据他就完全不会做了。为了防止决策树过度“背诵”你需要做两件事。第一件是剪枝。树长得太茂盛了就砍掉一些不必要的分支——那些对提升分类准确率贡献很小、只是“恰好”记住了某几个样本的分支全部剪掉。第二件是设置停止条件。比如规定“叶子节点至少要有10个样本”或者“树的最大深度不超过5层”。这些限制让决策树没法把每个样本都记住被迫学“规律”而不是“个例”。即便如此单棵决策树仍然是个有点脆弱的模型。你给训练数据稍微加一点噪声——比如把某几个样本的标签改一下——整棵树的结构可能就会大变。它太敏感了。种一片森林随机森林如果一棵树太敏感、太容易过拟合那我们就种一片森林。随机森林就是一堆决策树的集合。每棵树都用不同的数据子集和不同的特征子集来训练各自做出自己的判断然后投票决定最终答案——大多数树说是A结果就是A。这个“投票”机制有两个好处。第一它极大地降低了过拟合的风险。单棵树可能会“记住”训练数据里的噪声但在一个几百棵树的森林里几棵树记错了无所谓大部分树的判断会“平均掉”那些偶然的噪声得出更稳健的结论。第二它非常灵活。你可以往随机森林里扔任何类型的数据——数值、类别、文本经过编码后——它都能处理。不像线性回归要求数据大致线性不像SVM需要调复杂的核函数参数随机森林的默认参数在很多问题上就已经表现不错。在深度学习的时代之前随机森林是很多数据科学竞赛的“默认首选”。因为它简单、稳健、不需要太多调参而且结果通常很好。一个直观的比喻怎么理解单棵决策树和随机森林的区别单棵决策树像一个经验丰富的专家。他问了你十几个问题之后给你一个诊断。他很自信但他偶尔也会犯错——而且一旦犯错往往错得很离谱因为他太依赖那棵树上特定的问题链了。随机森林像二十个不同背景的普通医生。每个医生分别问你一些问题——但每个医生问的问题不太一样侧重也不同。然后他们各自给出诊断再一起投票。虽然每个医生单独看都不如那个专家权威但二十个人投票的结果往往比那个专家一个人更稳定、更可靠。在机器学习里这个现象叫集成学习——把多个弱分类器组合起来形成一个强分类器。三个臭皮匠顶个诸葛亮。决策树和随机森林留下的东西决策树是机器学习里最“白盒”的算法之一。你随时可以打开它看它在每一步问了什么问题、为什么那样分支。不像神经网络——你给它输入它给你输出中间发生了什么完全是个黑箱——决策树的每一片叶子都清晰可读。在有些必须解释决策理由的场景里比如贷款审批、医疗诊断决策树和随机森林仍然有不可替代的地位。而且随机森林还有一个隐藏的福利它会告诉你哪些特征重要。因为每一棵树的每一次分裂都在用某个特征把“用这个特征带来的信息增益”在整个森林里平均一下你就能排出一个特征重要性榜单。你会发现“年收入”比“有没有孩子”重要三倍而“住在哪”几乎没什么用——这个信息本身比你那棵分类树的价值还要大。下一章我们要做一个“中场总结”。把前面几章学过的模型放在一起看一个贯穿所有机器学习的问题模型的“好”和“坏”到底怎么判断参考文献Breiman, L. (2001). Random Forests.Machine Learning, 45(1), 5–32.推荐理由随机森林的原始论文。布雷曼在开篇就用一段极其直白的话解释了“为什么多棵树投票比一棵树强”——如果你只想看一段就读引言部分全是白话没有任何公式。Quinlan, J. R. (1986). Induction of Decision Trees.Machine Learning, 1(1), 81–106.推荐理由ID3算法的原始论文这是决策树算法在机器学习领域的奠基之作。Quinlan在这篇文章里第一次系统地把“熵”和“信息增益”作为决策树分裂的准则。虽然ID3后来被C4.5和CART超越但它的核心逻辑——用信息增益选问题——仍然是今天所有决策树的基石。StatQuest with Josh Starmer. (2019). Decision and Classification Trees, Clearly Explained!!!. YouTube. https://www.youtube.com/watch?v_L39rN6gz7Y推荐理由StatQuest是YouTube上最受欢迎的机器学习科普频道之一主讲人Josh Starmer用独特的动画和通俗幽默的语言把复杂概念讲得极其透彻。这期视频从零开始一步一步演示了决策树如何在二维平面上用水平和竖直分割线把数据切成矩形区域。配合本篇阅读文字和动画相互印证理解门槛会大幅降低。该视频被多所高校的课程列为决策树入门首选资源。