机器学习_线性回归模型

1.线性回归

1.1模型

1.1.1目标函数(损失函数、正则)算法

    a.无正则:最小二乘线性回归(OLS)数组

    b.L2正则:岭回归(Ridge Regression)网络

    c.L1正则:Lasso框架

1.1.2几率解释机器学习

    最小二乘线性回归等价于极大似然估计ide

    Recall:极大似然估计函数

    线性回归的MLE性能

    正则回归等价于贝叶斯估计学习

小结:目标函数测试

1.2优化求解

1.2.1 OLS的优化求解(解析解)

1.2.2 OLS的优化求解(梯度降低)

    梯度降低

    OLS的梯度降低

1.2.3 OLS的优化求解(随机梯度降低,SGD)

1.2.4 岭回归的优化求解

1.2.5 Lasso的优化求解——坐标降低法

    坐标降低法

小结:线性回归之优化求解

1.3模型评估与模型选择

1.3.1 评价准则

1.3.2 Scikit learn中回归评价指标

1.3.3 线性回归中模型选择

1.3.4 RidgeCV

1.3.5 LassoCV

小结:线性回归之模型选择

 

1.1模型

机器学习是根据训练数据对变量之间的关系进行建模。当输出变量(响应变量)y∈R是连续值时,咱们称之为回归分析,即用函数描述一个或多个预测变量与响应变量y之间的关系,并根据该模型预测新的观测值对应的响应。

①给定训练数据D=\left \{ x_{i}|y_{i} \right \}_{i=1}^{N},其中y∈R是连续值,一共有N个样本,回归分析的目标是学习一个输入X到输出y的映射f

②对新的测试数据x,用学习到的映射f对其进行预测:\hat{y} = f(x)

③若假设映射f是一个线性函数,即y=f(x|w)=w^{T}x

称之为线性回归模型

1.1.1目标函数(损失函数、正则)

机器学习模型的目标函数包含两项:损失函数L和正则项R,分别表明度量模型与训练数据

  的匹配程度(损失函数越小越匹配)和对模型复杂度的“惩罚”以免过拟合。

J(\theta) = \sum_{i=1}^{N}L(f(x_{i};\theta ),y_{i})+R(\theta)

所以目标函数最小要求和训练数据拟合得好,同时模型尽量简单。体现了机器学习的基本准则:奥卡姆剃刀定律(Occam's Razor),即简单有效原则。

对回归问题,损失函数能够采用L2损失(能够根据实际状况选择其余有意义的损失函数),获得

L(f(x_{i};\theta ),y_{i})=(y_{i}-f(x_{i};\theta))^{2}

即残差的平方。对线性回归,全部样本的残差平方和为残差平方和(RSS):

RSS(w)=\sum_{i=1}^{N}(y_{i} - w^{T}x_{i})^{2}

    a.无正则:最小二乘线性回归(OLS)

因为线性模型比较简单,实际应用中有时正则项为空,获得最小二乘线性回归(OLS)(此时目标函数中只有残差平方和,“平方”的古时候的称为“二乘”),即

J(w)=\sum_{i=1}^{N}(y_{i} - w^{T}x_{i})^{2} = RSS(w)

    b.L2正则:岭回归(Ridge Regression)

正则项能够为L2正则,获得岭回归(Ridge Regression)模型:

J(w)=\sum_{i=1}^{N}(y_{i} - w^{T}x_{i})^{2} = RSS(w) + \lambda \left \| w \right \|_{2}^{2}

    c.L1正则:Lasso

正则项也能够选L1正则,获得Lasso模型:

J(w)=\sum_{i=1}^{N}(y_{i} - w^{T}x_{i})^{2} = RSS(w) + \lambda \left \| w \right \|_{1}

①当λ取合适值,Lasso(least absolute shrinkage and selection operator)的结果是稀疏的(w的某些元素系数为0,起到特征选择做用

 

1.1.2几率解释

     a.最小二乘线性回归等价于极大似然估计

①假设:y=f(x)+\varepsilon = w^{T}x+\varepsilon

②其中\varepsilon为线性预测和真值之间的残差

③咱们一般假设残差的分布为\varepsilon \sim N(0,\sigma ^{2}) , 均值为0,方差为\sigma ^{2}。对该残差分布的基础上,加上y的分布,所以线性回归能够写成:

p(y|x,\theta ) \sim N(y|w^{T}x,\sigma ^{2})

其中\theta = (w,\sigma ^{2})。均值移动变化,方差没有变。

注意:因为假设残差为0均值的正态分布,最小二乘线性回归的残差

    b.Recall:极大似然估计

极大似然估计(MLE)定义为(即给定参数\theta的状况下,数据D出现的几率为p,则MLE取使得p最大的参数\theta

\hat{\theta } = arg \underset{\theta}{max} log p(D|\theta )

其中(log)似然函数为

l(\theta ) = log p (D|\theta) = \sum_{i=1}^{N}log p(y_{i}|x_{i},\theta )

① 表示在参数为\theta的状况下,数据D = \left \{ x_{i},y_{i} \right \}_{i=1}^{N}出现的几率

② 极大似然:选择数据出现几率最大的参数

    c.线性回归的MLE

①OLS的似然函数为

l(\theta ) = logp(D,\theta ) = \sum_{i=1}^{N}logp(y_{i}|x_{i,\theta })

②极大似然可等价地写成极小负log似然损失(NLL)(在sklearn中,叫作logloss)

NLL(\theta) = \sum _{i=1}^{N}logp(y_{i}|x_{i},\theta ) = \sum _{i=1}^{N}log[(\frac{1}{2\pi \sigma ^{2}})^\frac{1}{2})exp(-\frac{1}{2 \sigma ^{2}}(y_{i} - w^{T}x_{i})^{2})] = \frac{N}{2}log(2\pi\sigma ^{2}) + \frac{1}{2\sigma ^{2}}\sum _{i=1}^{N}(y_{i}-w^{T}x_{i})^{2}

在上式中,观察第二项便可得知OLS的RSS项与MLE是等价的关系(相差常数倍不影响目标函数取极值的位置)

    d.正则回归等价于贝叶斯估计

①假设残差的分布为\epsilon \sim N(0,\sigma ^2),线性回归可写成:

p(y_i|x_i,\theta ) \sim N(y_i|w^Tx_i,\sigma ^2)

②若假设参数w中每一维的先验分布为w_j \sim N(0,\tau ^2),并假设w中每一维独立,则

p(w)= \prod _{j=1} ^{N} N(w_j|0,\tau ^2) \propto exp((-\frac{1}{2\tau ^2}\sum _{j=1}^{D}w_{j}^{2}) = exp(-\frac{1}{2\tau ^2}[w^Tw])

w_j分布的均值为0,即咱们偏向于较小的系数值,从而获得的曲线也比较平滑;

其中,1/\tau ^2控制先验的强度

③根据贝叶斯公式,参数的最大后验估计(MAP)为

arg\underset{w}{max}(\sum _{i=1}^{N}logN(y_i|w^Tx_i,\sigma ^2) + \sum _{i=1}^{D}logN(w_j|0, \tau ^2))

等价于最小目标函数

J(w) = \sum _{i=1} ^{N}(y_i - w^Tx_i)^2 + \frac{\sigma ^2}{\tau ^2} \sum _{i=1} ^{D}w_j ^2

④对比岭回归的目标函数(L2正则)

J(w) = \sum _{i=1} ^{N}(y_i - w^Tx_i)^2 +\lambda \left \| w \right \|^2 _2

\lambda = \frac{\sigma ^2}{\tau ^2}

⑤L1正则等价于w_j先验为Laplace分布,即

p(w) = \prod ^2 _{j=1}Laplace(w_j|0,1/\lambda ) \propto exp(-\lambda\sum^2_{j=1} |w_j| )

小结:目标函数

①线性回归模型也能够放到机器学习通常框架:损失函数+正则

损失函数:L2损失

正则:无正则、L2正则、L1正则、L2+L1正则

②正则回归模型可视为先验为正则、似然为高斯分布的贝叶斯估计

L2正则:先验分布为高斯分布

L1正则:先验分布为Laplace分布

1.2优化求解

线性回归的目标函数

①无正则的最小二乘线性回归(OLS)

J(w)=\sum_{i=1}^{N}(y_{i} - w^{T}x_{i})^{2}

② L2正则的岭回归(Rideg Regression)模型:

J(w)=\sum_{i=1}^{N}(y_{i} - w^{T}x_{i})^{2} + \lambda \left \| w \right \|_2^2

③L1正则的Lasso模型

J(w)=\sum_{i=1}^{N}(y_{i} - w^{T}x_{i})^{2} + \lambda \left \| w \right \|_1^1

模型训练

模型训练是根据训练数据求解最优模型参数,即求目标函数取极小值的参数

\hat{w} = arg \underset{w}{min}J(w)

根据模型的特色和问题复杂程度(数据、模型),可选择不一样的优化算法

        一阶的导数为0:\frac{\partial J(w)}{\partial w} = 0

        二阶导数>0:\frac{\partial J^2(w)}{\partial w^2} >0

1.2.1 OLS的优化求解(解析解)

将OLS的目标函数写成矩阵形式(省略因子1/N,不影响目标函数取极小值的位置)

J(w) = \sum _{i=1} ^N (y_i - w^Tx_i)^2 = (y - Xw)^T(y-Xw) =(y^Ty-2w^T(X^Ty)+w^T(X^TX)w)

只取与w有关的项,获得

J(w) = w^T(X^TX)w-2w^T(X^Ty)

求导:

\frac{\partial }{\partial w} = 2X^TXw - 2X^Ty= 2X^T(Xw - y) = 0 ->X^TXw = X^Ty

recall:向量求导公式:(w为y,A为X^{T}X,X^{T}X为对称矩阵,A^{T} = A):

\frac{\partial }{\partial y} (y^TAy) = (A+A^T)y

\frac{\partial }{\partial a} (b^Ta) = b

因此,获得

\hat{W}_{OLS} = (X^TX)^{-1}X^Ty

实际应用中一般经过对输入X进行奇异值分解(SVD),求解更有效

对X进行奇异值分解:

X= U\Sigma V^T

X^T= V\Sigma U^T

X^TX= V\Sigma U^T U\Sigma V^T = \Sigma^2

因此

\hat{W}_{OLS} = (X^TX)^{-1}X^Ty = (\Sigma^2)^{-1} V\Sigma U^Ty = V \Sigma^{-1} U^Ty

1.2.2 OLS的优化求解(梯度降低)

    a.梯度降低

在求解机器学习算法的模型参数(无约束优化问题)时,梯度降低是最经常使用的方法之一。梯度降低法是一个一阶最优化算法,一般也称为最速降低法。

一元函数f(x)在x处的梯度为函数f在点x处的导数。对多元函数f(x_1,x_2,...,x_D)在点x=(x_1,x_2,...,x_D)处,共有D个偏导数,分别是f在该点关于x_1的偏导数,...,以及关于x_D的偏导数,将这D个偏导数组合成一个D维矢量,称为函数f在x处的梯度。梯度通常记为\bigtriangledown或grad,即\bigtriangledown f(x_1,x_2,...,x_D)=g(x_1,x_2,...,x_D) = [\partial f/\partial x_1,...\partial f/\partial x_D]^T

函数f在某点梯度指向在该点函数值增加最快的方向。所以要使用梯度降低法找到一个函数的局部极小值,必须向函数上当前点对应梯度的反方向(负梯度方向)进行迭代搜索。梯度降低法的每一步一般会这么写

\theta = \theta - \eta \bigtriangledown _\theta

其中\eta为学习率(步长)

梯度降低的基本步骤:

1)肯定学习率,并初始化参数\theta ^0

2)计算目标函数J(\theta )在当前参数值\theta ^t的梯度:\bigtriangledown _\theta = \frac{\partial J(\theta ^ t)}{\partial \theta }

3)梯度降低更新参数:\theta ^{t+1} = \theta ^t- \eta \bigtriangledown _\theta

4)重复以上步骤,直到收敛(目标函数的降低量小于某个阈值),获得目标函数的局部极小值J(\theta ^{t+1})以及最佳参数值\theta ^{t+1}

    b.OLS的梯度降低

OLS的目标函数为:

J(w) = \sum _{i=1} ^N (y_i - w^Tx_i)^2

梯度为:

\bigtriangledown _w = g(w) = 2X^T(Xw - y)

参数更新公式为:

w^{t+1} = w^t -\eta \bigtriangledown _w = w^t -2\eta X^T(Xw-y)= w^t +2\eta\sum_{i=1}^{N} (y_i - f(x_i))x_i

或者卸除标量形式为:

w_j ^{t+1}= w^t_j +2\eta\sum_{i=1}^{N} (y_i - f(x_i))x_i_j

1.2.3 OLS的优化求解(随机梯度降低,SGD)

① 在上述梯度降低算法中,梯度

g(w) = \sum_{i=1}^N 2(f(x_i)-y_i)x_i

利用全部的样本,所以被称为“批处理梯度降低”

② 随机梯度降低:每次只用一个样本(x_t,y_t)

g(w) = 2(f(x_t)-y_t)x_t

优势:

一般收敛会更快,且不太容易陷入局部极值

亦被称为在线学习

对大样本数据集尤为有效

③ SGD的变形

能够用于离线学习:每次看一个样本,对全部样本可重复屡次循环使用(一次循环称为一个epoch)

每次能够不止看一个样本,而是看一些样本

1.2.4 岭回归的优化求解

岭回归的目标函数与OLS只相差一个正则项(w的二次函数),因此相似可得:

J(w)=\sum_{i=1}^{N}(y_{i} - w^{T}x_{i})^{2} + \lambda \left \| w \right \|_2^2 = (y-Xw)^T(y-Xw)+\lambda w^Tw

求导,获得

\frac{\partial }{\partial w}J(w) = 2X^TXw - 2X^Ty+2\lambda w^T = 0

\hat{W}_{Ridge} = (X^TX+\lambda I_D)^{-1}X^Ty

计算时也能够采用对X进行SVD获得:

X=UDV^T

X^TX=VDU^TUDV^T=VD^2V^T

\hat{W}_{Ridge} = V(D^2+\lambda I)^{-1}DU^Ty

注:岭回归的优化实现代码很容易从OLS的优化推导

1.2.5 Lasso的优化求解——坐标降低法

 ①坐标降低法

坐标降低法,是沿着坐标轴的方向去降低。为了找到一个函数的局部极小值,坐标轴降低法在每次迭代中能够在当前点处沿一个坐标方向进行一维搜索。在整个过程当中循环使用不一样的坐标方向。一个周期的一维搜索迭代过程至关于一个梯度迭代。而梯度降低是根据目标函数的导数(梯度)来肯定搜索方向,沿着梯度的负方向降低。该梯度方向可能不与任何坐标轴平行。不过梯度降低和坐标轴降低的共性都是迭代法,经过启发式的方式一步步迭代求解函数的最小值,坐标降低法在稀疏矩阵上的计算速度很是快,同时也是Lasso回归最快的解法。

坐标轴降低法的数学依据主要是以下结论:一个可微的凸函数J(\theta ),其中\theta是D维向量,即有D个维度。若是在某一点\bar{\theta },使得J(\theta )在每个坐标轴\bar{\theta }_j (j=1,...,D),上都是最小值,那么J(\bar{\theta })就是一个全局的最小值。因而咱们的优化目标就是在\theta的D个坐标轴上(或者说向量的方向上)对损失函数做迭代的降低,当全部的坐标轴上的\bar{\theta }_j (j=1,...,D)都达到收敛时,咱们的损失函数最小,此时的\theta即为咱们要求的结果

算法过程以下:

1)初始化\theta为一随机初值。记为\theta ^{0},上标括号中的数字表示迭代次数;

2)对第t轮迭代,咱们依次计算\theta _j^t(j=1,...,D):

\theta _j^t \underset{\theta _j}{\epsilon \underbrace{argmin}}(\theta_1 ^t,\theta_2 ^t,...,\theta_{i-1} ^t,\theta_i,\theta_{i+1} ^{t-1},..,\theta_{D} ^{t-1})

也就是说\theta _j^t是使J(\theta_1 ^t,\theta_2 ^t,...,\theta_{i-1} ^t,\theta_i,\theta_{i+1} ^{t-1},..,\theta_{D} ^{t-1})最小化的\theta _j的值。此时J(\theta )中只有\theta _j^t是变量,其他均为常量,所以最小值容易经过求导求得。

3)检查向量\theta^t\theta^{t-1}向量在各个维度上的变化状况,若是在全部维度上变化都足够小,那么\theta^t即为最终结果,不然转入第2步,继续第t+1轮的迭代。

② Lasso的优化求解推荐采用坐标降低法

J(w,\lambda )=RSS(w) + \lambda \left \| w \right \|_1^1

但项\left \| w \right \|_1^1w_j = 0处不可微(不平滑优化问题)

为了处理不平滑函数,扩展导数的表示,定义一个(凸)函数f在点x_0的次梯度或者次导数为一个标量g,使得

f(x)-f(x_0)\geq g(x-x_0),\forall x\epsilon I

其中I为包含x_0的某个区间

定义区间[a,b]的子梯度集合为

a = \lim_{x->x^-_0}\frac{f(x)-f(x_0)}{x-x_0},b =\lim_{x->x^+_0}\frac{f(x)-f(x_0)}{x-x_0}

全部次梯度的区间被称为函数f在x_0的次微分,用\partial f(x)|_{x^0}表示

 

Lasso问题

目标函数为:

J(w)=RSS(w)+\lambda \left \| w \right \| _1=\sum_{i=1}^{N}(y_{i} - w^{T}x_{i})^{2} + \lambda \left \| w \right \|_1^1

可微项RSS(w)的梯度:

\frac{\partial}{ \partial w_j}RSS(w) = \frac{\partial}{ \partial w_j}\sum_{i=1}^{N}(y_i- w^Tx_i)^2

= \frac{\partial}{ \partial w_j}\sum_{i=1}^{N}(y_i- (w^T_{-j}x_i_{,-j}+w_{j}x_i_{,j}))^2

=-2\sum_{i=1}^{N}(y_i- w^T_{-j}x_i_{,-j}-w_{j}x_i_{,j})x_i_{,j}

=2\sum_{i=1}^{N}x^2_{i,j}w_j - 2\sum_{i=1}^{N}(y_i -w^T_{-j}x_{i,-j})x_{i,j}

= a_jw_j -c_j

其中w_{-j}表示向量w中除了第j维的其余D-1个元素,x_{i,-j}表示向量x_i中除了第j维的其余D-1个元素,x_{i,j}表示向量中第j维元素,

a_j =2\sum_{i=1}^{N}x^2_{i,j}w_j

c_j = 2\sum_{i=1}^{N}(y_i -w^T_{-j}x_{i,-j})x_{i,j}

公式中w^T_{-j}x_{i,-j}为D维特征中去掉第j维特征的其他D-1未特征对应的预测,则(y_i -w^T_{-j}x_{i,-j})对应的预测残差,c_j为第j维特征与该预测残差的相关性

上面是坐标轴降低算法中对第j维坐标参数w_j进行分析

将上述结论代入,获得目标函数的子梯度

\partial _{w_j}J(w,\lambda ) = (a_j,w_j-c_j)+\lambda \partial _{w_j}\left \| w\right \|_1 =\left\{\begin{matrix} {a_jw_j-c_j-\lambda } & & if w_j < 0 & & \\ [c_j - \lambda ,c_j+\lambda ] & & if w_j = 0 & & \\ {({a_jw_j-c_j} +\lambda)} & & if w_j >0 \end{matrix}\right.

当0属于目标函数的子梯度时,目标函数取极小值,即

\hat{w}_j (c_j)=\left\{\begin{matrix} {(c_j+\lambda )/a_j} & if c_j<-\lambda & \\ 0 &if c_j\epsilon [-\lambda,\lambda] & \\ {(c_j-\lambda )/a_j} & if c_j>\lambda \end{matrix}\right.

上式可简写为:

\hat{w}_j=soft(\frac{c_j}{a_j};\frac{\lambda }{a_j})

其中

soft(a;\delta )\overset{\bigtriangleup}{=}sgn(a)(|a|-\delta)

称为软阈值。其中x_{+}=max(x,0)为x的正的部分,sgn为符号函数。软阈值以下图所示,图中黑色虚线为最小二乘结果\hat{w}_j(c_j),根据状况将最下二乘结果往下平移\lambda(c_j>\lambda )、将最小二乘结果往上平移\lambda(c_j<-\lambda )、或者置为0(-\lambda<c_j<\lambda )

所以w的坐标降低优化过程为:

1)预计算

a_j=2\sum_{i=1}^{N}x_j^2

2)初始化参数w(全0或随机)

3)循环直到收敛:

        for j=1,...,D

                计算

                        c_j = 2x_j\sum_{i=1}^{N}(y_i-w_{-j}^Tx_{i,-j})

                选择变化幅度最大的维度或者轮流更新w_j:

\hat{w}_j (c_j)=\left\{\begin{matrix} {(c_j+\lambda )/a_j} & if c_j<-\lambda & \\ 0 &if c_j\epsilon [-\lambda,\lambda] & \\ {(c_j-\lambda )/a_j} & if c_j>\lambda \end{matrix}\right.

小结:线性回归之优化求解

①线性回归模型比较简单

②当数据规模较小时,可采用随机梯度降低

scikit learn 中实现采用SVD分解实现

③当数据规模较大时,可采用随机梯度降低

scikit learn 提供一个SGDRegression类

④岭回归求解相似OLS,采用SVD分解实现

⑤Lasso优化求解采用坐标轴降低法

1.3模型评估与模型选择

模型训练好,须要在校验集上采用一些度量准则检查模型预测的效果,并根据模型评估结果进行模型选择(选择最佳模型超参数)

①线性回归的目标函数

无正则的最小二乘线性回归(OLS)

J(w) = \sum _{i=1} ^N (y_i - w^Tx_i)^2

L2正则的岭回归(Ridge Regression)模型:

J(w)=\sum_{i=1}^{N}(y_{i} - w^{T}x_{i})^{2} + \lambda \left \| w \right \|_2^2

L1正则的Lasso模型

J(w)=\sum_{i=1}^{N}(y_{i} - w^{T}x_{i})^{2} + \lambda \left \| w \right \|_1^1

对于最小二乘线性回归,模型没有须要调整的超参数。岭回归模型和Lasso模型的超参数为正则系数\lambda

②校验集

一般给定一个任务只给了训练集,没哟专门的校验集。所以咱们须要从训练集中分离一部分样本做为校验。

当训练样本较多时,能够直接从训练集中分离一部分样本做为校验。在scikit-learn中,调用train_test_split获得新的训练集和校验集。

当训练样本没那么多时,能够采用交叉验证方式,每一个样本轮流做为训练样本和校验样本。

对岭回归和Lasso,scikit-learn提供了高效的广义留一交叉验证(LOOCV),即每次留出一个样本作校验,至关于N折交叉验证,类名称分别为RidgeCV和LassoCV,对于通常模型,Scikit learn将交叉验证与网络搜索合并为一个函数:

sklearn.model_selection.GridSearchCV

1.3.1 评价准则

对于回归模型,模型训练好,可用一些度量准则检查模型拟合的效果:

①平方均方偏差(RMSE):

RMSE=\sqrt{\frac{1}{N}\sum_{i=1}^{N}(\hat{y}_i-y_i)^2}

②平均绝对偏差(MAE):

MAE={\frac{1}{N}\sum_{i=1}^{N}|(\hat{y}_i-y_i)|}

③ R2  score:即考虑了预测值与真值之间的差别,也考虑了问题自己真值之间的差别(scikit learn 线性回归模型的缺省评价准则)

SS_{res}=\sum_{i=1}^{N}(\hat{y}_i-y_i)^2,SS_{tot}=\sum_{i=1}^{N}({y}_i-\bar{y})^2,R^2 = 1-\frac{SS_{res}}{SS_{tot}}

④也能够检查残差的分布:回归建模时咱们假设残差的分布为0均值的正态分布N(0,\sigma ^2)

1.3.2 Scikit learn中回归评价指标

1.3.3 线性回归中模型选择

sklearn.model_selection

Scikit learn中model selection 模块提供模型选择功能

对于线性模型,留一交叉验证(N折交叉验证(LOOCV))有着更简便的计算方式,所以Scikit learn提供了RidgeCV类和LassoCV类

1.3.4 RidgeCV

RidgeCV中超参数\lambda用alpha表示

1.3.5 LassoCV

LassoCV的使用与RidgeCV相似

Scikit learn还提供一个与Lasso相似的LARS(最小角回归),二者仅仅是优化方法不经过,目标函数相同

当数据集中特征维数不少且存在共线性时,LassoCV更适合

小结:线性回归之模型选择

采用交叉验证评估模型预测性能,从而选择最佳模型

回归性能的评价指标

线性模型的交叉验证一般直接采用广义线性模型的留一交叉验证进行快速模型评估

Scikit learn中对RidgeCV和LassoCV实现该功能