决策树学习笔记
一、基础概念解析
(一)核心定义
决策树是一种基于树形结构的机器学习模型,其工作逻辑是从根节点开始,通过对数据特征的逐步判断,沿着分支路径流动,最终抵达叶子节点并输出决策结果。它的显著优势是既能处理分类任务(如判断邮件是否为垃圾邮件),也能完成回归任务(如预测房屋价格),所有输入数据都会被精准分配到某个叶子节点。
(二)结构组成
- 根节点:决策树的起点,包含全部训练数据样本,是首次进行特征判断的节点。例如在 “是否适合打球” 的决策树中,根节点会从 “天气”“温度” 等特征中选择第一个判断条件。
- 非叶子节点与分支:非叶子节点是中间决策点,每个节点对应一个特征,特征的不同取值会形成不同分支。比如 “天气” 节点下,会有 “晴天”“阴天”“雨天” 三个分支,数据根据自身特征值进入对应分支。
- 叶子节点:树形结构的末端节点,不再进行特征判断,直接输出决策结果。在分类任务中是具体类别(如 “适合打球”“不适合打球”),在回归任务中是连续数值(如 “房价 80 万元”)。
二、训练与测试流程
(一)训练阶段
核心目标是从训练数据中构建出一棵最优决策树,关键步骤包括:
- 从根节点开始,选择最佳特征进行数据划分;
- 对每个子节点重复特征选择和划分过程,形成分支结构;
- 直到满足停止条件(如子节点数据类别单一、无更多特征可用等)。 难点:如何选择特征和确定切分方式,这直接影响决策树的性能。
(二)测试阶段
流程相对简单:
- 将测试数据输入已训练好的决策树;
- 数据从根节点出发,按特征取值沿分支流动,最终到达叶子节点;
- 叶子节点的结果即为预测输出,再通过准确率、误差等指标评估模型效果。
三、特征切分的核心原理
(一)核心问题
构建决策树时需解决两个关键问题:
- 每个节点应选择哪个特征进行划分?
- 该特征的取值如何切分才能使分类效果最优? 目标是让每次划分后的数据 “纯度更高”(同类数据更集中)。
(二)熵:衡量不确定性的指标
- 定义:熵是描述随机变量不确定性的数学度量,在决策树中用于衡量数据集中类别的混乱程度。
- 公式:\(H(X) = -\sum_{i=1}^{n} p_i \times \log p_i\),其中\(p_i\)是第i类数据在样本中的占比,n是类别总数。
- 特性:
- 当所有数据属于同一类别(\(p_i=1\)或\(p_i=0\))时,熵\(H(X)=0\),不确定性为 0;
- 当数据中两类占比相等(\(p_i=0.5\))时,熵\(H(X)=1\),不确定性最大;
- 不确定性越高,熵值越大。分类任务中希望划分后子节点的熵值更小。
(三)信息增益:特征选择的依据
- 定义:表示某特征划分数据后,数据集不确定性减少的程度,即 “原始熵 - 划分后熵”。
- 计算逻辑:
- 先计算原始数据集的熵(初始不确定性);
- 按某特征的不同取值将数据划分为若干子集,计算每个子集的熵;
- 用各子集的样本占比加权计算 “划分后总熵”;
- 信息增益 = 原始熵 - 划分后总熵。
- 作用:信息增益越大,说明该特征对降低不确定性的作用越显著,因此在节点划分时优先选择信息增益最大的特征。
四、决策树构造实例(14 天打球数据)
(一)数据背景
- 样本:14 天的打球记录(9 天打球,5 天不打球);
- 特征:天气(outlook)、温度(temperature)、湿度(humidity)、风力(windy);
- 目标:构建决策树判断 “是否适合打球”。
(二)初始熵计算
原始数据集熵:\(H = -(\frac{9}{14} \times \log\frac{9}{14} + \frac{5}{14} \times \log\frac{5}{14}) \approx 0.940\)。
(三)特征 “outlook” 的分析过程
- 子集熵计算:
- 天气 = 晴天(5 天):3 天打球、2 天不打球,熵\(H_1 \approx 0.971\);
- 天气 = 阴天(4 天):4 天打球、0 天不打球,熵\(H_2 = 0\);
- 天气 = 雨天(5 天):2 天打球、3 天不打球,熵\(H_3 \approx 0.971\)。
- 划分后总熵:\(H_{\text{outlook}} = \frac{5}{14} \times 0.971 + \frac{4}{14} \times 0 + \frac{5}{14} \times 0.971 \approx 0.693\)。
- 信息增益:\(IG = 0.940 - 0.693 = 0.247\)。
(四)构造流程
- 计算所有特征(天气、温度、湿度、风力)的信息增益;
- 选择信息增益最大的特征(如本例中的 “outlook”)作为根节点;
- 对根节点的每个子节点,重复上述特征选择过程(计算剩余特征的信息增益),构建下一级节点;
- 递归划分直到子节点数据类别单一(熵为 0),形成完整决策树。