23 决策树
23.1 决策树模型
在决策树结构中,除叶子节点外的所有节点被称作决策节点,用于根据特征进行判断与数据划分。
24 决策树学习过程
24.2 信息增益:如何选择划分特征
在构建决策树时,一个核心问题是:在每个决策节点上应选择哪个特征来进行数据划分?通常的做法是选择能够带来最大信息增益的特征。 信息增益指的是划分前后熵的减少量。具体而言,在某个节点进行划分前,存在一个初始熵值 $ H_{\text{before split}} $。划分后,数据被分到左右两个子节点,分别计算其熵值 $ H_1 $ 和 $ H_2 $,并结合样本数量进行加权平均: $$ \text{加权平均熵} = \frac{n_1}{n_1+n_2} \cdot H_1 + \frac{n_2}{n_1+n_2} \cdot H_2 $$ 其中 $ n_1 $、$ n_2 $ 分别为左右子节点的样本数。信息增益即为: $$ \text{Information Gain} = H(p_1^{\text{root}}) - \left( w^{\text{left}} \cdot H(p_1^{\text{left}}) + w^{\text{right}} \cdot H(p_1^{\text{right}}) \right) $$ 这里定义 $ w^{\text{left}} = \frac{n_1}{n_1+n_2} $,$ w^{\text{right}} = \frac{n_2}{n_1+n_2} $。最终选择使信息增益最大的特征作为当前节点的划分依据。24.1 纯度的衡量方法
为了评估划分效果,需要量化节点的“纯度”。常用指标包括熵(Entropy)和基尼不纯度(Gini Impurity),此处重点介绍熵。 设某一类别在当前样本中的比例为 $ p_1 $,另一类为 $ p_0 = 1 - p_1 $,则熵的计算公式为: $$ H(p_1) = -p_1 \log_2(p_1) - (1-p_1)\log_2(1-p_1) $$ 当 $ p_1 = 0.5 $ 时,系统最混乱,熵达到最大值 1;而当 $ p_1 = 0 $ 或 $ p_1 = 1 $ 时,熵为 0,表示完全纯净。约定 $ 0 \log(0) = 0 $。 该公式源自香农提出的信息熵理论,用来度量系统的不确定性或不纯程度。
23.2 划分停止条件
尽管信息增益指导了每次划分的选择,但必须设定终止条件以防止过度分裂: - 当前节点中所有样本属于同一类别(此时熵为 0) - 达到预设的最大树深度(有助于控制模型复杂度,避免过拟合) - 本次划分带来的信息增益低于设定阈值,甚至导致熵上升 - 节点内样本数量少于指定阈值,继续划分意义不大 这些策略共同确保模型在合理范围内生长,兼顾性能与泛化能力。24.3 决策树构建的整体流程(递归方式)
决策树的学习是一个自顶向下的递归过程,步骤如下: 1. 从根节点开始,包含全部训练数据。 2. 对每一个可用于划分的特征,计算以其为标准进行分割所获得的信息增益。 3. 选取信息增益最高的特征进行分裂,生成左、右两个子节点。 4. 在每个子节点上重复上述过程,直到满足任一停止条件: - 节点内所有样本同属一类 - 树的深度超过上限 - 信息增益不足阈值 - 子节点样本数过少 此过程持续扩展树结构,直至所有路径均自然终止。24.4 多值分类特征的处理:独热编码应用
对于具有多个离散取值的类别型特征(即非二元变量),不能直接用于二元划分。解决方法之一是采用**独热编码**(One-hot Encoding),将原始多值特征转换为多个二值特征,每个对应一个可能的取值。 例如,若特征“颜色”有红、绿、蓝三个取值,则可转化为三个布尔特征:“是否红色”、“是否绿色”、“是否蓝色”,从而适配二叉树的划分机制。 虽然也可采用多分支决策树结构来直接处理多值特征,但在多数实现中(如CART算法),仍偏好使用二元划分配合独热编码的方式,保持结构简洁统一。当某个特征具有 k 种可能的取值时,可以使用 k 个二元特征来代替该特征,每个取值对应一个二元特征,并通过 0 或 1 进行编码。在最终的编码结果中,每种原始取值都唯一对应一个为 1 的二元特征,其余均为 0,这种“仅一位为热”的特性也正是“独热编码”名称的由来。
值得注意的是,独热编码的应用不仅局限于决策树模型,在神经网络等其他算法中也同样广泛适用。
24.5 连续型特征处理(Continuous Valued Features)
在实际问题中,某些特征并非离散取值,而是连续变化的数值。对于这类连续型特征,需要进行适当处理以适应基于信息增益的划分机制。
一种常见方法是设定一个阈值,将样本划分为两组:一组特征值大于等于该阈值,另一组小于该阈值。通过这种方式可实现二分类划分,并据此计算信息增益。
为了获得最优划分效果,通常会尝试多个不同的阈值,选择能够带来最大信息增益的那个作为最终分割点。
24.6 回归树(Regression Trees)
回归树是对传统决策树的扩展,其目标不再是类别分类,而是预测连续数值,即将决策树的思想推广至回归任务中。
在回归树中,每个节点的预测值通常采用该节点所包含样本目标值的平均数。纯度的衡量标准由分类中的熵或基尼系数转为方差。
具体地,使用方差 V 来表示节点内部的离散程度。整体的信息增益则通过比较根节点与子节点加权后方差的减少量来评估:
Information Gain = Vroot (wleft Vleft + wright Vright)
其中,V 表示方差,w 表示对应节点样本占总样本的比例。该差值越大,说明此次分裂带来的纯度提升越显著。
25 决策树集成方法(Decision Tree Ensembles)
单一决策树容易受到训练数据微小变动的影响,导致模型不稳定。为提高鲁棒性和泛化能力,常采用多个决策树组合成集成模型。
25.1 多决策树的使用
构建多个决策树并组成“树集成”(Tree Ensemble),在预测阶段汇总各树输出结果,如通过投票机制选取出现次数最多的类别作为最终预测结果,从而提升整体准确性与稳定性。
25.2 放回抽样(Sampling with Replacement)
从原始训练集中随机抽取样本,每次抽取后将其放回,允许后续再次被选中。重复此过程构建出一个新的训练集。
新生成的数据集中可能出现重复样本,也可能遗漏部分原始数据,这属于正常现象,且有助于增加模型多样性。
25.3 随机森林算法(Random Forest Algorithm)
随机森林是一种高效的树集成算法,建立在袋装决策树(Bagged Decision Tree)基础上。
首先通过放回抽样生成 B 个新的训练集,分别训练 B 棵决策树,B 的典型取值范围在 64 到 128 之间;更大的 B 值虽可能略微改善性能,但边际效益递减,同时消耗更多计算资源。
预测时综合所有树的结果进行投票,决定最终输出。
相较于普通袋装法,随机森林进一步引入了特征层面的随机性:假设共有 n 个特征,设定参数 k < n,每次节点分裂前,仅从 n 个特征中随机选取 k 个候选特征,然后在这 k 个特征中选择信息增益最大的进行划分,而非考察全部特征。
这一策略有效降低了各棵树之间的相关性,增强了模型整体的泛化能力。
注:该方法特别适用于高维特征场景。常用的 k 值设置为 √n。
25.4 XGBoost(eXtreme Gradient Boosting)
XGBoost(极端梯度提升)是当前最主流的树集成算法之一,广泛应用于各类机器学习任务和竞赛中。
其核心思想类似于“刻意练习”——不同于袋装法或随机森林中对样本等概率抽样的方式,XGBoost 更关注那些在前期模型中预测误差较大的样本,动态提高它们在后续训练中的被采样概率。
主要优势包括:
- 开源且高效,具备良好的工程实现
- 内置默认的节点分裂及停止条件,减少人工调参负担
- 支持正则化项,有效缓解过拟合问题
- 自动为不同样本分配权重,无需依赖大量放回抽样生成数据集,效率更高
由于其卓越的表现,许多数据科学比赛的优胜方案往往基于 XGBoost 或深度学习模型。
尽管其实现原理较为复杂,但在实际应用中通常直接调用现有的开源库即可完成建模。
用于分类任务的代码示例:
from xgboost import XGBClassifier model = XGBClassifier() model.fit(X_train, y_train) y_pred = model.predict(X_test)
用于回归任务的代码示例:
from xgboost import XGBRegressor model = XGBRegressor() model.fit(X_train, y_train) y_pred = model.predict(X_test)
25.5 决策树的适用场景
在面对实际问题时,如何选择使用神经网络还是决策树类模型?以下是两者的主要适用特点对比:
决策树 / 树集成模型更适合:
- 处理结构化数据 —— 即可以组织成表格形式的数据(例如房价预测中,每个房屋的各项属性及其价格均可列于一张大表中)
- 训练速度快,适合快速原型开发
- 具有较强的可解释性,尤其是小型单棵决策树,其决策路径清晰直观,便于业务理解
但对于文本、音频、图像、视频等非结构化数据,决策树通常表现不佳。
神经网络更适合:
- 几乎在所有类型的数据上都有良好表现,尤其擅长捕捉非线性关系和复杂模式
- 在图像识别、自然语言处理等领域占据主导地位
神经网络具备多个显著优势,其中之一便是支持迁移学习,这使得模型在不同任务之间能够共享已学习到的特征,从而提升效率与性能。
由多个神经网络组成的系统,可以被灵活地串联起来,形成更为复杂的机器学习架构。这种组合方式不仅增强了模型的表达能力,还便于构建大规模、多层次的智能系统。
对于包含结构化数据、非结构化数据以及两者混合类型的数据,神经网络均能有效处理,展现出强大的适应性与泛化能力。
值得注意的是,尽管这类模型功能强大,但其训练过程通常较为耗时,训练速度相对较慢。然而,得益于梯度下降等优化算法的发展,所有串联在一起的神经网络可以实现端到端的联合训练,进一步提升了整体系统的协同性能。


雷达卡


京公网安备 11010802022788号







