`

Regression:Linear Regression Analysis

阅读更多

RegressionLinear Regression Analysis

 

这次我们来学习线性回归模型(Linear Regression Model),线性回归是一种简单的停机模型。最简单直观的概念就是输入X和输出Y为线性关系;尽管关系简单,但是对于后来的学习非常重要。我们前面已经学习过基本概念,有输入数据X,输出数据Y,待估计变量W,则线性模型可以表示为: 

其中的误差表示符合Regression的假设。

我们可以把线性回归和高斯分布的关系表示的更为明显一点: 

如果将数据限制在一个维度上,可以得到如下的表达式,这个是个示例,仅供参考:

同时线性回归也可以通过非线性函数(Non-Linear Function)表示非线性关系(Non-Linear Relationship),通过使用映射函数\phi(x),可以将数据进行额外的处理。 

该函数可以称为是线性回归的一般形式。\phi(x)称为是基函数,基函数的作用主要有:

1:空间映射,将输入空间映射到另外一个空间

2:看做是预处理或者是特征提取,将数据进行处理后再通过我们的线性变换

3:对于原始数据的处理非常灵活,这个基函数的选取对于模型没有影响,我们可以直接使用映射关系最为简单的映射关系来讨论,但是要注意这个基函数的真正含义。

实际上,从深层次来说,上面的这三点是一致的,就是对源数据做变换,包括映射、过来、处理等,这些操作表现在数据上都可以称为是变换(Transform)

举例:\phi(x)表示映射关系可以是: 

这个实际上是多项式回归,当d=1时,称为是单变量线性回归模型。

也可以是: 

相当于对于原始数据没有处理,直接通过基函数输出,在本次讨论中使用这个基函数模型。

 

 

讨论完模型,我们来看下Linear回归模型的的目标函数和解法: 

我们通常会用均方误差SSE来表示目标函数,以表明我们回归的效果;但是你会不会有疑问:这个误差函数是怎么得到的?为什么要使用这个误差函数来表征回归效果的好坏呢?我们下面来解决这个问题。

 

由于估计结果不可能准确的确定目标变量,因此目标变量和模型输出变量之间存在噪声,两者的关系如下:

其中噪声为高斯噪声,并且为i.i.d,符合我们上一篇文章中的假设,我们计算最大似然估计(Maximum Likelihood Estimation,MSE)log-Likelihood结果:

p(y|x)的概率密度代入可以得到:

其中RSS代表Residual Sum of Square,或者可以称为大家熟悉的SSE(Sum of Square Errors): 

 我们想最大化似然估计,根据推导结果,得到SSE的目标函数,为最小化估计误差。这个和我们最初的均方误差目标函数一致。

 

 

Normal Equation:求解最小方差

我们根据最大似然函数得到均方误差函数SSE(W)、或者是RSS(W)后,该怎么求解这个最小方差呢?将误差函数表示为:

W求导,可以得到最小二乘法(Ordinary Least Square)的闭式解:

 OLS解法的含义比较简单,就是综合误差最小,看下下面这幅图就能明白RSS的含义: 

红色圆点为观察值;红色的线为估计结果;蓝色的竖线表示估计误差。RSS的估计结果就是保证蓝色的线(误差)和最小。

 

使用Normal Equation求解的结果很顺利,但是由于在求解过程中需要整个观察数据,并且需要对于结果求逆,这个在矩阵操作中是个比较耗时的操作,我们想简化这种操作,使我们能够不通过求逆运算来得到最小误差,Gradient DescentStochastic Gradient Descent就是其中两种用来计算最小方差的方法,只是这个方法得到的节是局部最优值。

我们先看下Gradient Descent

梯度下降法基于这样一个事实:如果函数在某点x可微,那门函数在x处沿着梯度相反的方向下降最快,在机器学习中,最小化的目标函数通常有下面形式:

 梯度下降法通常使用下面的迭代方法:

 其中参数\eta为学习速率,只要初始化\theta后,然后进行不断的迭代操作即可。该过程在Andrew Ng教授的ML学习课程中有比较详细的讲解,笔记上也比较清楚。进行梯度算法实现时需要考虑的一下几个技巧:

1:归一化,对数据进行归一化,可以提高学习的速度,减少迭代次数。

2:收敛,这个可以通过误差函数Error Function值来判断是否收敛

3:学习速度选择,不收敛是可以减小\eta的值,通过多次计算判断。

4:学习速率额可以在迭代过程中调整,这个难度稍有点大,但是也应该属于梯度下降的内容。

 

Stochastic Gradient Descent:随机梯度下降

上面的梯度下降是批量(Batch)的方法,每次迭代都是用全量数据。如果我们使用随机梯度方法,每次迭代过程只使用单个数据的话,就可以得到一种Sequential的方法:

注意Stochastic Gradient DescentBatch Gradient Descent的区别:Batch Gradient Descent使用了全量数据,环顾四周,找下降的方向走;Stochastic Gradient Descent则是使用当前点的数据,仅根据当前点就判断出来下降方向;前者有充足的信息来确定方向,但是使用全量数据计算量比较大,后者仅根据当前点确定迭代方向,速度快但是准确性低,有可能会进入局部最优值。

前面我们学习了Linear Regression的模型,最大似然估计(MLE)和均方误差SSE的一致性;以及求解最小均方误差的Normal Equation,最后我们学习使用批量梯度下降和随机梯度下降来求解最小方差,得到最优解。

 

 

下面我们来讨论下Linear Regression的其它问题:

在上面我们提到线性回归误差函数里面的权重都是1,权重相同,如果我们要根据观察值进行数据的回归分析,很自然的一种想法是离观察点越近,对该点的估计值贡献应该越大,所以我们引入了Locally Weighted Linear Regression

基本假设如下:

 其中w满足如下公式: 

其中x为需要预测的特征,离估计点越近,样本的权重越大,影响越大。注意这个不是高斯分布。

可以得到带权重的回归解为:

此方法为非参数(Non-Parameter)学习方法,因为误差会随着预测值变化,所以估计值无法事先确定。每次进行预测都要进行一次计算,和kNN比较类似,都是利用全量数据,每次进行预测或者分类时都进行计算。

 

 

如果数据特征N大于数据点k时怎么办?我们是否还能用前面提到的回归方法进行操作?不能,因为其中的求逆操作不存在,根据数据点并不能恢复系统特征。或者说你有足够多的数据,不过这些数据间的相关性比较强,也就是说矩阵X非满秩,也不能使用前面提到的进行计算。这个问题的解决方法有下面两个,其实这两个解决方法也是过拟合(Overfitting)的解决方法:

1:删除、或者减小数据特征;这个可以人工选择特征数,或者通过算法自动选择合适的特征

2:规格化(Regularization)/收缩(Shrinkage),使用所有的特征,但是通过调整特征的参数,我们主要讲解这个方法。

通过RegularizationShrinkage能够保留所有的数据特征,但是响应的特征参数可以限制在较小水平,其中最常用的方法就是Ridge Regression

对于Ridge Regression,我们需要在误差函数上添加估计参数的先验概率:

 这个模型其实相当于最小化下式: 

我们可以得到该式的闭式解:

这个技术就被称为Ridge Regression。我们来对该式进行解释,添加估计参数的先验概率相当于添加了惩罚,对估计值进行了预调整,所以Ridge Regression也被称为Penalized Least Squares

Regularization技术很多,Ridge Regression只是其中最为典型的一种,应用广泛,特别是用来避免过拟合(Overfitting)

前面Ridge Regression的限制条件实际上是L2 

如果将限制条件改为L1

则可以得到另外一种称为LASSO(least absolute shrinkage and selection operator)Regularization方法: 

 注意Ridge RegressionLASSO的算法的不同点在于如果惩罚参数增加,Ridge Regression估计参数减小但是仍然会保持在非零(Non-Zero),而在LASSO中,惩罚参数增加会将估计参数压缩到零。

尽管只是限制条件改变,但是对于LASSO来说,求解难度确实增加不少。需要用到二次规划、或者凸优化的理论来解决,这个优化问题就有不低的要求了,各位看官仔细琢磨下能够解决这个问题。

 

Machine Learning in ActionLinear Regression章节提到了Forward Stagewise Linear Regression,该算法能够能够逼近LASSO解但是在实现上比较容易,并且Forward Stagewise Linear Regression在该章节有实现,对比看下。

 

The Element of Statiscal Learning第三章节中,有更多关于Linear Method for Regression,如果想深入理解Linear Regression Model,可以参看下这一章节。

 

本章节比较偏理论,示例和代码比较少,这并不意味这不重视代码实现。不过先深入理解理论知识,代码实现就比较简单,所以本文的重心并不在代码上。

如果想根据理论看下具体示例的话,可以参考

http://www.cnblogs.com/LeftNotEasy/archive/2010/12/05/mathmatic_in_machine_learning_1_regression_and_gradient_descent.html

 

 

 

 

 

 

 

  • 大小: 2.6 KB
  • 大小: 2.9 KB
  • 大小: 2.4 KB
  • 大小: 1.9 KB
  • 大小: 780 Bytes
  • 大小: 692 Bytes
  • 大小: 4.2 KB
  • 大小: 10.9 KB
  • 大小: 3.8 KB
  • 大小: 3.1 KB
  • 大小: 2.2 KB
  • 大小: 32 KB
  • 大小: 1.8 KB
  • 大小: 2.5 KB
  • 大小: 1.5 KB
  • 大小: 4.4 KB
  • 大小: 4.7 KB
  • 大小: 6.3 KB
  • 大小: 4.8 KB
  • 大小: 3.4 KB
  • 大小: 1.9 KB
  • 大小: 1.8 KB
  • 大小: 4.8 KB
  • 大小: 5.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics