在连续探讨了五天基于距离(局部欧氏距离或全局马氏距离)的机器学习模型后,是时候转换思路了。距离的概念将在后续回归,而今天将聚焦于一种截然不同的方法:决策树。
决策树回归器在Excel中的应用——作者供图
从一个简单数据集开始
首先使用一个仅包含一个连续特征的简单数据集。这样做的目的是便于直观理解结果,进而思考如何让计算机实现相同的过程。

Excel中的决策树回归简单数据集(作者生成)——作者供图
通过视觉观察可以猜测,第一次分割可能有两个候选值,一个大约在5.5,另一个大约在12。那么问题来了,应该选择哪一个?这正是接下来要探究的核心:如何通过Excel实现来确定首次分割的最佳值。一旦确定了首次分割的值,同样的过程可以递归应用于后续分割。因此,本文重点在于在Excel中实现首次分割。
决策树回归器的算法原理
根据高效学习机器学习的“三步法”框架,可以将决策树回归器的原理分解如下,这也是一个真正具有非平凡三步骤的机器学习模型。
模型是什么?
决策树模型是一系列规则的集合,用于对数据集进行划分。在每个划分出的分区(或叶节点)内,预测值被设定为该分区内所有观测目标变量y的平均值。与k近邻算法(k-NN)根据最近邻(特征相似的观测)的平均值进行预测不同,决策树回归器根据特征变量划分出的同组观测的平均值进行预测。
模型拟合或训练过程
对于决策树,此过程也称为完全生长一棵树。对于回归树,如果让树完全生长,叶节点将只包含一个观测值,此时均方误差(MSE)为零。生长树的过程是递归地将输入数据划分为越来越小的区域,每个区域的预测值即为该区域内目标变量的平均值。在构建过程的每一步,算法会选择能够最大化(或最小化)某个准则的特征和分割值,对于回归树,该准则通常是实际值与预测值之间的均方误差(MSE)。
模型调优或剪枝
对于决策树,模型调优通常称为剪枝,可以看作是从一棵完全生长的树中剪掉一些节点和叶子。这等价于在构建过程中,当满足某个停止准则(如达到最大深度或叶节点中最小样本数)时即停止生长。这些停止准则是可以通过调优过程进行优化的超参数。
推理过程
一旦决策树回归器构建完成,即可用于对新输入实例进行预测。预测过程是根据输入实例的特征值,从根节点开始应用规则遍历树,最终到达一个叶节点。该输入实例的预测目标值,即为落入同一叶节点的所有训练样本目标值的平均值。
单一连续特征的分割
以下是实现步骤:
- 列出所有可能的分割点
- 为每个分割点计算均方误差(MSE)
- 选择使MSE最小的分割点作为最优分割点
所有可能的分割点
首先,需要列出所有可能的分割点,即所有连续两个特征值之间的中点。无需测试更多值。

Excel中决策树回归的可能分割点——作者供图
为每个可能分割点计算MSE
作为起点,可以先计算未进行任何分割时的MSE。这意味着预测值就是y的平均值,此时的MSE等同于y的标准差。目标是找到一个分割点,使得分割后的MSE低于分割前。如果分割不能显著改善性能(降低MSE),那么最终的树将是平凡的,即仅用y的平均值作为预测。
下图展示了为第一个可能分割点(x=2)计算MSE的过程。

Excel中决策树回归所有可能分割点的MSE计算——作者供图
计算细节如下:
- 将数据集切割成两个区域:根据x=2,确定两个可能性x<2或x>2,从而将x轴分成两部分。
- 计算预测值:对每个部分,计算y的平均值,作为该部分y的潜在预测值。
- 计算误差:将预测值与y的实际值进行比较。
- 计算平方误差:为每个观测值计算平方误差。

Excel中决策树回归所有可能分割点——作者供图
最优分割点
对每个可能的分割点重复上述过程以得到其MSE。在Excel中,可以复制粘贴公式,唯一变化的是x的可能分割值。

Excel中决策树回归分割点——作者供图
随后,可以绘制MSE(y轴)与可能分割点(x轴)的关系图。从图中可以发现,当x=5.5时MSE达到最小,这与Python代码得到的结果完全一致。

Excel中决策树回归MSE最小化——作者供图
可以尝试一个小练习:将MSE准则改为MAE(平均绝对误差)。思考这一改变会带来什么影响?
将所有分割计算整合到一个汇总表中
前面的步骤详细展示了每个分割的计算过程,以便更好地理解计算细节。现在将所有内容整合到一个表格中,使整个过程变得紧凑且易于自动化。
首先简化计算。在一个节点内,预测值是平均值,因此MSE恰好等于方差。对于方差,可以使用简化公式:方差 = (y平方的平均值) – (y的平均值)的平方。

因此,在下表中,为每个可能的分割点使用一行。针对每个分割点,计算左节点的MSE和右节点的MSE。每个组的方差可以利用y和y平方的中间结果进行简化计算。然后计算两个MSE值的加权平均值,最终得到与逐步计算法完全相同的结果。

Excel中的决策树回归器——可从此处获取——作者供图
多连续特征的分割
接下来使用两个特征。这使得问题变得更有趣,因为候选分割点将来自两个特征。如何选择?方法很简单:考虑所有来自两个特征的候选分割点,然后选择使MSE最小的那个。
在Excel中的思路是:首先将两个特征的所有可能分割点合并到一列中;然后,为这些分割点中的每一个计算MSE;最后,选出最佳的一个。
分割点合并
首先,列出特征1的所有可能分割点(例如,所有排序后连续值之间的中点)。然后,以同样方式列出特征2的所有可能分割点。在Excel中,将这两个列表连接成一列候选分割点。因此,该列中的每一行代表:“如果使用此特征在此处分割,MSE会如何变化?”这样就得到了来自两个特征的所有分割点的统一列表。

Excel中的决策树回归器——可从此处获取——作者供图
MSE计算
一旦有了所有分割点的列表,其余逻辑与之前相同。对于每一行(即每个分割点):将数据点划分为左节点和右节点;计算左节点的MSE;计算右节点的MSE;取两个MSE值的加权平均值。最后,查看“总MSE”这一列,选择给出最小MSE值的分割点(从而确定特征和阈值)。

Excel中的决策树回归器——可从此处获取——作者供图
一个连续特征与一个分类特征的组合分割
现在组合两种截然不同的特征类型:一个连续特征和一个分类特征(例如A、B、C)。决策树可以在两者上进行分割,但生成候选分割点的方式不同。对于连续特征,测试的是阈值。对于分类特征,测试的是类别的组合。因此,思路与之前完全相同:考虑来自两个特征的所有可能分割点,然后选择MSE最小的那个。
分类特征的分割
对于分类特征,逻辑不同:每个类别本身就是一个“组”,因此最简单的分割是:一个类别 vs 所有其他类别。例如,如果类别是A、B和C:分割1:A vs (B, C);分割2:B vs (A, C);分割3:C vs (A, B)。这已经提供了有意义的候选分割点,并且使Excel公式易于管理。这些基于类别的分割点被添加到包含连续阈值的同一列表中。
MSE计算
一旦所有分割点(连续阈值 + 分类划分)被列出,计算遵循相同的步骤:将每个数据点分配到左节点或右节点;计算左节点的MSE;计算右节点的MSE;计算加权平均值。总MSE最低的分割点成为最优的首次分割点。
Excel中的决策树回归器——可从此处获取——作者供图
可尝试的练习
现在,可以尝试操作提供的Google表格:尝试寻找下一个分割点;可以更改准则,例如用绝对误差、泊松或弗里德曼MSE(如DecisionTreeRegressor文档所示)代替MSE;可以将目标变量改为二元变量。通常这会变成分类任务,但0或1也是数字,因此MSE准则仍然适用。如果想创建合适的分类器,则需要应用常用的准则如熵或基尼系数,这将是下一篇文章的内容。
结论
通过使用Excel实现一次分割,可以更深入地了解决策树回归器的工作原理。尽管没有创建完整的树,但这仍然很有意义,因为最重要的部分是在所有可能的分割中找到最优分割。
关于缺失值的一点补充
是否注意到基于距离的模型和决策树在处理特征方式上的一个有趣区别?对于基于距离的模型,所有特征都必须是数值型的。连续特征保持连续,分类特征必须转换为数字。模型在空间中比较点,因此所有特征都必须位于数值轴上。决策树则相反:它将特征切割成组。连续特征变成区间。分类特征保持其分类属性。


