回归算法之线性回归

数据挖掘有两大主题分别是回归和分类,接下来我们需要对每一种分类、回归算法进行学习和总结,这篇文章是我学习了最简单的回归和分类算法基础上总结出的个人经验,希望大家多多指教有什么不对可以提出来。

一、什么是线性回归

要理解这个名词含义那么就要分别理解什么是线性和回归:

线性:变量之间的关系是一次函数关系,如y=x+1那么x和y的关系就是线性关系。相反回归算法之线性回归中x与y的关系就是非线性。

回归:最简单的理解就是通过大量的观测值去描述未知的实际值,因为客观原因实际值往往无法知道,只能通过对其大量次数的测量才能对实际值有着清晰的描述。

二、线性回归前提

很多情况下数据分析人员拿到训练数据就开始使用算法来建模,这往往很不科学严谨,因为很多算法是有前提条件的,比如线性回归算法的前提条件就是因变量要满足正态分布或者类正态分布。描述变量的总情况只有在正态分布下才能用均值描述,否则其他很多分布用均值描述是不对的。

现实往往是残酷的,很多情况下因变量是不严格满足正态分布,所以遇到不是正态分布的时候该怎么办呢,我建议用以下三种方法:

1、判断因变量是否满足‘钟型线’,下图就是变量分布就是钟型线,可以认为是满足正态分布。

回归算法之线性回归

2、将数据取对数或者开根号以及其他变换方法,虽然经过转换后不是原来的数据,但是可以预测转换后的数据,再经过反变换得到实际数据。

3、选用其他的研究方法,在对某种变量进行检验时候,如果数据不是正态分布那么可以使用其对用的非参数检验方法

上述方法可以常规的去转换不严格满足正态分布的数据,对于如何去检验数据是否满足正态分布,可以利用K-S检验的方式。

三、线性回归的表达式

回归算法之线性回归

其中回归算法之线性回归是未知的参数,需要大量的观测数据进行计算。

四、表达式的评估方式

一个模型好不好需要实际来评估才行,如何去评估回归算法的优劣呢,这时损失函数就派上用场了,损失函数就是表明实际值与观测值或预测值之间的距离函数,这个函数有多重,最常用的还是一个叫均方误差的损失函数,即:

回归算法之线性回归

其中回归算法之线性回归为预测值前面的1/2m这个系数是为了后面计算梯度加上的,对模型参数的估计没有影响。

五、如何计算表达式的参数

线性回归中计算回归的参数有两种方式分别为最小二乘法、梯度下降法(当然还有其他变种的梯度下降达)以及牛顿法等。其中我们这里主要介绍最小二乘法和梯度下降法。

1、最小二乘法

理解这个概念其实很容易,高中时候我们学过极值点的概念,在函数中极值点就是其附近的最大值或者最小值,而损失函数是二次方程所以其极值点就是损失函数的最小值,那么最小值对应的点就是我们需要得到的。

在多维空间中模型中的x往往是多维的,所以参数w、自变量x以及估计值y就是矩阵和向量的形式,即。

回归算法之线性回归

回归算法之线性回归,X是(m,n)矩阵

回归算法之线性回归

将上述的向量带入损失函数中可得

回归算法之线性回归

对损失函数计算一阶导数可以得到

回归算法之线性回归

回归算法之线性回归,那么参数就可以得到:

回归算法之线性回归

以上就是最小二乘法的求值过程,上述如果看不懂可以先去研究一下线性代数。虽然最小二乘法很直接一步到位的计算出参数W,但是其缺点也不得不受到重视,

缺点一:当维度很高时候矩阵X会很大,矩阵计算会非常的浪费时间;

缺点二:当矩阵X中存在共线性时,矩阵的逆运算无法求解或者得到的值出现失真;

2、梯度下降法

梯度下降法可以很好的不足前面最小二乘法的缺点。梯度下降法是通过沿着梯度方向以某种设定的步长去寻找最优值的过程,所说的梯度就是参数W中的梯度,数学的表达式可以写成

回归算法之线性回归

其中w为通过梯度更新的参数,回归算法之线性回归为步长,回归算法之线性回归就是损失函数在某个参数分量上的梯度。步长需要人为指定,其值较大时表明想要快速的去找最优值,那么往往因为步子太大在最优值前徘徊得不到最优值。如果步子太小,那就需要更新次数太多,这就需要较大的计算时间。如何寻找到一个较好的步长是梯度下降法一个永恒的主题。

梯度下降法的计算过程就不具体写了,这里只讲了一个梯度下降法的原理过程,梯度下降法的知识点有很多,大家有兴趣的可以去学习一下,这对后续理解更多复杂的回归算法有很大帮助。

六、正则化

什么是正则化,我的理解就是给损失函数加上一个枷锁,不会让模型过于复杂。正则化的方式有很多如决策树中限制叶子节点数,在线性回归中主要采用三种正则化的方式,每一种正则化都有不同的应用场景。

1、L1正则化

回归算法之线性回归

加入L1正则化的线性回归称为lasso回归,但是因为加入一范数,该点在0值时没有导数所以不能用常规的梯度下降法或者最小二乘法而是采用最小角回归(LAR)。

L1正则化可以让模型权值变得稀疏(相关变量的系数变为0),这样就可以用于筛选特征,至于为什么可以让参数变0,那么以下图解释

回归算法之线性回归

前面说的正则化就是给损失函数加上枷锁也就是添加了约束条件,上述就是二维参数空间图,蓝色区域就是添加的约束条件,红色椭圆就是权值的搜索空间,红色的每一条椭圆代表着损失值相同的等值线,所以上图就可以理解成在满足蓝色区域约束条件下,找到最小损失值的权值向量。

上图中红线在轴上相遇的概率最大,而在顶点上其他特征的权值就变成了0,L1正则化就可以得到较为稀疏的权值向量,从而能够筛选特征,而参数回归算法之线性回归是用来控制蓝色区域的大小,值越小约束区域越小,那么越容易在轴上相交。

2、L2正则化

回归算法之线性回归

加入L2正则化的线性回归被称为Ridge回归,该回归可以用梯度下降法或者最小二乘法求解,求解过程和普通回归方程求解过程一样,一阶导数之后损失函数变成

回归算法之线性回归

最小二乘法就是令loss=0,那么可以得到

回归算法之线性回归

从上式中可以看出岭回归就是在矩阵求逆前引入了对角线为回归算法之线性回归单位矩阵,引入该单位矩阵就不会出现无法求逆矩阵的情况。

如果采用梯度下降法那么权值更新就是下面的式子

回归算法之线性回归

和L1范数不同的是L2正则化是以权重的二次方作为约束条件,在参数空间中相当于加了圆心为原点的圆,如下图:

回归算法之线性回归

上图是一个二维的参数空间,蓝色区域为圆形的约束区域,在参数搜索过程中红色等值线与圆形区域相切的点就是最优点(此时损失值最小且满足约束条件)。因为约束区域是圆形,所以等值线与圆的相切点在轴上的概率较小,那么导致Ridge回归无法做特征筛选,但是可以防止过拟合,当参数回归算法之线性回归越小那么约束区域越小,得到的参数值也就越小,从而可以防止过拟合。其实在L1范数下也可以防止过拟合,该回归去除共线性较强的特征使得模型较为简化从而达到防过拟合的作用。

3、ElasticNet弹性网络回归

弹性网络回归其实是综合了前面L1正则化和L2正则化,损失函数的表达式如下

回归算法之线性回归

参数回归算法之线性回归是用来控制L1和L2正则化的比重

七、使用场景

1、当特征数量多于数据量且数据特征具有高相似性时可以采用lasso回归,也可以用来筛选特征。

2、当数据特征之间有较高相似性可以采用ridge回归。

3、如果发现lasso回归的特征权重太过稀疏,而且ridge的正则化不够时可以采用弹性网络。