决策树与随机森林:从基础到进阶的深度解析
第 1 部分:揭开决策树的神秘面纱——基本构建模块
第 1 节:决策树究竟是什么?直观入门
核心思想:以结构化方式进行决策
决策树是一种基础的监督式机器学习算法,广泛应用于分类(预测类别)和回归(预测连续值)问题。其强大之处在于其直观的方法,它模仿了人类通常做决策的过程:通过提出一系列问题来缩小可能性范围,最终得出一个结论。想象一下,当您试图决定是否要去打网球时,您可能会问:“天气怎么样?”然后是“湿度如何?”等等。
决策可视化:流程图类比
决策树最吸引人的方面之一是它与流程图的相似性。这种可视化的树状结构使其相对容易理解和解释,即使对于机器学习新手也是如此。从树的最顶端(“根节点”)到最终端点(“叶节点”)的每条路径都可以直接转化为一条 IF-THEN 规则,使得决策逻辑透明化。例如,“如果天气=晴朗 且 湿度=正常 那么 打网球=是”。
决策树的构成:理解根节点、分支、决策节点和叶节点
要理解决策树的工作原理,我们首先需要了解其组成部分:
- 根节点 (Root Node): 这是最顶层的节点,代表整个数据集。第一个、也是最重要的 问题或分割发生在这里。
- 分支 (Branches): 这些是连接节点的线。每个分支代表对节点提出问题的一个可能结果或答案,引导您沿着树中的特定路径向下。
- 内部节点 (Internal Nodes) 或决策节点 (Decision Nodes): 这些节点位于根节点和叶节点之间,代表对数据某个特征(属性)的具体测试或问题。每个内部节点将数据进一步分割成更精细的子组。
- 叶节点 (Leaf Nodes) 或终端节点 (Terminal Nodes): 这些是每条路径末端的最终节点。它们不再进行分割,代表模型的最终决策或预测。对于分类问题,这是一个类别标签;对于回归问题,这是一个数值。
决策树的层级结构天然地执行了一种特征选择。靠近根节点被选择用于分割的特征,通常是那些为区分目标类别或预测整个数据集的值提供最重要信息的特征。构建决策树的算法(我们稍后会探讨)旨在每一步都找到“最佳”特征来分割数据。根节点的“最佳”特征是那个能在整个数据集中产生最大分离度或减少最多不确定性的特征。随着我们向下移动树,特征的选择基于它们分割到达该节点的数据子集的最佳能力。这种自上而下、分层的选择过程隐含地根据特征的整体判别能力对其进行排序,更具影响力的特征出现在树的更早(更高)位置。这意味着树会自然地关注最相关的属性。
树的不同类型:
- 分类树 (Classification Trees):
- 当目标是预测一个分类结果时使用这些树——也就是说,将一个实例分配给几个预定义类别中的一个。
- 例如:判断一封邮件是“垃圾邮件”还是“非垃圾邮件”,一个客户是否会“点击”或“不点击”一个广告,或者一个病人是否“患有糖尿病”或“未患糖尿病”。
- 分类树中的叶节点分配一个类别标签。这个标签通常是落入该特定叶节点的训练数据实例中的多数类别。
- 回归树 (Regression Trees):
- 当目标变量是连续的时使用这些树,意味着我们想要预测一个数值。
- 例如:预测房屋价格、明天的温度或学生考试的分数。
- 回归树中的叶节点提供一个预测的数值。这个值通常是到达该叶节点的所有训练实例的目标变量的平均值。
一个实例演练:“打网球”场景
为了使这些概念具体化,让我们使用一个经典的例子:根据天气状况决定是否打网球。这个数据集很小,并且使用了易于理解的分类特征,使其成为说明决策树如何构建以及如何进行预测的理想选择。
必不可少的表 1:“打网球”数据集。
| 天 | 天气 | 温度 | 湿度 | 有风 | 打网球 |
|---|---|---|---|---|---|
| D1 | 晴朗 | 热 | 高 | 否 | 否 |
| D2 | 晴朗 | 热 | 高 | 是 | 否 |
| D3 | 阴天 | 热 | 高 | 否 | 是 |
| D4 | 下雨 | 温和 | 高 | 否 | 是 |
| D5 | 下雨 | 冷 | 正常 | 否 | 是 |
| D6 | 下雨 | 冷 | 正常 | 是 | 否 |
| D7 | 阴天 | 冷 | 正常 | 是 | 是 |
| D8 | 晴朗 | 温和 | 高 | 否 | 否 |
| D9 | 晴朗 | 冷 | 正常 | 否 | 是 |
| D10 | 下雨 | 温和 | 正常 | 否 | 是 |
| D11 | 晴朗 | 温和 | 正常 | 是 | 是 |
| D12 | 阴天 | 温和 | 高 | 是 | 是 |
| D13 | 阴天 | 热 | 正常 | 否 | 是 |
| D14 | 下雨 | 温和 | 高 | 是 | 否 |
6
这张表格提供了原始数据,我们将用它来演示下一节中的核心计算(如熵和信息增益)。看到这些抽象的公式应用于有形的数据对于建立直觉至关重要,这是您的一个关键目标。用户明确表示他们难以理解公式并只能死记硬背。像“打网球”这样简单易懂的数据集使我们能够手动演练树的构建逻辑,展示公式如何在每次分割时指导决策过程。这将公式从抽象符号转变为实用工具。
根据这些数据,决策树可能会学习到如下规则:
- “如果 天气 = 阴天 那么 打网球 = 是”
- “如果 天气 = 晴朗 且 湿度 = 高 那么 打网球 = 否”
- “如果 天气 = 晴朗 且 湿度 = 正常 那么 打网球 = 是”
- “如果 天气 = 下雨 且 有风 = 是 那么 打网球 = 否”
- “如果 天气 = 下雨 且 有风 = 否 那么 打网球 = 是” (这些规则源自常见的“打网球”决策树结构,与 一致)。 这样的树可以用于解释(它完美地总结了所提供的 14 天内做出的决定,在这个训练数据上达到了 100% 的准确率)和预测(如果我们有一个具有特定天气条件的新的一天,我们可以导航树来预测是否会打网球)。
第 2 节:决策树如何“学习”?数据分割的科学
目标:在叶节点实现“纯净”的组
决策树从数据中“学习”时的基本目标是递归地将数据划分为子集。其目的是使这些最终的子集(由叶节点表示)在目标变量方面尽可能“纯净”或同质。对于分类树,“纯净”的叶节点理想情况下应仅包含属于一个类别的数据点(例如,所有“打网球=是”)。对于回归树,“纯净”的叶节点应包含目标值非常相似的数据点。
“纯度”的概念是理解决策树为何以特定方式分割数据的关键。我们即将讨论的所有数学公式——熵、基尼不纯度、信息增益——本质上都是量化这种纯度概念的工具,并指导树进行能够最大化纯度(或最小化不纯度)的分割。为什么我们关心纯净的叶子?因为如果一个叶节点是纯净的,那么对任何落入该叶节点的新数据点进行预测都是直接且自信的。如果一个叶节点包含 9 个“是”实例和 1 个“否”实例(对于“打网球”),我们可以相当自信地预测“是”。如果它包含 5 个“是”和 5 个“否”,我们的置信度就会低得多。树的构建过程是一个系统性的搜索过程,旨在找到一系列能够产生尽可能纯净的叶节点的问题(分割)。
量化不纯度——数据的混合程度如何?
为了就如何分割做出数据驱动的决策,我们需要一种数学方法来衡量任何给定节点处一组数据样本的“混合程度”或不纯度。两种常见的衡量标准是熵和基尼不纯度。
- 熵 (Entropy):不确定性和无序性的度量
- 公式: 数据集 (D)(或一个节点)的熵计算如下:
E(D)=−∑i=1Cpilog2(pi)E(D) = -\sum_{i=1}^{C} p_i \log_2(p_i)E(D)=−i=1∑Cpilog2(pi)
其中:- CCC 是目标变量的唯一类别数量。
- pip_ipi 是数据集中属于类别 iii 的样本比例(或概率)。
- 直观解释:
- 熵源于信息论,量化了数据集中类别标签相关的平均不确定性或“惊奇”程度。
- 零熵(最大纯度): 如果节点中的所有样本都属于同一个类别(例如,所有“打网球=是”),那么该类别的 pi=1p_i = 1pi=1,其他类别的 pi=0p_i = 0pi=0。熵为 −(1log21)=0-(1 \log_2 1) = 0−(1log21)=0。这意味着没有不确定性;结果是完全可预测的。
- 最大熵(最大不纯度): 如果样本在各个类别中均匀分布(例如,对于两个类别,类别 1 占 50%,类别 2 占 50%),则熵最大化。对于两个类别,熵为 −(0.5log20.5+0.5log20.5)=1-(0.5 \log_2 0.5 + 0.5 \log_2 0.5) = 1−(0.5log20.5+0.5log20.5)=1。这表示最大的不可预测性。
- log2(pi)\log_2(p_i)log2(pi) 项反映了概率为 pip_ipi 的事件的“信息量”或“惊奇程度”。概率越小的事件越令人惊奇。负号确保熵值非负。
- “打网球”示例的分步计算: 让我们计算整个“打网球”数据集(表 1)相对于
打网球目标变量的熵。- 总实例数:14
- “是”实例数:9 (D3, D4, D5, D7, D9, D10, D11, D12, D13)
- “否”实例数:5 (D1, D2, D6, D8, D14)
- p是=9/14p_{\text{是}} = 9/14p是=9/14
- p否=5/14p_{\text{否}} = 5/14p否=5/14
- E(打网球)=−(914log2(914)+514log2(514))E(\text{打网球}) = - \left( \frac{9}{14} \log_2\left(\frac{9}{14}\right) + \frac{5}{14} \log_2\left(\frac{5}{14}\right) \right)E(打网球)=−(149log2(149)+145log2(145))
- E(打网球)≈−(914×(−0.6375)+514×(−1.4854))E(\text{打网球}) \approx - \left( \frac{9}{14} \times (-0.6375) + \frac{5}{14} \times (-1.4854) \right)E(打网球)≈−(149×(−0.6375)+145×(−1.4854))
- E(打网球)≈−(−0.4098−0.5305)≈0.9403E(\text{打网球}) \approx - (-0.4098 - 0.5305) \approx 0.9403E(打网球)≈−(−0.4098−0.5305)≈0.9403
- 公式: 数据集 (D)(或一个节点)的熵计算如下:

最低0.47元/天 解锁文章
351

被折叠的 条评论
为什么被折叠?



