多元自适应回归样条(Multivariate Adaptive Regression Spline,MARS)是一个迭代切分的非参数化拟合过程 [20] 。在R中有earth包支撑。下面以一个简单例子展示其应用过程。见下述代码和图3-21,earth()用来训练模型,其中degree参数约束了自变量交互的层次,plotmo()展示了不同组分的图,evimp()给出了自变量的重要度。
MARS利用了铰链(Hinge)函数,在数学上可以表达为
上面的模型拟合出的回归方程为
5.99+0.21× H (temp-58)-0.02× H (107-ibt)+0.08× H (ibt-107)-0.0026× H (56-humidity)× H (ibt-107)
MARS在数学上本质就是一个分段线性模型,可以描述为 [20]
图3-21 plotMO
式中, ( x )表示用 q 次多项式(但在earth包的实现中, q =1); K m 连乘表示多个预测变量的交叉项,在earth()中,由参数degree控制交叉项的阶数(默认为1,即不存在预测变量间的交叉项)。
MARS算法计算过程逻辑,在参考文献[21]中有简要的描述。从下面的算法逻辑中可以看得更清楚,不断增加组分,直到最大数目 M max 。每个待增的组分,会轮询所有的预测变量或其组合,分割点也会轮询所有的变量数值,找到当前最佳的组分。
LOF(Lack of Fit)度量了拟合误差,可以用残差平方和(RSS)、广义交叉检验(GCV)或其他综合指标(拟合误差与模型复杂度的综合),算法如下。
在剪枝(prune)过程中,MARS没有采用CART(Classification and Regression Trees)算法从后向前逐步消除的策略,而是看所有组分的组合。例如在第一轮去掉1个组分,循环尝试 M max -1种去除可能,重新拟合模型参数,获取最佳的组合;第二轮基于第一轮结果,循环尝试 M max -2种去除可能。
变量的重要性根据广义交叉检验(GCV)或残差平方和(RSS)进行排序,并归一化,最重要的为100分,没有进入模型的变量重要度为0分。
根据Backwards的优化路径,从只有2个组分(commponent)开始(常数项 α 1 是第一个组分),计算每增加一个组分带来的GCV和RSS变化,代表该组分的贡献度,出现在该组分中的变量都采用该贡献度。一个预测变量在所有出现的组分的贡献度的和,作为该预测变量的总贡献度,最后做归一化,一个变量的重要度=(该变量的贡献度/最大贡献度)×100。下面的R语言evimp()源代码片段可以更直观地解释上述逻辑。
MARS和CART、PPR(Projection Pursuit Regression,投影寻踪) [22] 等模型都属于自适应低维扩展(Adaptive Low Dimensional Expansions)算法,也就是说对于高维函数,采用“分而治之”,在每个分区用低维函数去逼近复杂的高维函数。但它们的做法存在差别,其他算法的实现方式见表3-6所示 [20] 。例如,在区间边界点上,CART算法不连续,而MARS是连续的;在区间内,CART结果是一个常数,而MARS是存在变化的,因此MARS的逼近能力比CART更强些。
表3-6 其他算法的实现方式