机器学习笔记(3)线性回归模型

在上一篇中,我们介绍了机器学习任务的一般步骤。现在我们对具体任务进行讲解

一、模型

给定训练数据集D={xi,yi}i=1N ,其中yR。回归学习一个从输入x到输出y的映射f。当增加新的数据集时, 用学习到的映射f对其进行预测y^=f(x)。若是学习到的这个映射f是一个线性函数:

                y^=f(x|w)=wTx

则我们称之为线性回归模型。

1.目标函数

前面我们已经提过,目标函数通常包括两项:损失函数和正则项
机器学习笔记(3)线性回归模型
其中,我们的L2损失就使用到残差平方和(residual sum of squares,RSS):

           RSS=i=1N(yiyi^)=i=1N(yiwTxi)2
           
(1)、最小二乘线性回归(Ordinary Least Square,OLS): 
    由于线性模型比较简单,所以当R(θ)=0时,目标函数为
    
           J(w)=i=1NL(yi,yi^)=i=1N(yiyi^)=i=1N(yiwTxi)2 

(2)、岭回归(Ridge Regression):
    当正则项为L2时,即R(θ)=λ||w||2,目标函数为
    
           J(w)=i=1N(yiwTxi)2+λ||w||2  
           
(3)、Lasso模型:
    当正则项为L1时,即R(θ)=λ|w|,目标函数为
    
           J(w)=i=1N(yiwTxi)2+λ|w|
           

2.概率解释

(1)、最小二乘(线性)回归等价于极大似然估计
假设y=f(x)+ε=wTx+ε,其中ε为线性预测值与真值之间的残差,我们通常假设这个残差服从高斯分布,εN(0,σ2).因此线性回归可以写成:

              p(y|x,θ)N(y|wTx,σ2),其中θ=(w,σ2)
              
我们复习下极大似然估计(Maximize Likelihood Estimator,MLE)的定义: 

              θ^=argmaxθlogp(D|θ)
其中(log)似然函数为:

              l(θ)=logp(D|θ)=i=1Nlogp(yi|xi,θ)   
              
表示在参数为θ的情况下,数据D={xi,yi}i=1N出现的概率。极大似然就是选择数据出现概率最大的参数。
线性回归法MLE: 

         p(yi|xi,w,σ2)=N(yi|wTxi,σ2)=12πσexp(12σ2((yiwTxi)2)) 
         
因为OLS的似然函数为: 

              l(θ)=logp(D|θ)=i=1Nlogp(yi|xi,θ)   
              
又因为极大似然可等价地写成极小负log似然损失(negative log likelihood,NLL): 

              NLL(θ)=i=1Nlogp(yi|xi,θ)
                 =i=1Nlog[12πσexp(12σ2((yiwTxi)2))]
                 =N2log(2πσ2)+12σ2i=1N(yiwTxi)2  
                 
最大化似然公式L(θ)相当于最小化NLL(θ)i=1N(yiwTxi)2 等价于最小二乘回归J(w)

(2)、正则回归等价于贝叶斯分布
假设残差分布εN(0,σ2),线性回归可以写成 

              p(y|x,θ)N(y|wTx,σ2)
              p(yi|xi,w,σ2)=N(yi|wTxi,σ2IN)exp(12σ2[(yXw)T(yXw)]) 
              
a、假设w的先验分布为高斯分布 wN(0,τ2) 

所以            p(w)=j=1DN(wj|0,τ2)exp(12τ2j=1Dwj2)=exp(12τ2[wTw])

其中1/τ2控制先验的强度
根据贝叶斯公式公式,得到参数的后验分布为 

              p(w|X,y,σ2)p(yi|xi,w,σ2)p(w)
                     =exp(12σ2[(yXw)T(yXw)]12τ2[wTw]) 
                     
为方便计算,取对数logp(w|X,y,σ2) 得到最大后验估计(MAP)等价于最小目标函数 

              J(w)=(yXw)T(yXw)+σ2τ2wTw 
              
对比下岭回归的目标函数  

              J(w)=i=1N(yiwTxi)2+λ||w||2 
b、假设w的先验分布为Laplace分布 wN(0,b) 

所以            p(w)=j=1DN(wj|μ,b)=12bexp(|wμ|b)

                 =j=1DN(wj|0,b)exp(|w|b)
                 
根据贝叶斯公式公式,得到参数的后验分布为 

             p(w|X,y,σ2)p(yi|xi,w,σ2)p(w)
                     =exp(12σ2[(yXw)T(yXw)]1b|w|)
                    
为方便计算,取对数logp(w|X,y,σ2) 得到最大后验估计(MAP)等价于最小目标函数 

               J(w)=(yXw)T(yXw)+2σ2b|w| 
              
对比下Lasso回归的目标函数  

             J(w)=i=1N(yiwTxi)2+λ|w|

二、优化求解

优化求解的目的是根据训练数据求目标函数取极小值的参数

                 w^=argminwJ(w)
目标函数求极小值的方法:

  一阶导数为0 :J(w)w=0
  二阶导数>0:2J(w)w2>0
  

1.OLS的优化求解

            J(w)=i=1N(yiwTxi)2=(ywX)T(ywX)
            
  我们的目标是求解w,所以只取关于w的部分,得到 
  
           J(w)=wT(XTX)w2wT(Xy)
  通过求导可得:
           J(w)w=2XTX2XTy=0
       
           XTXw=XTy
       
           所以:w^OLS=(XTX)1XTy
           
  这个式子可以通过奇异值分解(singular value decomposition,SVD)求解。
  下面是SVD的表达:
     对X进行奇异值分解:X=UΣVT
     其中:UTU=IN 为列正交
     VVT=VTV=TD为行列均正交
     所以XT=VΣUT
     
  所以w^OLS=(XTX)1XTy
       (Σ2)1VΣUTy
       VΣ1UTy
       
  OLS除了使用SVD求解外,还可以使用梯度下降法求解,在上一章中,我们看到梯度下降法的基本步骤:

    a.先确定学习率η,再给定初始值 θ0
    b.计算目标函数在当前参数值的梯度:θ=J(θt)θ
    c.更新θ,使得J(θ)越来越小:
       θt+1=θtηθ
      
  对于我们的OLS函数:J(w)=i=1N(yiwTxi)2
  则梯度为:
            g(w)=J(w)w=i=1N2(f(xi)yi)xi
  所以:
            wt+1=wtηw
               =wt2ηi=1N(f(xi)yi)xi
  如此这样一直迭代下去。

2.岭回归的优化求解

  岭回归的目标函数与最小二乘(OLS)只是相差一个正则项(λ||w||2)。所以类似的求解可得:
  
            J(w)w=2XTX2XTy2λwT=0
            
            w^rigde=(XTX+λID)1XTy 
            

3.lasso的优化求解

  lasso的目标函数是:J(w,λ)=RSS(w)+λ||w||1,但是该目标函数的正则项在wj=0不可导,所以这里我们不能用梯度SVD求解,也不能用梯度下降法求解。
  所以我们引入坐标轴下降法。
  a、在使用坐标下降法之前,我们想了解下次微分的概念:
  为了处理不平滑的函数,扩展导数的表示,定义一个(凸)函数fx0处的次梯度为一个标量c,使得:
  
              f(x)f(x0)c(xx0)
  如下图:
机器学习笔记(3)线性回归模型
  定义区间[a,b]的子梯度集合为:
  
              a=limxx0f(x)f(x0)xx0,b=limxx0+f(x)f(x0)xx0 
              
  所有次梯度的区间称为函数fx0处的次微分(subdefferential),用f(x)|x0表示
  例如:绝对值函数f(x)=|x|,其梯度为
              f(x)={{1} if x<0[1,+1] if x=0{+1} if x>0 
  b、对lasso求导
    目标函数:J(w,λ)=RSS(w)=i=1N(yiwiTxi)2+λ||w||1
    对wj求导:
              wjRSS(w)=wji=1N(yi(wjTxi,j+wjxij))2
                    =2i=1N(yiwjTxi,jwjxij)xij
                    =2i=1Nwjxij22i1Nxij(yiwjTxi,j)
                     
  令:aj=2i=1Nwjxij2cj=2i1Nxij(yiwjTxi,j),其中(yiwjTxi,j)是利用Dj维特征得到的预测的残差,则cj为第j维特征与残差的相关性之和
  
  故wjRSS(w)=ajwjcj
  
  那么wjJ(w,λ)=(ajwjcj)+λwj||w||1={{ajwjcjλ} if wj<0{cλ,cj+λ} if wj=0{ajwjcj+λ} if wj>0
  
  当wjJ(w,λ)=0时最优解 
  
  所以 w^j(cj)={(cj+λ)/aj if cj<λ0 if cj[λ,λ](cjλ)/aj if cj>λ
  
  根据cj的不同,wjJ(w,λ)=0有以三种情况:
  机器学习笔记(3)线性回归模型
  c、坐标轴下降法
  
     1)、预计算aj=2i=1Nxj2
     2)、初始化参数w(全0或者随机)
     3)、循环直到收敛:
        –for j = 0,1,2…D
           ·计算cj=2i1Nxij(yiwjTxi,j)
           ·更新wj:w^j(cj)={(cj+λ)/aj if cj<λ0 if cj[λ,λ](cjλ)/aj if cj>λ
        –选择变化幅度最大的维度进行更新
   
  坐标轴下降法的特点:
    · 为了找到一个函数的局部极小值,在每次迭代中可以在当前点处沿一个坐标方向进行一维搜索
    ·整个过程中循环使用不同的坐标方向。一个周期的一维搜索迭代过程相当于一个梯度迭代
    
  坐标轴下降法需要注意是:
    · 梯度下降方法是利用目标函数的导数(梯度)来确定搜索方向的,而该梯度方向可能不与任何坐标轴平行。
    ·而坐标轴下降法是利用当前坐标系统进行搜索,不需要求目标函数的导数,只按照某一坐标方向进行搜索最小值。(在稀疏矩阵上的计算速度非常快,同时也是Lasso回归最快的解法)
    

三、模型评估与模型选择

  当模型训练好后,需要在校验集上采用一些度量准则检查模型预测的效果,可通过两个步骤去实现:
   1)校验集的划分(train_test_split、交叉验证)
   2)评价指标(sklearn.metrics)

  在选择预测性能最好的模型过程中,我们还需要对模型中的一些超参数进行设置,如线性回归模型中的正则参数λ,以及例如OLS中的特征的数目等参数去选择模型。但是我们去确定参数时,是通过给定一定范围的数值作为输入的,该参数的搜索范围我们一般在Scikitlearn中使用的是网格搜索(GridSearch),且在Scikitlearn中,已经将交叉验证与网格搜索合并为一个函数:sklearn.model_selection.GridSearchCV。
  在Scikitlearn中的modelselection模块提供的模型选择功能中,对于线性模型,留一交叉验证(N折交叉验证,亦称为leave-oneout cross-validation,LOOCV)有更简便的计算方式,因此Scikitlearn还提供了RidgeCV类和LassoCV类实现了这种方式。
  
  RidgeCV中超参数λ用alpha表示,RidgeCV(alphas=(0.1,1.0,10.0),
  fit_intercept=True,normalize=False,scoring=None,cv=None,gcv_mode=None,store_cv_values=False)
  
  LassoCV的使用与RidgeCV类似,Scikitlearn还提供一个与Lasso类似的LARS(least angle regression,最小角回归),二者仅仅是优化方法不同,目标函数相同。有一点需要注意的是当数据集中特征维数很多且存在共线性时,LassoCV更合适。
  
  模型的评价指标,在上一章中,我们已经确定了有如下几种准则:
   (1)、开平均方误差(rooted mean squared error , RMSE):RMSE=1Ni=1N(yi^yi)2
   (2)、平均绝对误差(mean absolute error, MAE):MAE=1Ni=1N|yi^yi|
   (3)、R2 score:即考虑预测值和真值之间的差异,也考虑了问题本身真值之间的差异(scikit learn线性回归的缺省评价准则)
        SSres=i=1N(yi^yi)2
        SStot=i=1N(yiy¯)2
        R2=1SSresSStot
  所以,R2越大,模型越好。
  
  我们的模型评估和选择,是在Scikitlearn上面做的,这个工具包封装了比较好的API,非常方便我们使用,下面是几种比较常见的API,有兴趣的话,可以去官方文档看下。
机器学习笔记(3)线性回归模型

在模型的评价中,除了上述的指标外,我们也可以通过可视化将更为直观的将结果显示出来,比如
  1)检查残差的分布
  2)打印出预测值与真值的散点图
  
 比如波士顿房价中预测残差的分布图:
机器学习笔记(3)线性回归模型
前面我们已经说过,极大似然估计假设残差的分布正是为0均值的正态分布。上图中,残差也近似0均值的正太分布,说明拟合的还可以。
在看下预测值与真值的散点图:
机器学习笔记(3)线性回归模型
当散点图如上所示,说明预测值和真值之间相关性很强,也说明模型效果愈佳。