本文主要是介绍豆瓣9.6分统计学神作ISL之第七章读书笔记(上),带你系统学习多项式回归、阶梯函数、基函数和回归样条,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 1.原文内容概要
- 2.算法知识总结
- 2.1 多项式回归(Polynomial Regression)
- 2.2 阶梯函数(Step Functions)
- 2.3 基函数(Basis Functions)
- 2.4 回归样条(Regression Splines)
- 2.4.1 分段多项式回归(Piecewise Polynomials)
- 2.4.2 约束条件与样条函数(Constraints and Splines)
- 2.4.3 样条函数的基函数形式(The Spline Basis Representation)
- 2.4.4 选择结点的数量和放置位置(Choosing the Number and Locations)
- 2.4.5 与多项式回归的比较(Comparison to Polynomial Regression)
- 引用
1.原文内容概要
想象一下,你已经在一条“笔直”的公路上飞驰了六章的距离,一路上你驾驶的都是线性模型这辆赛车——从最小二乘回归的老爷车到偏最小二乘回归的运动版,再到lasso回归、ridge回归,甚至是主成分回归这些涡轮增压版本。但,它们都有一个共同的限制:那就是只能在直线赛道上竞速,无法应对那些复杂的非线性地形。
线性模型就像是一种可靠的老伙计,它们的可解释性就像是一本打开的书,让你一目了然地理解每个变量如何影响结果,而它们的推断能力则像是一位经验丰富的侦探,帮你揭示数据背后的规律。但是,如果你想要的是预测能力——那种能够预见未来的能力,线性模型就可能显得有些力不从心了。
现在,就在这一章节,我们准备升级我们的赛车,让它不再局限于笔直的道路。我们将放宽线性关系的限制,让赛车可以在曲折蜿蜒的山路上飙车,同时尽可能地保持它的稳定性,就像给你的赛车装上一套先进的导航系统,即便在最复杂的赛道上,你也能清楚地知道下一个弯道在哪里。
所以,坐稳了,准备好迎接非线性模型的狂野之旅吧,享受前所未有的速度与激情!
由于内容较多,第七章的笔记将分成【上】、【下】两个章节输出。本次先介绍【上】章的内容,主要包括多项式回归、阶梯函数、基函数和回归样条。
2.算法知识总结
2.1 多项式回归(Polynomial Regression)
首先,我们来探讨单变量回归的情形。一个一元线性回归模型可以表示为:
为了引入非线性特性,我们可以将自变量的 n n n阶多项式包含进模型中,形成多项式回归模型:
在这里 d d d代表多项式的最高阶数。随着阶数 d d d的增加,模型更能捕捉到数据中的非线性关系,生成的曲线会变得越来越“蜿蜒曲折”。
多项式回归实际上可以视为多元线性回归的一种特殊形式,其中自变量不仅仅是原始的 x i x_i xi,还包括它的平方 x i 2 x_i^2 xi2、立方 x i 3 x_i^3 xi3,直至 d d d阶的 x i d x_i^d xid。因此,这样的模型仍然可以通过最小二乘法来拟合。在实际应用中,多项式的最高阶数 d d d通常不会超过 3 或 4,因为过高的阶数可能导致模型过于复杂,难以解释,并且可能引起过拟合问题(Generally speaking, it is unusual to use d greater than 3 or 4)。
在多项式回归分析中,我们采用了工资数据集(Wage data),并将年龄(Age)作为自变量 X X X,工资(Wage)作为因变量 Y Y Y。在此示例中,作者选择了4阶多项式,即设置上述的模型参数 d d d等于4。回归结果如下图所示,图中的蓝色实线展示了通过4阶多项式回归得到的拟合曲线,而上下两条虚线则分别表示拟合曲线加减两倍标准差的范围,这可以视为模型预测的置信区间。
那这两倍标准误差曲线怎么算出来的呢?
我们先从某个点的标准误差讲起。比如当我们要计算点 X = x 0 X=x_0 X=x0处的方差 V a r [ f ^ ( x 0 ) ] Var[\hat{f}(x_0)] Var[f^(x0)]时,其中 f ^ ( x 0 ) \hat{f}(x_0) f^(x0)表示为:
步骤如下所示:
1)首先,从最小二乘法拟合的模型中获取每个系数 β 0 , β 1 , β 2 , . . . , β p β_0, β_1, β_2, ... , β_p β0,β1,β2,...,βp的标准误差;
2)其次,确定这些系数之间的协方差矩阵,因为预测值的不确定性不仅由单个系数的不确定性决定,还受到它们之间相互关系的影响;
3)然后,将这些标准误差和协方差矩阵代入一个公式(比较复杂,放在这儿有点辣眼睛,就交给统计软件吧)来推导预测值的方差;
4)最后,将得到的方差开根号,即可得到在 x 0 x_0 x0处的预测值的标准误差。
我们使用上述方法计算每个数据点的标准误差,然后在每个预测值 f ^ ( x i ) \hat{f}(x_i) f^(xi)上减去其对应的二倍标准误差,再将点连成线,即得到二倍标准误差曲线。选择二倍的原因是,在随机误差项符合正态分布的假设下,加减二倍标准误差所构建的区间可以近似地表示95%的置信水平,即绝大部分观测值将落在此区间内。
从散点图中可以观察到,数据集呈现一项特征:工资(Wage)明显地分成两个区间,以250为分界。因此,我们可以将因变量 Y Y Y依据工资是否大于250划分为“高收入”和“低收入”两类,这样处理后因变量 Y Y Y转变为一个二元离散变量。在此种情形下,适用的模型不再是简单的线性回归,而是逻辑回归,模型表达式如下:
如图所示,蓝色实线展示了预测个体属于高收入类别的概率,而虚线则表示概率的两倍标准误差范围,灰色点代表各个样本数据点。另外从图中可见,在右侧的置信区间范围较宽。这主要是因为在所提供的样本数据中,标记为高收入的正样本数量非常有限。据作者描述,在3000个样本中,仅有79位被归类为高收入者。这一悬殊的比例导致了统计估计的不确定性增加,因而置信区间相对较大。
2.2 阶梯函数(Step Functions)
多项式函数通过在特征的线性模型中引入高次项,为数据添加全局非线性结构(Using polynomial functions of the features as predictors in a linear model imposes a global structure on the non-linear function of X)。这意味着多项式关系对所有 X X X值域内的点都适用。相比之下,分段函数方法将 X X X的值域分割成若干个区间(bins),有效地将连续变量X转换成一个有序的分类变量(This amounts to converting a continuous variable into an ordered categorical variable)。在每个区间内,我们拟合一个单独的线性方程,从而在整个 X X X的值域上构建一个由多个线性片段组成的非线性模型。
如图所示,作者通过断点 c 1 , c 2 , . . . , c K c_1, c_2, ..., c_K c1,c2,...,cK将变量 X X X细分为 K + 1 K+1 K+1个新的变量 C 0 ( X ) , C 1 ( X ) , … , C k ( X ) C_0(X),C_1(X),…,C_k(X) C0(X),C1(X),…,Ck(X)。这些新变量利用指示函数 I ( ⋅ ) I(·) I(⋅),当条件成立时取值为1,否则为0,它们也被称为哑谜变量(dummy variables)。需要注意的是,对于任一特定的 X = x i X=x_i X=xi,其对应的各个哑谜变量的和恒等于1(因为 x i x_i xi仅属于唯一一个区间)。
作者随后将这 K + 1 K+1 K+1个新生成的变量作为独立变量重新拟合原始方程,形式如下:
请注意,公式中我们未包含 C 0 ( X ) C_0(X) C0(X)这个变量,因为它与模型中的截距项 β 0 β_0 β0作用相同。在构建哑谜变量时,我们可以省略任意一个类别,正如3个类别的分类仅需要2个哑谜变量即可完整表达。对于 X < c 1 X < c_1 X<c1区间内的数据点,除了截距之外,所有其他变量系数均设为0,因此截距 β 0 β_0 β0可以被解释为当 X < c 1 X < c_1 X<c1时因变量 Y Y Y的平均值。当 c j ≤ X < c j + 1 c_j ≤ X < c_{j+1} cj≤X<cj+1区间时,模型预测值为 β 0 + β j β_0+β_j β0+βj。因此,系数 β j β_j βj的含义是:对于处于区间 c j ≤ X < c j + 1 c_j ≤ X < c_{j+1} cj≤X<cj+1内的 X X X值,预测值相对于 X < c 1 X < c_1 X<c1区间的平均变化量(so represents the average increase in the response for X in c j ≤ X < c j + 1 c_j ≤ X < c_{j+1} cj≤X<cj+1relative to X < c 1 X < c_1 X<c1)。
将阶梯函数应用至工资数据集后,所得的模型效果图如下。可见,在此案例中,分段常数函数的拟合效果并不理想(例如,在第一个年龄区间内,模型未能反映出工资随年龄增长而上升的趋势)。
如同之前处理工资数据集的方式,我们可以将工资数据分为高收入和低收入两类,并相应地将线性回归模型转换为逻辑回归模型,如下图所示:
尽管在本案例中阶梯函数的效果不尽如人意,但在生物统计学和流行病学领域,阶梯函数仍然颇受欢迎(Nevertheless, step function approaches are very popular in biostatistics and epidemiology)。
2.3 基函数(Basis Functions)
在基函数方法中,我们拥有一系列可用于变换自变量 X X X的工具函数,如 b 1 ( X ) , b 2 ( X ) , . . . , b K ( X ) b_1(X), b_2(X), . . . , b_K(X) b1(X),b2(X),...,bK(X)。这些函数 b 1 ( ⋅ ) , b 2 ( ⋅ ) , . . . , b K ( ⋅ ) b_1(·), b_2(·), . . . , b_K(·) b1(⋅),b2(⋅),...,bK(⋅)是事先选定(fixed and known)的固定函数,被称为基函数。多项式和阶梯函数都是基函数的特殊情况(Polynomial and piecewise-constant regression models are in fact special cases of a basis function approach):在多项式基函数中,每个基函数的形式是 b j ( x i ) = x i j b_j(x_i) = x_i^j bj(xi)=xij;而在分段函数的情况下,基函数采用的形式是 b j ( x i ) = I ( c j ≤ x i < c j + 1 ) b_j(x_i) = I(c_j ≤ x_i < c_{j+1}) bj(xi)=I(cj≤xi<cj+1)。
我们可以将这些基函数 b 1 ( x i ) , b 2 ( x i ) , . . . , b K ( x i ) b_1(x_i), b_2(x_i), ..., b_K(x_i) b1(xi),b2(xi),...,bK(xi)视为自变量,并构建一个多元线性回归模型。这意味着我们仍然可以使用最小二乘法来拟合系数,并且适用于线性回归的所有特性(例如系数的标准误差、衡量模型整体显著性的F统计量)也同样适用于基于基函数的模型。
在接下来的章节中,我们将探讨一种非常普遍的基函数选择:回归样条函数(regression splines)。
2.4 回归样条(Regression Splines)
2.4.1 分段多项式回归(Piecewise Polynomials)
这种方法融合了之前的多项式回归与阶梯函数的策略,即将自变量分割成多个区间,并在每个区间内分别进行多项式回归拟合。例如,我们可以考虑拟合一个分段三次多项式回归方程(piecewise cubic polynomial regression),形式如下所示:
乍一看,分段三次多项式回归似乎与普通的三阶多项式回归没有显著区别,但实际上二者有重要差异。在标准的三阶多项式回归中,系数对于 X X X的所有值都是固定不变的;而在分段三次多项式回归中,由于自变量 X X X被分成了几个区间,每个区间都单独拟合了一个三阶多项式,因此不同区间的 X = x i X=x_i X=xi值对应的系数( β 0 , β 1 , β 2 , β 3 β_0, β_1, β_2, β_3 β0,β1,β2,β3)是不同的。划分这些区间的点称为结点(knots)。
例如,在这里我们设定一个结点 c c c,则对应的分段三阶多项式回归可以表示为:
可以看到,实际上我们分别对两个不同的区间的样本数据拟合了两个标准三阶多项式回归模型:对于 x i < c x_i<c xi<c的样本,我们拟合了一个具有系数 β 01 , β 11 , β 21 , β 31 β_{01}, β_{11}, β_{21}, β_{31} β01,β11,β21,β31的三阶多项式;而对于 x i ≥ c x_i≥c xi≥c的样本,我们拟合了另一个独立的三阶多项式回归模型,具有系数 β 02 , β 12 , β 22 , β 32 β_{02}, β_{12}, β_{22}, β_{32} β02,β12,β22,β32。这些系数都可以通过最小二乘法计算得出。
通常情况下,如果我们设定了 K K K个结点,最终我们将拟合 K + 1 K+1 K+1个相应的分段模型。随着设置的结点数量增多,模型的灵活性(或者说复杂度)也会相应增加(Using more knots leads to a more flexible piecewise polynomial)。当然,理论上多项式的阶数可以是任意选择的。可能大家已经注意到了,我们最初提到的阶梯函数回归实际上就是分段多项式回归在阶数为0时的特例。
下图展示了使用工资数据集,并按照年龄(Age)以50岁为分界线分成两部分后,拟合的分段三阶多项式回归模型。这个模型的一个显著特点是,在Age=50这个点上函数是不连续的,这导致模型在这个点上显得不太合理。由于模型中结点的数量为1,并且是三阶多项式拟合,因此需要估计8个系数。所以,我们说这个模型的自由度为8。
这里需要简要说明一下自由度的定义。在不同的语境下,自由度的定义可能会有所不同:
1)在统计学中,自由度通常定义为样本量减去模型中参数的数量(或等价地,约束条件的数量)。例如,如果你有10000个数据点,对于一个三元线性回归模型,你需要估计的参数包括一个截距项和三个斜率项,总共是4个参数。因此,自由度将是样本大小10000减去4,等于9996。
2)在机器学习中,比如在线性回归或神经网络中,模型的自由度可以等同于模型参数(如权重和偏置)的数量。在这里,作者使用的是机器学习领域中对自由度的定义。
2.4.2 约束条件与样条函数(Constraints and Splines)
为了解决上图在Age=50处跳跃不连续的问题,我们在拟合模型时需要加入一些限制条件,例如要求模型在结点处必须是连续的。下图展示了加入这些限制条件后拟合的结果,看起来比之前的结果要好一些,但是连接处仍然显得有些不自然。
为了使得在结点处的连接更加自然,我们将限制条件加强为“不仅要求函数连续,还要求光滑地连续”。用数学术语来说,就是在Age=50这个点上,函数的一阶和二阶导数也必须连续。结合原先对函数本身连续性的要求,这相当于一共加上了三个限制条件。通常情况下,每增加一个限制条件,我们就会减少一个自由度,这样做可以降低模型的复杂度。这次修改导致模型的自由度从8减少到了5,最终得到的这个模型有一个专业名称,叫做三阶样条函数(cubic spline)。拟合结果如下图所示,现在肉眼几乎无法辨识出不连续的地方了。(建议大家这里回顾下上面的三张图,深刻体会下模型如何从Piecewise Cubic 到 Continuous Piecewise Cubic 最后到 Cubic Spline的转变)。
通常情况下,我们所说的 d d d 阶样条函数指的是分段的 d d d 阶多项式回归模型,并且附带了限制条件:在每个结点上,从函数其本身到 d − 1 d-1 d−1 阶导数都必须连续。下图所示为最简单的1阶样条函数,但更常见的叫法是线性样条函数,它的限制条件仅要求函数本身在结点处连续(因为此时 d = 1 d=1 d=1,所以只要求0阶导数,即函数本身,连续即可)。
2.4.3 样条函数的基函数形式(The Spline Basis Representation)
我们可以使用之前讨论的基础函数(basis function)来表示回归样条(regression spline)。
例如,一个具有 k k k个结点的三阶样条回归模型可以通过基函数表示为:
通过选择合适的函数形式 b 1 , b 2 , … , b K + 3 b_1, b_2, \ldots, b_{K+3} b1,b2,…,bK+3,我们就能够表示具有 k k k个结点的三阶样条回归模型了。
为什么这里算上截距一共要拟合的是 K + 4 K+4 K+4个参数呢?
这与自由度的概念有关。在本章中,作者将自由度等同于模型中需要拟合的参数数量。通常情况下,如果结点的数量为 K K K,则最终我们会拟合 K + 1 K+1 K+1个相应的分段模型。由于在这里我们拟合的是三阶多项式,所以在不添加任何限制条件的情况下,包括每个分段的截距在内,总共需要拟合 ( K + 1 ) × 4 (K+1) \times 4 (K+1)×4个系数。然而,由于样条函数需要在每个结点处施加三个限制条件(即要求函数值、一阶导数和二阶导数连续),这意味着在每个结点会减少3个自由度。因此,对于 K K K个结点,总共会减去 3 K 3K 3K个自由度。所以,最终得到的参数数量是 ( K + 1 ) × 4 − 3 K = K + 4 (K+1) \times 4 - 3K = K + 4 (K+1)×4−3K=K+4个。
现在我们来确定 b 1 , b 2 , … , b K + 3 b_1, b_2, \ldots, b_{K+3} b1,b2,…,bK+3合适的函数形式。在表达样条函数时,我们通常会选择一个样条基函数,其中幂基(Power basis)是一种常用的样条基函数,它采用幂函数作为基函数。然而,直接使用完整的幂函数基可能会导致模型过拟合或计算不稳定,因此在实际应用中,通常会使用截断的幂基(也就是分段),即“Truncated power basis”。其形式如下所示:
其中 ξ ξ ξ表示结点。
然后我们将 β 4 h ( x , ξ ) β_4h(x,ξ) β4h(x,ξ)这一项加入到最初的分段三次多项式回归中变为: y i = β 0 + β 1 x i + β 2 x i 2 + β 3 x i 3 + β 4 h ( x , ξ ) + ε y_i=β_0+β_1x_i+β_2x_i^2+β_3x_i^3+β_4h(x,ξ)+ε yi=β0+β1xi+β2xi2+β3xi3+β4h(x,ξ)+ε
再次提醒,这个公式不应被误解为普通的三阶多项式(如果有疑问,可以回顾第2.4.1节的内容)。换句话说,为了拟合一个具有 K K K个结点的三阶样条回归模型,我们相当于拟合了一个包含截距项和 K + 3 K+3 K+3个自变量的普通最小二乘线性回归模型。这些自变量的形式可以表示为 X , X 2 , X 3 , h ( X , ξ 1 ) , h ( X , ξ 2 ) , … , h ( X , ξ K ) X, X^2, X^3, h(X, \xi_1), h(X, \xi_2), \dots, h(X, \xi_K) X,X2,X3,h(X,ξ1),h(X,ξ2),…,h(X,ξK),其中 ξ 1 , … , ξ K \xi_1, \ldots, \xi_K ξ1,…,ξK就是那 K K K个结点。由于模型中有 K + 4 K+4 K+4个系数需要拟合,因此这个模型的自由度可以视为 K + 4 K+4 K+4。
如下面蓝色实线所示,我们继续使用之前的工资数据集,用年龄(Age)来预测工资(Wage),这次我们使用具有3个结点的三阶样条(cubic spline)进行拟合(三条垂直的虚线代表这三个结点)。
可以看到,整个函数形态非常平滑,但存在一个明显的缺点,在变量的边缘部分(小于最小结点或大于最大结点的部分),预测结果的不确定性(方差)会变得很大,这可以通过两侧虚线的宽度来判断。因此,我们可以增加另一个限制条件,即在 X X X的边界处函数必须是线性的,正如下图中红色实线所示。可以看出,在加入这个额外限制条件后,两侧的虚线明显变窄了(两条红色虚线的间距相较于蓝色虚线),这表明预测的不稳定性在降低。这条红色实线也有一个官方名称,叫做自然三阶样条(natural cubic spline)(A natural spline is a regression spline with additional boundary constraints: the natural function is required to be linear at the boundary (in the region where X is smaller than the smallest knot, or larger than the largest knot) )。
2.4.4 选择结点的数量和放置位置(Choosing the Number and Locations)
当我们想要拟合一个样条函数时,我们需要面对的首要问题是,如何放置那些结点(knots)?
理想情况下,我们希望在数据表现出较强非线性的地方放置更多的结点,因为一个区域内结点越多,该区域最终拟合出的函数的非线性特征就越明显。然而,在实际情况中,我们往往难以准确判断数据在哪里呈现非线性,哪里保持线性。因此,通常情况下,我们会先确定模型的自由度,然后让软件根据自变量的相同百分位数来放置对应数量的结点(One way to do this is to specify the desired degrees of freedom, and then have the software automatically place the corresponding number of knots at uniform quantiles of the data)。
下图是作者拟合的一个拥有3个结点的自然三阶样条(natural cubic spline),作者只是事先确定了这次模型的自由度为4。接下来,3个结点(knots)的位置选择就完全交给了软件自动完成,分别选择了25分位数、50分位数和75分位数。**至于为什么自由度设为4,在自然三阶样条下就等价于3个结点呢?**严格来讲,实际上这里有5个结点,包括内部的三个显性结点,以及左右两个边界的结点。根据前面的知识,我们知道一个拥有5个结点的三阶自然样条函数,有 5 + 3 + 1 = 9 5+3+1=9 5+3+1=9自由度,因为自然样条需要在自变量的两个边界各加两个限制条件(第一、第二阶可导),所以最终的自由度是 9 − 2 − 2 = 5 9-2-2=5 9−2−2=5个。又因为这5个自由度里包含一个截距的常数项,所以我们一般只认为是4个自由度。
那么,结点(knots)的数量或者说模型自由度通常是如何确定的呢?答案是交叉验证(相信这个答案大家已经听麻了)。作者仍然使用了之前的工资数据集,用年龄来预测工资,这里采用了10折交叉验证,分别拟合了自然三阶样条和普通三阶样条。可以看出,两种方式都表明,只包含一个自由度(即单纯的线性模型)对数据集的模型是欠拟合的,而一旦自由度超过三个,误差曲线变得平缓。因此,在这个例子中,选择自由度为3是合理的。
这里需要提醒的是,到目前为止,我们只考虑了单变量的情况,所以自由度的选择显得很容易。在后面的内容中,我们将讨论加性样条模型(additive spline models),这种模型包含了多个自变量,并要求我们针对每个变量有针对性地选择其对应的自由度。在这种情况下,实际工作中,我们通常也只会选择一个固定的自由度,将其适用于所有变量(This could potentially require the selection of degrees of freedom for each variable. In cases like this we typically adopt a more pragmatic approach and set the degrees of freedom to a fixed number, say four, for all terms)。
2.4.5 与多项式回归的比较(Comparison to Polynomial Regression)
下图使用相同的数据集比较了一个拥有15个自由度的自然三次样条(natural cubic spline)与也拥有15个自由度的普通多项式回归模型。可以看到,在自变量的边界上,普通多项式回归模型预测的数值极不稳定,波动极大;而自然三次样条则相对平缓很多,这正是自然三次样条的特性,因为在边界上加了额外的限制条件。
一般情况下,自然三次样条都要比普通的多项式回归模型更稳定。这是因为普通的多项式回归为了增加模型的非线性特征,只能不停地增加变量的阶数,例如这里,最高阶数达到了15,即 X 15 X^{15} X15;而自然三次样条只需要增加结点(knots)的个数,同时保持最高阶数不变。
引用
这篇关于豆瓣9.6分统计学神作ISL之第七章读书笔记(上),带你系统学习多项式回归、阶梯函数、基函数和回归样条的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!