在之前的文章中,笔者给出了关于最小二乘法相关公式的整体推导过程,最小二乘法本身除了可以利用数据进行相关参数的拟合(主要是系数和偏置),而且作为分类问题中最为简单的模型也有着重要作用,我们也可以将其称作最为简单的线性回归模型(以后需要涉及到支持向量机的问题,即Support Vector Machine这个其实也是一种线性回归模型,但在线性不可分的情况下,需要利用核函数对其进行相关处理),后面可能还会涉及到基于对数模型(多分类)的线性回归问题(这个叫法有点奇怪,既然是线性回归怎么还和对数发生关系),这主要包括Softmax Regressionlogistic Regression,但它们不是本文的讨论范围。


问题由来

         笔者认为,对于解决同样问题,任何新方法提出的初衷可能都是由于原方法或技术无法解决或不能完美解决,所以本文所要重点讨论的是关于一般线性回归模型在某些场合可能存在的问题,其实问题主要是由于样本存在一定的相关性(就是样本抽样方法存在问题或样本空间本身太小,这个问题其实在很多场合都存在,另外一种方法扩充样本的方法是对其进行一定变型,这种方法可以在讨论前馈神经网络的时候涉及),其结果就会导致过拟合(Overfitting),在数学上的表现就是样本矩阵及其样本矩阵转置的乘积是奇异的,即矩阵不可逆,这样我们就无法利用推导出的公式进行计算了,为了描述方便,现再次列出原公式,如下:


wKiom1njRMTTXAz3AAANMpNCcyE528.png-wh_50

   按照之前文章的约定,X就是一个n*m的矩阵,其中n就是样本数量,而m是向量的维度,为了讨论方便,上式省略了偏置b

 

  这是一个Close Form,就是闭式解(所谓闭式解的含义就是我们可以公式直接获得结果,但如果不是则可能需要借助迭代的方法求解,比如牛顿法等)。

岭回归

  岭回归(Ridge Regression)的提出就是为了部分解决公式(1)中可能出现的矩阵不可逆的情况而提出的,否则会出现Leo Breiman所提出的罗生门现象,而造成解的不唯一性。在下面的论述中,我们仍然省略偏置,这个其实只要对样本稍加处理即可,所以我们现在聚焦向量x的系数w

 

         其实如何解决这个问题,是比较简单的。首先还是将线性回归的目标公式再列出:

wKioL1njQlnCqIvjAAAQsHVkuMk685.png-wh_50


  其N是样本的数量,而λ(大于等于0)被称作正则化系数,用来控制收缩程度,它的值越小收缩程度越大,显然当其为0时则退化成原线性回归问题。

 

  通过上述的处理,公式1就会变成如下的形式:

wKioL1njQpKw6DwGAAAMf9kt4co463.png-wh_50


  其中In*n的单位矩阵,故即便样本及其转置乘积不是满秩的,加入后面的部分也能构成非奇异矩阵。

 

  顺便提一句,一般而言公式2本身是可导的,所以其求解是比较容易的,但下面讨论的Lasso回归则不然,读者需要注意其推导的不同(这个就比岭回归要复杂一些,要使用一些看上去比较诡异的方法)。

Lasso回归

         对于岭回归而言,在公式2中我们可以看到和原始回归方法相比,多出的一项为系数平方和,但这个计算复杂度略微有点高,如果我们只关心那些非零的系数则完全可以用一范数来替代二范数,就能达到几乎同样的效果,不过带来的代价就是公式不可导;Lasso回归的目标公式如下:


wKiom1njRYeA3Jf1AAASNdlrDwM116.png-wh_50

  其中m是向量的维度。

 

  因为它是一范数,故系数有更多的机会为0(对应二范数而言),进而有可能得到更加稀疏的解。

 

         现将公式4改写成矩阵形式:

wKioL1njQwaDv1lyAAANkzvE260991.png-wh_50

   前面已经提到过了,与原始的线性回归及岭回归不同的是,求解上式的难点在于一范数在零点不可导(绝对值的原因),所以它不像前两者,没有闭合解,而需要使用FISTFast Iterative Shrinkage Thresholding)方法,这种方法可以用于求解形如下式的目标函数:

wKiom1njRebQekImAAAMwXZEYv0403.png-wh_50

   其中g(x)为连续的凸函数,可以不光滑,而f(x)则为光滑函数,其导数应满足利普希茨连续(Lipschitz Continuity),这个连续性比一般的一致连续性要求更强,即存在常数L(大于零),满足对于定义域D上的任意两个不同的实数xz(其实可以扩充到其它符合要求的空间中,不一定非要是实数空间,不过度娘是这么解释的)都有:

wKiom1njRhHRWXjtAAAOVMI2A1w698.png-wh_50


  上式给人直观的感受就是把函数的变化收缩在一定范围内,对于满足条件最小的L而言,则称其为利普希茨常数,如果L < 1f被称作收缩映射。

        

  νf(x)为f(x)的梯度;根据相关文档可以得到如下公式:

wKioL1njQ7rxzxWMAAAP9s-mvN0501.png-wh_50


  需要说明的一点是在上面的公式中,< >是内积符号,而且这个公式的右边部分有点类似泰勒展开式(函数f(x)在点z的展开)。

         现令spacer.gif,而令spacer.gif,然后将f(w)spacer.gif处展开(这里t表示w迭代了t次),由公式8可得如下公式:


wKiom1njRtTScoJfAAAf6KNNCJE133.png-wh_50

  通过上面的变形来看FIST方法最小化的并不是原函数,而是其一个上界函数(因为L是大于零的),但经过变形的公式其实仍然无法求其导数,那么可以去掉公式9的相关常数部分再添加一些常数(因为在下面的公式中,我们使用了argmax/argmin函数,对于这个函数而言,加入或去除一些常数项是不影响最终得到的结果的,这点需要注意,否则无法理解其精髓)。经过处理的公式变为如下形式:

wKiom1njRzDRUi8JAAAqcE5A0FE091.png-wh_50

wKioL1njRKWAMZFzAACOXIFiCf4836.png-wh_50

wKiom1njR52ThN72AABdc-197tk592.png-wh_50

最后的话

         至于如何去迭代求解参数,感兴趣的读者可以在网上搜索,算法本身不是太复杂,最终参数w达到收敛即可;但这里可能需要解释的是公式11-13的含义,其实就我的理解而言由于目标函数不可导,我们通过一些处理使得它能达到要求,不是太严谨的话,你也可以这么理解,即公式10可以按不同的维度写作如下形式:

wKioL1njRRHyTZnbAAAYLtX-rUM408.png-wh_50

   如果对上式求导也是无法进行的,那么可以分别在spacer.gif大于0或小于0时进行求导并令其为0,那么实际得到的就是公式12,其中:

wKiom1njR_LxVaXlAAAPOdOhI3o313.png-wh_50