线性回归

https://www.cnblogs.com/futurehau/p/6105011.html

http://blog.51cto.com/12133258/2051527

一、回归问题的定义

回归是监督学习的一个重要问题,回归用于预测输入变量和输出变量之间的关系。回归模型是表示输入变量到输出变量之间映射的函数。回归问题的学习等价于函数拟合:使用一条函数曲线使其很好的拟合已知函数且很好的预测未知数据。

回归问题分为模型的学习和预测两个过程。基于给定的训练数据集构建一个模型,根据新的输入数据预测相应的输出。

回归问题按照输入变量的个数可以分为一元回归和多元回归;按照输入变量和输出变量之间关系的类型,可以分为线性回归和非线性回归。

 

一元回归:y = ax + b

多元回归:

二、回归问题的求解

2.1解析解

2.1.1 最小二乘法

最小二乘法又称最小平方法,它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。

2.1.2利用极大似然估计解释最小二乘法

现在假设我们有m个样本,我们假设有:

误差项是IID,根据中心极限定理,由于误差项是好多好多相互独立的因素影响的综合影响,我们有理由假设其服从高斯分布,又由于可以自己适配theta0,是的误差项的高斯分布均值为0,所以我们有

所以我们有:

也即:

 表示在theta给定的时候,给我一个x,就给你一个y

那么我们可以写出似然函数:

由极大似然估计的定义,我们需要L(theta)最大,那么我们怎么才能是的这个值最大呢?两边取对数对这个表达式进行化简如下:

需要 l(theta)最大,也即最后一项的后半部分最小,也即:

所以,我们最后由极大似然估计推导得出,我们希望 J(theta) 最小,而这刚好就是最小二乘法做的工作。而回过头来我们发现,之所以最小二乘法有道理,是因为我们之前假设误差项服从高斯分布,假如我们假设它服从别的分布,那么最后的目标函数的形式也会相应变化。

好了,上边我们得到了有极大似然估计或者最小二乘法,我们的模型求解需要最小化目标函数J(theta),那么我们的theta到底怎么求解呢?有没有一个解析式可以表示theta?

2.1.3 theta的解析式的求解过程

我们需要最小化目标函数,关心 theta 取什么值的时候,目标函数取得最小值,而目标函数连续,那么 theta 一定为 目标函数的驻点,所以我们求导寻找驻点。

求导可得:

最终我们得到参数 theta 的解析式:

 关于向量、矩阵求导知识参见http://www.cnblogs.com/futurehau/p/6105236.html

上述最后一步有一些问题,假如 X'X不可逆呢?

我们知道 X'X 是一个办正定矩阵,所以若X'X不可逆或为了防止过拟合,我们增加lambda扰动,得到

从另一个角度来看,这相当与给我们的线性回归参数增加一个惩罚因子,这是必要的,我们数据是有干扰的,不正则的话有可能数据对于训练集拟合的特别好,但是对于新数据的预测误差很大。

2.1.4正则化

L2-norm: (Ridge回归)

L1-norm: (Lasso回归)

  J(theta) = J + lambda * sum(|theta|)

L1-norm 和 L2-norm都能防止过拟合,一般L2-norm的效果更好一些。L1-norm能够产生稀疏模型,能够帮助我们去除某些特征,因此可以用于特征选择。

L1-norm 和 L2-norm的直观理解:摘自http://lib.csdn.net/article/machinelearning/42049

 

  

今天又看到一个比较好的解释。可以把加入正则理解为加入约束条件,(类似于逆向拉格朗日)。那么,比如上边的图,L2约束就是一个圆,L1约束就是一个方形。那些关于w的圈圈都是等值线,代表了损失时多少,我们现在要求的就是在约束的条件下寻找最小的损失。所以其实就是找约束的图形和等值线的交点。

L1的缺点:如果有几个变量相关性比较大,那么它会随机的选择某一个。优化:Elastic Net

 2.2 梯度下降算法

我们在上边给出了最小二乘法求解线性回归的参数theta,实际python 的 numpy库就是使用的这种方法。

当然了,这需要我们的参数的维度不大,当维度大的时候,使用解析解就不适用了,这里讨论梯度下降算法。

2.2.1梯度下降法步骤:

  初始化theta

  沿着负梯度方向迭代,更新后的theta使得J(theta)更小。

  其中α表示学习率

  一个优化技巧:不同的特征采用不同的学习率 Adagrad

  

梯度下系那个示意图如下:

每次迭代找到一个更好的,最后得到一个局部最优解,不一定是全局最优,但是是堪用的。

2.2.2 具体实现

梯度方向:

2.2.2.1 批量梯度下降算法:

由于在线性回归中,目标函数收敛而且为凸函数,是有一个极值点,所以局部最小值就是全局最小值。

2.2.2.2随机梯度下降算法:

拿到一个样本就下降一次。实际中随机梯度下降算法其实是更适用的。出于一下亮点考虑:

1.由于噪声的存在,不能保证每个变量都让目标函数下降,但总的趋势是下降的。但是另一方面,由于噪声的存在,随机梯度下降算法往往有利于跳出局部最小值。

2.流式数据的处理

2.2.2.3 mini-batch

拿到若干个样本的平均梯度之后在更新梯度方向。

如上图所示,一个批量梯度下降,一个随机梯度下降,最终效果其实是相近的。

 2.2.2.4 上升一个高度把三种梯度下降算法联系起来

期望损失:理论上模型关于自变量因变量的平均意义下的损失,学习的目标就是选择期望损失最小的模型。

经验风险:模型关于训练样本集的平均损失。因为我们不可能得到所有的样本来计算期望损失,所以我们使用经验风险来代替期望损失。

那么怎么来处理选择这些样本呢?

BGD:我拥有的所有者n个样本的平均损失

SGD:单个样本处理

mini-batch:多个样本处理

 

三、实际线性回归时候的数据使用

此处分析不仅仅局限于线性回归。

实际中可以把数据分为训练数据和测试数据,然后根据不同模型在测试数据上的表现来选择模型。

另外一些情况,比如上边加上正则化之后,我们不能由训练数据得到lambda,那么我们需要把训练数据进一步划分为训练数据和验证数据。在训练数据上学习theta和lambda,然后在验证数据上选择lambda,然后再在测试数据上验证选择不同模型。

实际中采用交叉验证充分利用数据,例如五折交叉验证。

 

 四、几个系数定义说明

对于m个样本:    

某模型的估计值为: 

定义:

总平方和 TSS(Total Sum of Squares) :  即样本伪方差的m倍 Var(Y) = TSS / m

残差平方和 RSS(Residual Sum of Squares):   RSS也记作误差平方和SSE (Sum of Squares for Error)

可解释平方和ESS(Explained Sum of Squares) :  ESS又称为回归平方和SSR(Sum of Squares for Regression)

决定系数:

 

TSS >= RSS + ESS, 在无偏估计的时候取等号。

R^2越大,拟合效果越好。

 

需要额外说明的是,这里所谓的线性回归,主要是针对的参数theta,并不是针对x,我们可以对原来的数据进行处理,比如平方得到x^2的数据,然后把这个看作一个影响因素,这样最终得到的y关于x的图形就不是线性的,但当然这也是线性回归。

另外,还有局部加权的线性回归的概念,这部分内容在SVM中进一步解释。

 

五. Linear Regression for binary classfication

考虑到线性分类问题求解不方便,所以可不可以通过线性回归来求解线性分类问题呢? 

 

 

两者的差别主要在于损失函数。

平方损失是0/1损失的一个上限。

所以,使用Linear Regression来求解Linear Regression也是有道理的。

 

使用 sklearn 库来进行训练数据测试数据的划分学习 线性回归库的调用:

View Code

 

Advertising 完整版代码:

View Code

 

Advertising 正则化 交叉验证相关代码:

View Code

 

线性回归多项式拟合:

View Code

 

不使用库:

BGD 与 SGD:

View Code

 

Regression代码:

View Code

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值