各位,元旦快乐!2019年一定要顺心顺意啊!

在这一节我们会简单介绍一些比较前沿的统计方法——LASSO和分位数回归。要注意的是这两种方法的理论证明作为一个统计系的本科生来说掌握太困难了(当然了,作为学计算数学的,难度也一样)。所以我们这一节只会在感性上让大家了解它们究竟是怎么一回事,因此这一篇更多算是一个「概述」

提供之前的笔记:

  • 回归分析|笔记整理(1)——引入,一元线性回归(上)
  • 回归分析|笔记整理(2)——一元线性回归(下)
  • 回归分析|笔记整理(3)——多元正态分布理论(上)
  • 回归分析|笔记整理(4)——多元正态分布理论(中)
  • 回归分析|笔记整理(5)——多元正态分布理论(下)
  • 回归分析|笔记整理(6)——多元线性回归(上)
  • 回归分析|笔记整理(7)——多元线性回归(下),违背基本假设的情况
  • 回归分析|笔记整理(8)——变数选择
  • 回归分析|笔记整理(9)——带约束的线性回归,多重共线性
  • 回归分析|笔记整理(A)——岭回归,主成分回归(上)
  • 回归分析|笔记整理(B)——主成分回归(下),偏最小二乘回归
  • 回归分析|笔记整理(C)——非线性回归,含定性变数的回归模型

我们开始本节的内容。

LASSO回归

做机器学习的不可能对这个词感到陌生。如果用中文来说,它就是「套索」回归的意思。不过有的人叫它LASSO可能是因为它的图形像一个套索,但是这只是一个巧合,它的实际的全称是Least Absolute Selection and Shrinkage Operator,最小绝对值选择与收缩运算元。这个名字为什么这么叫,我们之后就知道了。

岭回归回顾

我们在第A节说过岭回归的解是

hat eta = (XX+lambda I)^{-1}XY

但是弄机器学习的却发现它们一般考虑岭回归的解是最小化下面这个目标函数得到的。

Q _ { r } = frac { 1 } { 2 N } sum _ { i = 1 } ^ { N } left( y _ { i } - eta _ { 0 } - sum _ { j = 1 } ^ { p } x _ { i j } eta _ { j } 
ight) ^ { 2 } + lambda | eta | _ { 2 } ^ { 2 }

任何一个人都会感到奇怪,因为一个地方 lambda 的添加是为了消除多重共线性,但是另一个地方 lambda 的添加更多的是为了防止模型的过拟合。但是如果你按照第6节推导多元回归公式的方法做一遍,你会发现这两个形式真的是等价的。当然了,你也会发现一些很细小的不同,它与之前的 Q 相比多了一个系数。

应用Lagrange对偶法(优化理论的东西,不知道不影响接著看),可以知道最终是为了解下面这个优化问题。

min _ { eta_0 , eta } left{ frac { 1 } { 2 N } left| y - eta _ { 0 } 1 - X eta 
ight| _ { 2 } ^ { 2 } 
ight} , | eta | _ { 2 } ^ { 2 } leq t

实际数据中一般 y 都会中心化,所以 eta_0 就可以省略掉。

LASSO回归

LASSO回归的提出很简单,就是把惩罚项换了一个形式,从2-范数换成了1-范数。把它的拉格朗日对偶形式改成了下面这样

min _ { eta _ { 0 } , eta } left{ frac { 1 } { 2 N } left| y - eta _ { 0 } 1 - X eta 
ight| _ { 1 } 
ight} , | eta | _ { 1 } leq t

将它得到的解称为LASSO估计。它对应的原始的优化形式中的那个 lambda 也改了一个名字,就叫收缩运算元。就这么一个小的改动就带来了一个大的创新。我们可以看一下它的实际实验结果。

你可以看到,二者都可以让回归系数慢慢的趋于0,但是不一样的是LASSO回归针对不同的自变数,会使其收敛的速度不一样。有的变数就很快趋于0了,有的却会很慢。因此一定程度上LASSO回归非常适合于做变数选择。相比之下,看岭回归的图就容易看得出来,它也会有这个趋势,但是严格趋于0的时候一定是要求它的 lambda 要非常非常大(这个图可能初看有些让人误解,注意它的横坐标并不是 lambda 而是 operatorname{df} (lambda) )。而LASSO就不会有这个烦恼。

所以为什么是这么一个情况呢?这里我们不会严格证明,只会简单解释一下。我们考虑一个只有二元变数的情形。那么这样的话,如果我们画出关于这两个变数取值的平面,两种回归模型的最小二乘解就会对应著平面上的某两个点。

但是实际情况下,因为这两种回归在拉格朗日对偶形式下人工添加了一个限制条件,因此相当于它们的取值多了一个限制。现在的问题关键来了,这个「限制」我们如何用几何图形描述?

在岭回归中这个限制是 | eta | _ { 2 } ^ { 2 } leq t ,直观理解就是边界为圆,那么LASSO中边界就是一个旋转了45度的正方形。而同样的,我们的目标函数也是一个二次的(不是二次的话你平方下就好了),这样的话我们可以用一个一个的同心圆来表示它的取值,每一个同心圆上的 eta 值都会使得目标函数的取值相同。

那么现在图形很明确了,原点的限制范围就是一个圆或者一个正方形,然后会有一个又一个的同心圆在外面。如果 t 足够大,那么这个限制区域就很大,就有可能「包裹住」那个最小二乘点,那就没有讨论的必要了。如果 t 很小,根据优化理论,容易得到,当同心圆与限制区域相切(第一次触碰)的时候就是优化的解。

有了这个思路我们再来看下面这张图,你就明白为什么了。

(这里的 omega 就是 eta

因为圆「太凸,太光滑」了,所以相切很容易做到,而且很不容易做到使得回归系数 eta 值取0的时候相切到。但是正方形就不一样了,它的区域「很尖」,所以它们第一次碰到的点就更容易是「尖点」,也就是所谓的使得变数值取0的点。

这就是它的几何解释,也一定程度上说明了为什么LASSO回归在高维(别忘了,指的是自变数的个数大于样本个数的情形)的问题上有如此广泛的应用。

一般LASSO解的计算会使用坐标下降法或者最小角回归。但是它们都超纲了,这里就是提一下。

LASSO在广义线性模型中的应用

它主要针对的是我们上一节说的「含有定序变数的线性回归」的内容。

在之前我们说过,对于一个回归模型,求解它的最优值一般是两种策略——最小二乘法和极大似然估计法。然后我们又说了,在这一部分内容中,最小二乘法是无法使用的,所以只能使用极大似然估计法。极大似然估计法的目的是最大化似然函数。但是我们之前讨论的时候,如果要加一个惩罚,它的优化问题一定要是「最小化」一个表达式。因此我们采用的是取反的方法,考虑下面这个表达式

- frac { 1 } { N } sum _ { i = 1 } ^ { N } left{ y _ { i } log P ( Y = 1 | x _ { i } ) + left( 1 - y _ { i } 
ight) log P ( Y = 0 | x _ { i } ) 
ight} + lambda | eta | _ { 1 }

容易看得出来这个就是把似然函数取反然后加了一个1-范数作为惩罚。

如果我们把完整的广义线性模型的表达式代进去就可以得到

- frac { 1 } { N } sum _ { i = 1 } ^ { N } left{ y _ { i } left( eta _ { 0 } + eta ^ { T } x _ { i } 
ight) - log left( 1 + e ^ { eta _ { 0 } + eta ^ { T } x _ { i } } 
ight) 
ight} + lambda | eta | _ { 1 }

化简的原理很简单, P(Y=1|x_i) = frac{e^{eta_0+eta^Tx_i}}{1+e^{eta_0+eta^Tx_i}}P(Y=0|x_i)=1-P(Y=1|x_i)

如果是针对多分类的Logistic回归,那么前面我们说过表达式为 P ( Y = k | X = x ) = frac { e ^ { eta _ { 0 k } + eta _ { k } ^ { T } x } } { sum _ { l = 1 } ^ { K } e ^ { eta _ { 0 } + eta _ { l } ^ { T } x } } ,那么这样的话我们也容易得到它对应的负对数似然函数的形式

- frac { 1 } { N } sum _ { i = 1 } ^ { N } log P left( Y = y _ { i } | x _ { i } ; left{ eta _ { 0 k } , eta _ { k } 
ight} _ { k = 1 } ^ { K } 
ight) + lambda sum _ { k = 1 } ^ { K } left| eta _ { k } 
ight| _ { 1 }

简单提醒一下,在多分类问题中,我们是在每一类都有一个对应的回归模型,然后最后在每一类里进行转换再求概率的。因此这里的 eta_{0k} 相当于第 k 类中的 eta 的常数项系数。

回顾一下,我们当时试图寻找 eta 的最优解的时候,提出要将某一类的参数都设为0,以处理其不确定性。但是这里我们实际上不再需要了。原因是在于其惩罚项是针对 eta_k 加的,那么你在每一个自变数 x_j 对应的 eta_{kj} 上加一个常数的情况下,虽然它的似然函数值本身不会发生改变,但是右边的惩罚项会发生变化,换句话说, left{ eta _ { k j } + c _ { j } 
ight} _ { k = 1 } ^ { K }left{ eta _ { k j } 
ight} _ { k = 1 } ^ { K } 会得到相同的概率。

同样的,也是用这个思路,对于任意一个给定的 {	ilde eta_{kj}}_{k=1}^{K} ,我们都可以让它每一类中偏离一个常数 c_j ,那么显然,为了让惩罚项最小,我们就需要让 c_j 满足

c _ { j } = arg min _ { c in R } left{ sum _ { k = 1 } ^ { K } left| 	ilde { eta } _ { k j } - c 
ight| 
ight}

容易知道,这个时候, c_j 就是 left{ 	ilde { eta } _ { 1 j } , cdots , 	ilde { eta } _ { K j } 
ight} 的中值。这样的话其实可以看出,除了常数项系数,其余的系数的最小值是唯一确定的,那自然不用考虑使某一类参数为0了。

当然了,也正是因为常数项系数还没有限制,所以我们要人工对常数项系数添加一个条件。比方说和为0。

我们可以看出,对于上面的LASSO模型,我们的惩罚项是针对类别加的,也就是说它相当于在「每一个类别」中做变数选择。因此实际上它可以做到每一个类的系数向量都是稀疏的(即只有很少一部分为0),但是整个模型系数不稀疏(想想为什么?)。所以还有一种方法是对「某一组系数」 eta _ { j } = left{ eta _ { j 1 } , cdots , eta _ { K j } 
ight} 做一个组LASSO回归

- frac { 1 } { N } sum _ { i = 1 } ^ { N } log P left( Y = y _ { i } | x _ { i } ; left{ eta _ { j } 
ight} _ { j = 1 } ^ { p } 
ight) + lambda sum _ { j = 1 } ^ { p } left| eta _ { j } 
ight| _ { 2 }

什么叫「组LASSO」呢?其实容易理解,就是我们考虑让它针对「每一个自变数对应的所有系数」分别加惩罚(将每一个 ||eta_j||_2 都单独拿出来当作一个1-范数来看就好)。那么这样的话,就相当于会使得某一个自变数的对应的所有的系数都不在模型之中。而在模型中的时候,系数全为非0,并且有 sum _ { k = 1 } ^ { K } eta _ { k j } = 0 (想想为什么?)

广义LASSO惩罚

LASSO有个麻烦的地方就是不善于处理高度相关的变数,我班门弄斧的解释一下:比方说针对一个自变数 x_j ,它在给定一个收缩运算元的情况下会得到一个对应的系数 eta_j ,现在我极端一点,加入一个与原来的自变数一模一样的新自变数 x_j ,这个新的自变数就会对应一个新的系数 eta_j 。但是你会发现一个问题,就是说你在加入新的自变数之前和之后,其实模型本身的性质没有任何的改变。这样的话就会使得说,这两个自变数的系数之和应该是一个常数。这样就麻烦了,就会导致给定收缩运算元的情况下,两个系数的解不唯一,(这主要是因为惩罚项是一个1-范数,因此不会改变它的解不唯一的特性),也就直接导致了系数路径的不稳定。

考虑到这个原因,实际上还会有很多其它的类似的模型,我们只是把它们放在这里,不再做详细的介绍。

第一个是弹性网路,它的形式是

min _ { left( eta _ { 0 } , eta 
ight) in R 	imes R ^ { 
ho } } left{ frac { 1 } { 2 } sum _ { i = 1 } ^ { N } left( y _ { i } - eta _ { 0 } - x _ { i } ^ { T } eta 
ight) ^ { 2 } + lambda left[ frac { 1 } { 2 } ( 1 - alpha ) | eta | _ { 2 } ^ { 2 } + alpha | eta | _ { 1 } 
ight] 
ight}

不过就是把LASSO和岭回归拼到了一起而已,但是它却很容易做到缓解这方面的问题。这是因为如果我添加的惩罚项是一个2-范数,它的形式就类似于欧氏距离。这样的话虽然说我会有两个系数 eta_1,eta_2 的和为一个常数,但是它会要求最小化一个目标 eta_1^2+eta_2^2 。这个极值点是唯一的,所以就不用担心这个问题了。

第二个是稀疏组LASSO,它的形式是

min _ { left{ 	heta _ { j } in R ^ { prime } 
ight} _ { j = 1 } ^ { J } } left{ frac { 1 } { 2 } left| y - sum _ { j = 1 } ^ { J } Z _ { j } 	heta _ { j } 
ight| _ { 2 } ^ { 2 } + lambda sum _ { j = 1 } ^ { J } left[ ( 1 - alpha ) left| 	heta _ { j } 
ight| _ { 2 } + alpha left| 	heta _ { j } 
ight| _ { 1 } 
ight] 
ight}

我们在上面说了两种形式的变数选择,这两种方法分别做到了「组内稀疏」和「组间稀疏」。这样的话就保证了整个系统都能「足够稀疏」

第三个是重叠组LASSO,它的形式是

min _ { 
u _ { j } in N _ { j } , j = 1 , ldots , J } left{ frac { 1 } { 2 } left| y - X left( sum _ { j = 1 } ^ { J } 
u _ { j } 
ight) 
ight| _ { 2 } ^ { 2 } + lambda sum _ { j = 1 } ^ { J } left| 
u _ { j } 
ight| _ { 2 } 
ight}

这个针对的问题是自变数组在不同组间存在重合的情况。我们比方说设自变数组有5个自变数,并且 alpha_1 = (1,2,3) , alpha_2 = (3,4,5) (这个表示的就是组内有哪几个自变数)为两个组别中所含的自变数情况。那么这样的话,对于整个系数组 eta = (eta_1,eta_2,eta_3,eta_4,eta_5) ,我们就可以设 
u_1 = (eta_1,eta_2,eta_3,0,0)
u_2 = (0,0,	heta_3,	heta_4,	heta_5) (因为每一个组内要分别做回归,所以系数肯定不可能是一样的)。这样的话再使用这个模型,就会发现它可以做到「组间稀疏」,做不到组内稀疏。

第四个是融合LASSO,它的形式是

min _ { 	heta in R ^ { N } } left{ frac { 1 } { 2 } sum _ { i = 1 } ^ { N } left( y _ { i } - 	heta _ { i } 
ight) ^ { 2 } + lambda _ { 1 } sum _ { i = 1 } ^ { N } left| 	heta _ { i } 
ight| + lambda _ { 2 } sum _ { i = 2 } ^ { N } left| 	heta _ { i } - 	heta _ { i - 1 } 
ight| 
ight}

这个模型可以看出,如果我的 	heta_i,	heta_{i-1} 的距离很近的话,那么这个惩罚项就会很小。因此它处理的问题就是在样本排序有规律,相邻样本可能共享参数或者接近的情况。

了解即可,不必深究。

分位数回归

我相信你记得我们的普通回归模型都是假设 E(y|x) = X eta 的,这说明实际上我们估计的是这一些统计数据的条件期望。问题在于条件期望相同的分布一抓一大把,因此实际上这样估计就会有很多不确定性。考虑到这个问题我们引入了分位数回归。

严格意义上的分位数定义是 F ^ { - 1 } ( 	au ) = inf { x : F ( x ) geq 	au } 。直观上是很好理解的,不过它还有一个挺有趣的性质就是下面这个

q _ { 	au } = arg min _ { c } E left[ 
ho _ { 	au } ( X - c ) 
ight]
ho _ { 	au } ( x ) = [ 	au - I ( x < 0 ) ] x

这个证明是概率论的东西,我们直接贴出连续情况下的证明,不再细说

egin{aligned} & frac { partial } { partial c } E left[ 
ho _ { 	au } ( X - c ) 
ight] \ = & frac { partial } { partial c } left{ ( 1 - 	au ) int _ { - infty } ^ { c } | x - c | f ( x ) d x + 	au int _ { c } ^ { + infty } | x - c | f ( x ) d x 
ight} \ = & ( 1 - 	au ) int _ { - infty } ^ { c } f ( x ) d x - 	au int _ { c } ^ { + infty } f ( x ) d x \  = & ( 1 - 	au ) F ( c ) - 	au ( 1 - F ( c ) ) \  = &F ( c ) - 	au \  = & 0 end{aligned}

这个性质我们之后会用到。

线性分位数回归模型其实很简单,就是通过一个一般的回归模型稍微修改修改,使得它可以模拟出在某一个 	au 分位数时的情况。数学上来说就是

y _ { i } = x _ { i } ^ { T } eta ( 	au ) + epsilon _ { i } ( 	au )

并且我们左右两边取 	au 分位数得到的就是 Q_	au(y_i|x_i)=x_ieta(	au)epsilon_i(	au) 独立同分布,且 Q _ { 	au } left( epsilon _ { i } ( 	au ) 
ight) = 0 。所以我们一般的分位数回归的形式就是 Q_	au(y|x) = x^Teta(	au) ,解决的问题就是

min _ { eta in R ^ { p } } sum _ { i = 1 } ^ { n } 
ho _ { 	au } left( y _ { i } - x _ { i } ^ { T } eta 
ight)

这是由上面的性质来决定的。

一般来说我们会使用线性规划来解它,我们略去这方面的细节。

因为我们是一个概述,所以我们只是试图感性上理解它为什么这么去做。我们考虑一下下面的两个一般的回归模型,也即是

y=1+2x+epsilon

y=1+2x+(1+x)epsilon

其中 epsilon sim N(0,1) 。那么可以看出,第一个模型是同方差的,而第二个模型是异方差的。实际上我们就可以看出它的分位数回归对应的结果

同方差
异方差

以异方差的结果为例,在每给定一个分位数 	au 之后,对于任意给定的一个数 x_i ,都会有对应的估计的因变数的 	au 分位数。那么容易看出来,在这个模型中, 	au 分位数取得越大,对于给定的 x_i ,它的分位数的值就越大,自然直线就会向上偏移。

我们再用数学模型推导一遍。异方差的模型形式为 y = 1 + 2 x + ( 1 + x ) epsilon 。那么两边取 	au 分位数,我们可以看到结果为

Q_	au(y)=1+2x+(1+x)Q_	au(epsilon)

(对一个非随机变数取分位数当然不会变)

那么因为 epsilon 是服从一个分布的(这里是正态分布),那么这样就可以得到表达式 Q_	au(epsilon)=F^{-1}(	au) 。这样的话化简可以得到

Q_	au(y)=1+F^{-1}(	au)+x(2+F^{-1}(	au))

可以看出来,异方差的情况下,不同的分位数就会使得直线有不同的斜率。这也可以解释为什么两张图中,第一张图的直线相互平行,而第二张图的直线做不到这一点。

同样的,在分位数回归中,你也可以添加诸如变数选择(稀疏)或者光滑的条件,那只需要考虑添加对应的1/2-范数惩罚条件即可。

分位数回归的最重要的一个应用就是估计预测区间。因为分位数回归相当于针对了某些具体的分位数去做回归,这样如果说我要做95%的置信区间,我的上下边界其实就可以任意取,而不一定非要取 alpha=0.025 这样的显著性水平了。这就大大增加了预测区间的灵活度。

当然了,如果我们还是取一般的我们考虑的置信区间,那么给定 x_0 得到的 y_0 的置信区间的表达式为

left[ x _ { 0 } ^ { T } hat { eta } ( 0.025 ) , x _ { 0 } ^ { T } hat { eta } ( 0.975 ) 
ight]

挺方便的,不是吗?

分位数回归有相当多的良好的性质,比方说良好的渐近性,处理各种误差项(独立同分布,独立不同分布等等),有很多假设检验方法等等,你也可以根据实际情况添加限制条件,总之很灵活。

实际的情况下还有很多其余的分位数回归的变种,我们列在这里

第一个是非线性分位数回归,形式为

min _ { eta in R ^ { 
ho } } sum _ { i = 1 } ^ { n } 
ho _ { 	au } left( y _ { i } - f left( x _ { i } , eta 
ight) 
ight)

第二种是非参分位数回归,形式为

min _ { eta in R ^ { 
ho } } sum _ { i = 1 } ^ { n } 
ho _ { 	au } left( y _ { i } - K ( x , eta ) 
ight)

第三种是半参分位数回归,形式为

min _ { eta in R ^ { 
ho } } sum _ { i = 1 } ^ { n } 
ho _ { 	au } left( y _ { i } - f left( x _ { i } , eta 
ight) - K ( x , eta ) 
ight)

非参数统计也是统计学一个重要的部分,但是我们目前还没学到,就不乱说细节了。

到此,我们算是结束了这两个部分的内容。也算是正式结束了《回归分析》的所有正课内容。

小结

我们在这一节主要介绍了LASSO回归及其应用,以及分位数回归的基本方法。我们基本上感性的和大家解释了一下每一个模型到底应该如何理解。实际的理论模型对于本科生来说过于困难因此没有在笔记中涉及到。需要注意的是LASSO和其对应的应用即使是在最近热门的机器学习方向都是一个热点,感兴趣的同学可以继续在网路的文献上获得更加详细的介绍。

——————————————————————————————————————

本专栏为我的个人专栏,也是我学习笔记的主要生产地。任何笔记都具有著作权,不可随意转载和剽窃

个人微信公众号:cha-diary,你可以通过它来有效的快速的获得最新文章更新的通知。

专栏目录:笔记专栏|目录

想要更多方面的知识分享吗?欢迎关注专栏:一个大学生的日常笔记。我鼓励和我相似的同志们投稿于此,增加专栏的多元性,让更多相似的求知者受益~

推荐阅读:

相关文章