1. 特征选择与模型构建的挑战
在构建机器学习模型,特别是回归模型时,我们常常面临一个挑战:如何从众多的可能特征中选择最有效、最有预测能力的子集?
例如,我们可能要预测房价(因变量 ),手头有几十个甚至上百个特征(自变量 ),比如房屋面积、卧室数量、地理位置、房龄、学区等。
如果我们简单地将所有特征都纳入模型,可能会导致:
- 过拟合(Overfitting):模型过于复杂,过度学习了训练数据中的噪声,导致在未见过的新数据上表现不佳。
- 模型可解释性差:太多特征使得模型难以理解,我们不清楚哪些特征是真正重要的。
- 计算成本高:尤其在特征数量非常大时,训练和使用模型会变得效率低下。
因此,我们需要一种特征选择的方法来构建一个既简洁又有效的模型。逐步回归(Stepwise Regression) 就是一种常用的策略,而 前向逐步选择(Forward Stepwise Selection) 是其中最常见的一种。
而可加模型(Additive Model) 则是一种更广泛的模型家族,它允许模型以更灵活的方式结合多个特征的影响,且其训练过程常常采用一种 “前向分步(Forward Stagewise)” 的优化思想。
2. 前向逐步回归:一步一个脚印地构建模型
2.1 从零开始,每次只加“最好”的那个
想象我们正在玩一个搭积木的游戏,目标是搭一个尽可能稳固、尽可能高的塔。我们有很多种积木(特征)可以选择,但我们不知道哪些积木是最重要的。
前向逐步回归的策略是:
- 从零开始:首先,我们的塔是空的(或者只有一个地基,相当于只包含截距的空模型)。
- 每次只加一块:在每一步,我们从所有还没用过的积木中,挑选当前阶段最能让塔变得更高更稳固的那一块。
- 重复挑选:将这块积木加到我们的塔上。然后,从剩下的积木中继续寻找下一块“最好的”。
- 适时停止:直到我们发现,无论再加哪一块积木,塔的高度或稳固性都无法显著提升了,或者塔已经达到了我们预设的最高高度。
这个过程就像马里奥一步步跳上台阶,每一步都选择能让他“提升”最高的那个台阶。
2.2 算法步骤与数学细节
前向逐步选择是一种贪心算法(Greedy Algorithm),因为它在每一步都做出局部最优的选择,但不保证最终结果是全局最优的。但它在实践中通常表现良好。
假设我们有训练数据集 ,其中 是 维特征向量, 是对应的因变量。我们的目标是建立一个线性回归模型: 前向逐步回归的详细步骤如下:
步骤 0:初始化
- 从一个空模型(Null Model) 开始,该模型只包含截距项(Bias Term) 。 这里的 通常是训练集因变量 的均值。
- 设置一个当前模型所包含特征的集合,初始为空集 。
步骤 1:迭代添加特征 在每一步 ():
-
从当前模型未包含的特征中,选择一个特征 ,将其添加到当前模型中。
-
对于每一个待选特征 ,考虑构建一个新的模型: 其中 是上一步选定特征所构建的模型, 是通过最小二乘法估计的系数。
-
计算每一个候选模型(即包含了 的模型)的模型拟合度指标。常用的指标包括:
- 残差平方和(Residual Sum of Squares, RSS): 我们选择使 最小的那个特征。
- 调整 (Adjusted R-squared): 会随着特征的增加而增加,无法有效判断过拟合。调整 会惩罚模型复杂性,我们选择使调整 最大的那个特征。
- 赤池信息准则(Akaike Information Criterion, AIC) 和 贝叶斯信息准则(Bayesian Information Criterion, BIC):这些是基于信息论的指标,它们会平衡模型的拟合优度和模型的复杂性。
- AIC 定义: 其中 是模型的最大似然值, 是模型中参数的数量。
- BIC 定义: 其中 是模型的最大似然值, 是模型中参数的数量, 是样本数量。
- 解释: 和 都是为了在模型性能和复杂性之间做权衡。它们的值越小,模型越好。 比 对模型复杂度的惩罚更重,因此倾向于选择更简洁的模型。在每一步中,我们选择使 或 最小的特征。
-
选择在所有候选特征中,使所选指标(如 最小,或 最小)达到最优的那个特征 .
-
将 添加到当前模型中,并更新特征集合 。
步骤 2:停止准则 重复步骤1,直到满足以下任一条件:
- 所有特征都被添加到模型中。
- 继续添加任何一个剩余特征都无法使模型拟合度指标(如 , , )得到显著改善。例如,添加新特征后 不再减小,反而增大。
- 达到预设的最大特征数量。
2.3 前向逐步回归的优缺点
优点:
- 简单直观:算法流程易于理解和实现。
- 计算效率相对较高:特别是当特征数量 很大时,它比尝试所有可能的特征子集要高效得多(后者是 NP-hard 问题)。
- 有助于特征选择和模型简化:能够识别出对模型贡献最大的特征子集。
缺点:
- 贪心策略:由于是每步局部最优选择,不保证找到全局最优的特征子集组合。例如,两个特征单独看可能不重要,但组合起来却非常重要,前向选择可能会错过这种组合。
- 可能不稳定:对训练数据的微小变化敏感,可能导致选择不同的特征子集。
- 可能包含冗余特征:一旦某个特征被选中,它就不会被移除。
向后逐步选择(Backward Stepwise Selection) 是另一种策略,它从包含所有特征的模型开始,然后逐步移除贡献最小的特征。双向逐步选择(Bidirectional Stepwise Selection) 则结合了前向和后向的优点,每一步既可以添加特征,也可以移除已有的特征。
3. 可加模型
3.1 可加模型的核心概念与定义
线性模型 假设因变量与自变量之间存在简单的线性关系。然而,现实世界中的关系往往是非线性的,并且不同特征对因变量的影响方式可能也各不相同。
可加模型(Additive Model) 是一种更灵活的模型,它假设因变量 可以表示为每个自变量 的某个任意函数 之和,再加上误差项:
这里的 是一个平滑的非线性函数,它捕获了第 个特征对因变量的独立影响。
- 线性模型是可加模型的特例:如果所有 ,那么可加模型就退化为线性模型。
- 独立性假设:可加模型假设每个特征的影响是独立的,没有特征之间的交互作用。这意味着 只依赖于 本身,而不依赖于其他特征 ()。
优点:
- 灵活性:能够捕捉每个特征的非线性关系,而无需预先指定非线性形式(如多项式)。
- 可解释性:由于每个特征的影响是可分离的(加性),我们仍然可以单独分析每个特征的影响曲线 ,从而保持较好的可解释性。
- 避免“维度灾难”:相比于直接建模所有特征的复杂交互作用,可加模型能够有效地处理高维数据。
3.2 可加模型与“前向分步算法”的联系
“Forward Stagewise”或“前向分步算法”是用于训练可加模型的一种通用优化策略。
3.2.1 前向分步算法的思想
前向分步算法是一种迭代的、贪心的模型构建方法,它在每一步都会添加一个基函数(Base Function) 来逐步改进模型,以最小化一个给定的损失函数 。
我们希望构建一个加性模型 ,它是 个基函数 的线性组合:
其中:
- 是第 个基函数(或基学习器),它本身是一个参数化的函数。例如,在AdaBoost中,它就是弱分类器 ;在梯度提升树中,它是一个决策树。
- 是第 个基函数的系数。
- 是第 个基函数自身的参数(例如,决策树的分裂点等)。
前向分步算法的迭代过程:
- 初始化:从一个初始模型 开始(或是一个简单的常数模型)。
- 迭代:对于 轮:
- 在当前模型 的基础上,寻找一个新的基函数 及其系数 ,以最小化总损失:
- 更新模型:将找到的最优基函数及其系数添加到模型中:
- 最终模型:经过 轮迭代后,得到最终的加性模型 。
3.2.2 可加模型作为前向分步算法的目标
在广义可加模型(Generalized Additive Models, GAMs)中,每个函数 通常使用平滑样条函数(Splines) 作为基函数来近似。在这种情况下,训练 GAMs 也可以看作是一种前向分步算法。
更重要的是,提升方法(Boosting),包括我们之前在初识提升方法中讨论的 AdaBoost 和更普遍的梯度提升(Gradient Boosting),它们本质上都是前向分步算法(Forward Stagewise Additive Models)。
- AdaBoost 的连接:
回忆AdaBoost的算法核心:
- 每轮训练一个弱分类器 。
- 计算其系数 。
- 最终模型是 。 这正是 形式的加性模型,其中 是基函数, 是其系数。而AdaBoost每次找到最优的 和 来最小化指数损失函数 ,这与前向分步算法的目标函数形式完全一致。
- 梯度提升的连接: 梯度提升更加通用。它将损失函数的梯度作为“残差”,然后训练一个新的基学习器去拟合这些“残差”。最终模型也是将所有基学习器的预测加权求和。
3.2.3 损失函数与迭代优化
前向分步算法的关键在于其在每一步都专注于最小化一个局部损失函数。 对于每一步 ,我们固定住 ,然后找到一个 来最小化: 这与前向逐步回归在每一步选择最佳特征以最小化 异曲同工,只是这里推广到了更一般的损失函数 和更灵活的基函数 。