机器学习三大主要分支:监督学习、无监督学习和半监督学习。
对于监督学习,根据目标数据类型的不同分为二大核心任务:分类和回归。
其中分类指目标数据为离散型变量,回归指目标数据为连续型变量。
对于回归分析方法,本文主要介绍在实际应用最广泛的线性回归分析。之后也会分享对应的实践案例(Python和R)。
借用“科普中国”科学百科词条中的定义:
回归分析是确定两种或两种以上变量关系的一种统计分析方法。
所谓透过现象看本质,我们希望对观察到的现象,经过统计分析,可以洞悉现象背后客观存在的映射关系。
那么线性回归就是这样一回事:既然回归的目标是得到映射关系,而且牛顿说过真理永远是最简洁的(也许说过,不敢保证),所以我们就假设这种映射关系是简单的,即是线性的,那么就得到了线性回归分析的一般形式。
下面将这段思路转为了符号表示:
对于回归问题,我们希望得到自变量 x 1 , x 2 , . . . , x m x_{1},x_{2},...,x_{m} x1,x2,...,xm与因变量 y y y的映射关系:
y = f ( x 1 , x 2 , . . . , x m ) y=f(x_{1},x_{2},...,x_{m}) y=f(x1,x2,...,xm)
对于线性回归问题,假设映射关系为线性的,即
y = β 0 + β 1 x 1 + β 2 x 2 + . . . + β m x m y=\beta_{0}+ \beta_{1}x_{1}+\beta_{2}x_{2}+...+\beta_{m}x_{m} y=β0+β1x1+β2x2+...+βmxm
对于 n 次观测值,可以将映射关系表示成矩阵形式:
Y = X β (1) Y=X\beta\tag{1} Y=Xβ(1)
Y = [ y 1 , y 2 , . . . , y n ] T , β = [ β 0 , β 1 , . . . , β m ] T X = [ 1 x 11 . . . x 1 m 1 x 21 . . . x 2 m ⋮ ⋮ . . . ⋮ 1 x n 1 . . . x n m ] Y=[y_{1},y_{2},...,y_{n}]^{T},\beta=[\beta_{0},\beta_{1},...,\beta_{m}]^{T} \\ X= \begin{bmatrix} 1 &x_{11} &... &x_{1m}\\ 1 &x_{21} &... &x_{2m}\\ \vdots &\vdots &... &\vdots\\ 1 &x_{n1} &... &x_{nm}\\ \end{bmatrix} Y=[y1,y2,...,yn]T,β=[β0,β1,...,βm]TX=⎣⎢⎢⎢⎡11⋮1x11x21⋮xn1............x1mx2m⋮xnm⎦⎥⎥⎥⎤
明确了问题的表示形式,我们需要思考:
对于已经观测到的 n n n 个样本,我们如何将 β i ( i = 0 ∼ m ) \beta_{i}(i=0\sim m) βi(i=0∼m) 求解出来呢?
最直接的方法就是解方程,这样可以得到精确解。但是对于 m m m 个未知数, n n n 个等式的方程往往是多解 ( n < m n
所以,考虑一种最常用的优化方法:最小二乘法。通过最小化映射结果与真实结果之间的误差来得到最优的参数 β i \beta_{i} βi 。
自然而然,我们需要引入误差 ϵ i ( i = 1 ∼ n ) \epsilon_{i}(i=1\sim n) ϵi(i=1∼n) ,这样,更新我们前面介绍的公式(1):
Y = X β + ϵ ϵ = [ ϵ 1 , ϵ 2 , . . . , ϵ n ] T (2) Y=X\beta+\epsilon\tag{2}\\ \epsilon=[\epsilon_{1},\epsilon_{2},...,\epsilon_{n}]^{T} Y=Xβ+ϵϵ=[ϵ1,ϵ2,...,ϵn]T(2)
万事具备,只欠求解。而且我们明确目的:使误差最小化。由于存在很多观测数据,为了全部考虑进来,我们构造一个误差的和式:
S = ∑ i = 1 n y i − x i β (3) S=\sum_{i=1}^{n}{y_{i}-x_{i}\beta}\tag{3} S=i=1∑nyi−xiβ(3)
观察公式(3)中,误差值可能存在正负两种情况,这样直接加上一起,可能会抵消部分误差,显然是不可取的,聪明的地球人自然就想到了加上绝对值就可以了,于是有了公式(4)中的误差和式:
S = ∑ i = 1 n ∣ y i − x i β ∣ (4) S=\sum_{i=1}^{n}{|y_{i}-x_{i}\beta |} \tag{4} S=i=1∑n∣yi−xiβ∣(4)
最小化式(4)可得映射关系,最小化自然用到导数,我们知道导数为零的点为极值点,于极值点中寻找最值即可。在实践中,我们又遇到了一个困难,即绝对值的导数不方便求解,它的导数是分段函数。那么对公式(4) 进行转换,将绝对值换为平方,它们的大小方向保持一致性,得到公式(5):
S = ∑ i = 1 n ( y i − x i β ) 2 (5) S=\sum_{i=1}^{n}{(y_{i}-x_{i}\beta )^2} \tag{5} S=i=1∑n(yi−xiβ)2(5)
最后对公式(5)求 β \beta β 的偏导数,令偏导数为零,得到回归参数 β \beta β 的最小二乘估计:
β ^ = ( X T X ) − 1 X T Y (6) \widehat{\beta}=(X^{T}X)^{-1}X^{T}Y\tag{6} β =(XTX)−1XTY(6)
对于观测值比较少的问题,参照这个公式,完全可以手算线性回归参数。
到了这里,线性回归参数都求解出来了,我们还需要搞什么?
这时候有个问题,我们求出来这个映射关系怎么样啊?这个映射关系中的 β i \beta_{i} βi 接近于零,那可不可以用零代替,这样比较好算,毕竟零乘任何数都得零啊?
一听这话,你计算了一下,发现取零还真可行,映射结果没啥变化,再一看误差,比真实数据都大,得到的映射关系十分不靠谱。所以,数学家们就继续解决这个问题。
既然你提出是否可以用零代替,那就进行一下假设检验吧,你问我拟合的好不好,就给你计算一下拟合优度。这时候又需要用到假设检验的知识了。
先简单回顾假设检验的原理。其分为两个步骤,第一步假设,第二步检验。
原则是:假设什么就是什么,按照假设成立往下发展,对比真实发生的事情,如果真实与假设吻合,那么不否定我们提出的假设。如果事实与假设相悖,那就否定假设。
当然,从概率角度来看,吻合和相悖不是一件绝对的事情,是关乎概率的。
如何衡量某个参数是否可以为零呢?在检验阶段我们需要构造统计量来验证假设和事实吻合程度,现阶段整个模型还没有涉及到概率分布。所以数学家们准备先假设出一个概率分布出来,然后进一步验证其他事情。由于其他假设检验是基于这些基础假设的。那么这些基础假设应该尽量合理。对于观测值我们不容易贸然进行假设,因为样本容量是否充足还是一个问题。
回顾线性回归模型中的误差或者称为残差 β \beta β ,作为一名合格的误差,它应该正负相间、分布优美、透露着不可捉摸的信息又常在零值附近徘徊。
这时,这个概率分布形式是不是呼之欲出,对,就是正态分布或者称高斯分布。那么好,愉快的定下来这个基本假设:误差项是均值为零的,相互独立的,方差为 σ 2 \sigma^{2} σ2 的正态分布。相互独立是因为样本相互独立,即:
ϵ i ∼ N ( 0 , σ 2 ) (7) \epsilon_{i}\sim N(0,\sigma^{2})\tag{7} ϵi∼N(0,σ2)(7)
进一步考虑公式(2)的映射关系,当 X X X 与 β \beta β 确定之后, y i y_{i} yi 应该也服从正态分布
y i ∼ N ( x i β , σ 2 ) y_{i}\sim N(x_{i}\beta,\sigma^{2}) yi∼N(xiβ,σ2) 。
再回到我们的关心的问题上,参数真正影响的是误差,而模型的总误差是误差平方和,所以构造的统计量的基元素就是误差平方和 S S E SSE SSE :
S S E = ∑ i = 1 n ( y i − y ^ i ) (8) SSE=\sum_{i=1}^{n}{(y_{i}-\widehat{y}_{i})}\tag{8} SSE=i=1∑n(yi−y i)(8)
对于 m + 1 m+1 m+1 个回归参数 β = β 0 , β 1 , . . . , β m \beta={\beta_{0},\beta_{1},...,\beta_{m}} β=β0,β1,...,βm , SSE 服从自由度为 n − m − 1 n-m-1 n−m−1 的卡方分布。(这里不给出具体的推导,仅对自由度进行说明。)
样本中独立或能自由变化的数据的个数,称为该统计量的自由度。一般来说,自由度等于独立变量减掉其衍生量数。明确了 S S E SSE SSE 的卡方分布,对于某个参数或者某几个参数为零的原假设,可根据公式(9)计算F统计量:
F = ( S S E s i m p l e − S S E t o t a l ) / r S S E t o t a l / ( n − m − 1 ) ∼ F ( r , n − m − 1 ) (9) F=\frac{(SSE_{simple}-SSE_{total})/r}{SSE_{total}/(n-m-1)}\sim F(r,n-m-1)\tag{9} F=SSEtotal/(n−m−1)(SSEsimple−SSEtotal)/r∼F(r,n−m−1)(9)
其中, r 为简单模型和全模型的回归参数个数差,直观意义是如果简单模型与全模型的误差平方和差距很大,相应的 F 值很大,会超过一定的分位点,我们就拒绝原假设。否则不能拒绝原假设。
回到第二个问题,对于模型拟合的效果,定义拟合优度指标。SSE是一个绝对距离的指标,为了引入相对的概念定义总平方和 SST :
S S T = ∑ i = 1 n ( y i − y ˉ ) (10) SST=\sum_{i=1}^{n}{(y_{i}-\bar{y})}\tag{10} SST=i=1∑n(yi−yˉ)(10)
拟合优度 R^{2}=1-SSE/SST ,该指标衡量回归模型相对于直接应用均值来预测的优化程度。拟合优度的值越大代表模型拟合效果越好。值得注意的是,此拟合优度存在一个缺陷,即随自变量的个数的增加而增大,所以会倾向与选择更复杂的模型,为了克服这一点,所以一般应用调整后的拟合优度:
R a 2 = 1 − S S E / ( n − m − 1 ) S S T / ( n − 1 ) R a 2 = 1 − ( n − 1 ) ( n − m − 1 ) ( 1 − R 2 ) (11) R^{2}_{a}=1-\frac{SSE/(n-m-1)}{SST/(n-1)}\\ R^{2}_{a}=1-\frac{(n-1)}{(n-m-1)}(1-R^2)\tag{11} Ra2=1−SST/(n−1)SSE/(n−m−1)Ra2=1−(n−m−1)(n−1)(1−R2)(11)
至此,面对相关人员的质疑,你能给出一个较为科学的结论。应用上述问题需要注意,模型需要满足上述的基本假设,如果不满足,会衍生出一些其他的变形回归模型,例如广义线性模型。
接下来我们继续考虑这个问题,如果验证之后,你发现这个模型糟糕透了,自己都不想用。这时候应该怎么办,弃用吗?
不,模型感觉还可以抢救一下。
为什么我们这么科学的计算出的模型会很糟糕?是哪个环节出了问题呢?回想最开始我们本着简洁的原则,假设每个自变量相互独立,给定了自变量和因变量之间的线性关系,可能现象后的本质本不是这样!
造成模型糟糕的原因可能是:变量之间存在交互关系;自变量与因变量为非线性关系;样本数据中有脏数据等等。
面对以上这些问题,我们本着兵来将挡水来土掩原则,一一破解。
对于非线性的关系,可以先对自变量进行变换,使变换后的变量与因变量成线性关系或者添加交互项。在实际操作中,可通过观察曲线走势,计算相关系数,绘制热度图等方法得到相应的形式。
对于脏数据,可以观察残差图,QQ图和计算杠杆值等方法剔除异常值。直观来说,观察拟合后的曲线,发现哪些点明显影响曲线的走势和导致误差很大,反复校对这些值,是否可以剔除。
很多时候,我们一顿操作猛如虎,模型构建的早已违背了简洁的初衷,但是好在误差已经能看得过去,拟合优度也不错。但是,一旦观测到新的数据,发现对于新的数据,我们的模型又变得十分糟糕,我的天!
为了解决这个问题,人们又提出了泛化能力的概念,指机器学习算法对新样本的适应能力。为了权衡对已知数据的拟合程度和泛化能力之间的取舍,我们会应用一些正则化方法。
比较常见的为L1和L2正则化。
L1正则化是将回归参数的绝对值和附加在误差平方和上,更新最小化目标,即 S S S 更新为公式(12):
S = ∑ i = 1 n ( y i − x i β ) 2 + λ ∑ i = 1 m ∣ β i ∣ (12) S=\sum_{i=1}^{n}{(y_{i}-x_{i}\beta )^2}+\lambda \sum_{i=1}^{m}{|\beta_{i}|}\tag{12} S=i=1∑n(yi−xiβ)2+λi=1∑m∣βi∣(12)
通过最小化公式(12)得到的回归参数,称为LASSO回归(least absolute shrinkage and selection operator),式中 λ \lambda λ 是惩罚系数。
LASSO 回归使回归参数稀疏化,结果使部分参数为0,可以用来进行特征选择。
L2正则化是将回归参数的平方和附加在误差平方和上,更新最小化目标,即 S S S 更新为公式(13):
S = ∑ i = 1 n ( y i − x i β ) 2 + λ ∑ i = 1 m ( β i ) 2 (13) S=\sum_{i=1}^{n}{(y_{i}-x_{i}\beta )^2}+\lambda \sum_{i=1}^{m}{(\beta_{i})^2}\tag{13} S=i=1∑n(yi−xiβ)2+λi=1∑m(βi)2(13)
本形式称为岭回归(ridge regression),岭回归趋向于选择接近零的回归参数,但是不会为0,参数个数不会减少。
一般过拟合的状态是因为模型过分的去拟合已知观测数据的形式,曲线变化的比较剧烈,导致回归参数较大,L1 和L2 正则化将回归参数引导向趋近于零的方向,从而实现了平滑回归参数的目标。
另外从概率角度两种正则化分别对应着给定参数的拉普拉斯先验和高斯先验,关于正则化的详细介绍,会后续单独给出一个篇幅进行介绍。
经过假设检验,异常值处理,变量转化(交互项,多项式变换),正则化等步骤,一个相对完整的线性模型就建立起来了。在实际生产生活中,虽然很多相关关系并不是线性的,但是不妨碍其广泛的应用,在一定取值范围内,线性是很实用的。怎么样?ZZ这篇线性回归的介绍是否让你对线性回归有了更清楚的认识呢?大家有什么问题可以在评论区讨论嗷!