假设数据集中有m个样本,针对研究的问题每个样本具有n个特征。那么:
x ( i ) = ( x 1 ( i ) , x 2 ( i ) , . . . , x n ( i ) ) ′ \textbf{x}^{(i)}=(x_1^{(i)},x_2^{(i)},...,x_n^{(i)})' x(i)=(x1(i),x2(i),...,xn(i))′表示第i个样本的特征向量,其中 x k ( i ) x_k^{(i)} xk(i)表示第i个样本的第k个特征;
y ( i ) y^{(i)} y(i)表示第i个样本的标签或对应特征 x ( i ) \textbf{x}^{(i)} x(i)的实际结果;
( x ( i ) , y ( i ) ) (\textbf{x}^{(i)},y^{(i)}) (x(i),y(i))表示第i个样本。
如果具有m个样本,那么可以合并写成
X m × n = [ x 0 ( 1 ) x 1 ( 1 ) ⋯ x n ( 1 ) ⋯ ⋯ ⋯ ⋯ x 0 ( m ) x 1 ( m ) ⋯ x n ( m ) ] , 其 中 x 0 ( i ) = 1 。 \textbf{X}_{m×n}=\begin{bmatrix} x_0^{(1)}&x_1^{(1)}&\cdots&x_n^{(1)} \\ \cdots&\cdots&\cdots&\cdots \\ x_0^{(m)}&x_1^{(m)}&\cdots&x_n^{(m)} \\ \end{bmatrix} ,其中x_0^{(i)}=1。 Xm×n=⎣⎢⎡x0(1)⋯x0(m)x1(1)⋯x1(m)⋯⋯⋯xn(1)⋯xn(m)⎦⎥⎤,其中x0(i)=1。
Y = [ y ( 1 ) y ( 2 ) ⋯ y ( m ) ] \textbf{Y}=\begin{bmatrix} y^{(1)} \\ y^{(2)} \\ \cdots \\ y^{(m)} \\ \end{bmatrix} Y=⎣⎢⎢⎡y(1)y(2)⋯y(m)⎦⎥⎥⎤
假设当前机器学习系统可以对特征为 ( x 1 , x 2 , . . . , x n ) ′ (x_1,x_2,...,x_n)' (x1,x2,...,xn)′的数据进行预测,预测结果为 y ^ \hat{y} y^。则多特征的线性回归的数学表达式即为:
y ^ = θ 0 + θ 1 x 1 + ⋯ + θ n x n = θ T x ( i ) \hat{y}=θ_0+θ_1x_1+⋯+θ_n x_n=\textbf{θ}^T\textbf{x}^{(i)} y^=θ0+θ1x1+⋯+θnxn=θTx(i)
其中 θ = ( θ 0 , θ 1 , … , θ n ) ′ θ=(θ_0,θ_1,…,θ_n)' θ=(θ0,θ1,…,θn)′是参数向量;
x ( i ) \textbf{x}^{(i)} x(i)是某个样本的特征向量;
由于考虑到参数 θ 0 θ_0 θ0,所以通常会增加一个全1特征 x 0 x_0 x0=1,简化多特征的线性回归方程。即此时的特征转化为
x ( i ) = ( x 0 ( i ) , x 1 ( i ) , x 2 ( i ) , … , x n ( i ) ) , 其 中 x 0 ( i ) = 1 。 x^{(i)}=(x_0^{(i)},x_1^{(i)},x_2^{(i)},…,x_n^{(i)}), 其中x_0^{(i)}=1。 x(i)=(x0(i),x1(i),x2(i),…,xn(i)),其中x0(i)=1。
首先需要有一个评价当前机器学习系统预测效果的标准,此处称为损失函数J(θ),其作用是衡量系统预测值和真实值的差距大小。最直观的做法是将所有样本数据的预测值和真实值的差值平方后求均值:
J ( θ ) = 1 2 m ∑ i = 1 m ( y ^ − y ( i ) ) 2 = 1 2 m ∑ i = 1 m ( θ T x ( i ) − y ( i ) ) 2 J(\textbf{θ})=\frac{1}{2m}\sum_{i=1}^m (\hat{y}-y^{(i)})^2 =\frac{1}{2m}\sum_{i=1}^m(\textbf{θ}^T \textbf{x}^{(i)}-y^{(i)})^2 J(θ)=2m1i=1∑m(y^−y(i))2=2m1i=1∑m(θTx(i)−y(i))2
(注:公式中的1/2 是为了后续求导方便,详情见后续推导部分)
损失函数J(θ)数值越大,说明预测效果越差。所以很明显我们需要寻找使J(θ)达到最小值的参数向量θ。即:
θ = arg min θ J ( θ ) θ= \arg\min \limits_{\theta}J(\textbf{θ}) θ=argθminJ(θ)
沿着 J ( θ ) J(\textbf{θ}) J(θ)梯度下降的方向不断迭代,即可达到局部最小值:
梯 度 下 降 法 迭 代 公 式 : θ : = θ − α ∂ J ( θ ) ∂ θ 梯度下降法迭代公式:\textbf{θ}:=\textbf{θ}-α\frac{∂J(\textbf{θ})}{∂\textbf{θ}} 梯度下降法迭代公式:θ:=θ−α∂θ∂J(θ)
其中α是学习率(learning rate),也叫步长,可以控制收敛速度,但是过大的话容易发散。
在程序中该如何计算导数 ∂ J ( θ ) ∂ θ \frac{∂J(\textbf{θ})}{∂\textbf{θ}} ∂θ∂J(θ)呢?
∂ J ( θ ) ∂ θ j = ∂ ∂ θ j [ 1 2 m ∑ i = 1 m ( θ T x ( i ) − y ( i ) ) 2 ] = 1 2 m ∑ i = 1 m 2 ( θ T x ( i ) − y ( i ) ) ⋅ ∂ ∂ θ j ( θ T x ( i ) − y ( i ) ) \frac{∂J(\textbf{θ})}{∂θ_j}=\frac{∂}{∂θ_j}[\frac{1}{2m}\sum_{i=1}^m(\textbf{θ}^T \textbf{x}^{(i)}-y^{(i)})^2]=\frac{1}{2m}\sum_{i=1}^m 2(\textbf{θ}^T \textbf{x}^{(i)}-y^{(i)})·\frac{∂}{∂θ_j}(\textbf{θ}^T \textbf{x}^{(i)}-y^{(i)}) ∂θj∂J(θ)=∂θj∂[2m1i=1∑m(θTx(i)−y(i))2]=2m1i=1∑m2(θTx(i)−y(i))⋅∂θj∂(θTx(i)−y(i))
∴ ∂ J ( θ ) ∂ θ j = 1 m ∑ i = 1 m ( θ T x ( i ) − y ( i ) ) ⋅ ∂ ∂ θ j ( ∑ i = 1 m θ i x i − y ( i ) ) = 1 m ∑ i = 1 m ( θ T x ( i ) − y ( i ) ) x j ( i ) ∴\frac{∂J(\textbf{θ})}{∂θ_j}=\frac{1}{m}\sum_{i=1}^m(\textbf{θ}^T \textbf{x}^{(i)}-y^{(i)})·\frac{∂}{∂θ_j}(\sum_{i=1}^mθ_i x_i-y^{(i)})=\frac{1}{m}\sum_{i=1}^m(\textbf{θ}^T \textbf{x}^{(i)}-y^{(i)}) x_j^{(i)} ∴∂θj∂J(θ)=m1i=1∑m(θTx(i)−y(i))⋅∂θj∂(i=1∑mθixi−y(i))=m1i=1∑m(θTx(i)−y(i))xj(i)
转化为矩阵表达式为:
∂ J ( θ ) ∂ θ j = 1 m ( Xθ − Y ) T X ( : , j ) \frac{∂J(\textbf{θ})}{∂θ_j}=\frac{1}{m}(\textbf{Xθ}-\textbf{Y})^T \textbf{X}_{(: ,j)} ∂θj∂J(θ)=m1(Xθ−Y)TX(:,j)
其中,
X m × n = [ x 0 ( 1 ) x 1 ( 1 ) ⋯ x n ( 1 ) ⋯ ⋯ ⋯ ⋯ x 0 ( m ) x 1 ( m ) ⋯ x n ( m ) ] \textbf{X}_{m×n}=\begin{bmatrix} x_0^{(1)}&x_1^{(1)}&\cdots&x_n^{(1)} \\ \cdots&\cdots&\cdots&\cdots \\ x_0^{(m)}&x_1^{(m)}&\cdots&x_n^{(m)} \\ \end{bmatrix} Xm×n=⎣⎢⎡x0(1)⋯x0(m)x1(1)⋯x1(m)⋯⋯⋯xn(1)⋯xn(m)⎦⎥⎤
θ = ( θ 0 , θ 1 , … , θ n ) ′ \textbf{θ}=(θ_0, θ_1,…,θ_n)' θ=(θ0,θ1,…,θn)′
X ( : , j ) = ( x j ( 1 ) , x j ( 2 ) , . . . , x j ( m ) ) ′ \textbf{X}_{(: ,j)}=(x_j^{(1)},x_j^{(2)},...,x_j^{(m)})' X(:,j)=(xj(1),xj(2),...,xj(m))′
Y = [ y ( 1 ) y ( 2 ) ⋯ y ( m ) ] \textbf{Y}=\begin{bmatrix} y^{(1)} \\ y^{(2)} \\ \cdots \\ y^{(m)} \\ \end{bmatrix} Y=⎣⎢⎢⎡y(1)y(2)⋯y(m)⎦⎥⎥⎤
∴ ∂ J ( θ ) ∂ θ = [ ∂ J ( θ ) ∂ θ 0 , ∂ J ( θ ) ∂ θ 1 , . . . , ∂ J ( θ ) ∂ θ n ] T ∴\frac{∂J(\textbf{θ})}{∂\textbf{θ}}=[\frac{∂J(\textbf{θ})}{∂θ_0},\frac{∂J(\textbf{θ})}{∂θ_1},...,\frac{∂J(\textbf{θ})}{∂θ_n}]^T ∴∂θ∂J(θ)=[∂θ0∂J(θ),∂θ1∂J(θ),...,∂θn∂J(θ)]T
通常设置初值θ=(0,0,…,0)’,代入迭代公式后即可不断更新参数向量θ直到θ收敛致某一值,此时的参数向量θ可以使J(θ)达到局部最小值。
通常来说,梯度下降法求到的不是全局最优解,而是局部最优。然而此处的线性回归问题只有一个最优解,并无局部最优解(因为J(θ)是一个凸函数)。所以梯度下降法(步长适当时)一定会收敛,且一定能得到全局最优解。
为什么需要特征缩放?
因为当样本具有多个特征时,如 x ( i ) = ( x 1 ( i ) , x 2 ( i ) , . . . , x n ( i ) ) ′ \textbf{x}^{(i)}=(x_1^{(i)},x_2^{(i)},...,x_n^{(i)})' x(i)=(x1(i),x2(i),...,xn(i))′,在所有样本中,由于每个特征的量纲不同,特征取值的范围也不同,可能 x 1 ( i ) ∈ [ 0 , 1 ] x_1^{(i)}∈[0,1] x1(i)∈[0,1],而 x 2 ( i ) ∈ [ 10000 , 100000 ] x_2^{(i)}∈[10000,100000] x2(i)∈[10000,100000]。这样,在进行梯度下降的时候,由于数值较大的特征(如 x 2 ( i ) x_2^{(i)} x2(i))会导致在数值较小的特征的梯度方向上移动缓慢,从而大大增加梯度迭代次数,降低算法效率(如右图)。因此,对所有数据进行适当的特征缩放后,将所有特征的取值范围映射到同一数量级的范围内,可以解决上述问题。
如何进行特征缩放?
常用的特征缩放方法有:
i. (0,1)缩放
x k ( i ) : = x k ( i ) − min j ∈ [ 1 , m ] x k ( j ) max j ∈ [ 1 , m ] x k ( j ) − min j ∈ [ 1 , m ] x k ( j ) x_k^{(i)}:=\frac{x_k^{(i)}-\min\limits_{j∈[1,m]}x_k^{(j)} }{\max\limits_{j∈[1,m]}x_k^{(j)}-\min\limits_{j∈[1,m]}x_k^{(j)}} xk(i):=j∈[1,m]maxxk(j)−j∈[1,m]minxk(j)xk(i)−j∈[1,m]minxk(j)
其中,等号左边的 x k ( i ) x_k^{(i)} xk(i)是第i个样本第k个特征缩放后的新值;
min j ∈ [ 1 , m ] x k ( j ) \min\limits_{j∈[1,m]}x_k^{(j)} j∈[1,m]minxk(j)是所有样本第k个特征的最小值;
max j ∈ [ 1 , m ] x k ( j ) \max\limits_{j∈[1,m]}x_k^{(j)} j∈[1,m]maxxk(j)是所有样本第k个特征的最大值。
ii. 标准缩放
x k ( i ) : = x k ( i ) − x ˉ k s t d ( x k ) x_k^{(i)}:=\frac{x_k^{(i)}-\bar{x}_k}{std(x_k)} xk(i):=std(xk)xk(i)−xˉk
x ˉ k = m e a n j ∈ [ 1 , m ] ( x k ( j ) ) = 1 m ∑ j = 1 m x k ( j ) \bar{x}_k=mean_{j∈[1,m]}(x_k^{(j)})=\frac{1}{m}\sum_{j=1}^m x_k^{(j)} xˉk=meanj∈[1,m](xk(j))=m1∑j=1mxk(j) ,是所有样本第k个特征的均值;
s t d ( x k ) std(x_k) std(xk)是所有样本第k个特征的标准差。
如果学习率过小,则达到收敛所需的迭代次数很大,收敛速度很慢;
如果学习率过大,则每次迭代后的损失函数数值(loss值)可能不降反增,会跳过局部最小值,甚至不收敛;
通常可以按顺序尝试α=0.01,0.03,0.1,0.3,1,3,10等数值。
最好是记录每次迭代的loss值,然后画出J(θ)与迭代次数的函数图,根据图像来选择合适的学习率。如下图。
批量梯度下降算法(BGD, batch gradient descent):
θ j = θ j − α 1 m ∑ i = 1 m ( θ T x ( i ) − y ( i ) ) x j ( i ) , 反 复 迭 代 , 直 到 收 敛 θ_j=θ_j-α \frac{1}{m}\sum_{i=1}^m(\textbf{θ}^T \textbf{x}^{(i)}-y^{(i)}) x_j^{(i)} ,反复迭代,直到收敛 θj=θj−αm1i=1∑m(θTx(i)−y(i))xj(i),反复迭代,直到收敛
随机梯度下降算法(SGD, stochastic gradient descent):
θ j = θ j − α 1 m ( θ T x ( i ) − y ( i ) ) x j ( i ) , 一 个 样 本 迭 代 一 次 或 多 个 样 本 迭 代 一 次 θ_j=θ_j-α \frac{1}{m}(\textbf{θ}^T \textbf{x}^{(i)}-y^{(i)}) x_j^{(i)},一个样本迭代一次或多个样本迭代一次 θj=θj−αm1(θTx(i)−y(i))xj(i),一个样本迭代一次或多个样本迭代一次
由于批量梯度下降每前进一个步长时,都需要遍历整个训练集,所以当训练集样本个数m很大时,会耗费很长时间,效率不高。而随机梯度下降法是每遍历一个样本(或设定好一定数量的样本)就前进一个步长,所以随机梯度算法一般会比批量梯度算法更快的找到”最优解”(随机梯度算法找到的最优解一般不是最优的,而是在最优解附近摆动的,但是其得到的最终解通常都是在精度要求以内的)。所以通常情况下,在训练集样本数较大时,都倾向于使用随机梯度下降算法。
随机梯度下降(SGD)是可行的,并且效率很高,实际中是最常用的。同时,这种拿一个样本就下降,可以保证在线学习,及时更新。当然,也可以折中,取一定样本后再下降。(在大部分教材中提到的随机梯度下降,其实是折中的随机梯度下降。也就是每次取若干个样本的平均梯度作为更新方向)。
线性回归不只是可以拟合“线性方程”,提前计算好已有特征的非线性数值,再作为新特征值代入线性回归中,就可以拟合“非线性方程”。
例如想要拟合的方程为: y = θ 0 + θ 1 sin x + θ 2 ln x y=θ_0+θ_1\sinx+θ_2 \lnx y=θ0+θ1sinx+θ2lnx,但是样本中只给出了x的数值。那么只需要计算出所有样本的 sin x \sinx sinx和 ln x \lnx lnx的数值,然后令 x 1 = sin x , x 2 = ln x x_1=\sinx,x_2=\lnx x1=sinx,x2=lnx。代入后即可得:
y = θ 0 + θ 1 x 1 + θ 2 x 2 y=θ_0+θ_1 x_1+θ_2 x_2 y=θ0+θ1x1+θ2x2
因为这里的线性回归的线性,其实不是指对特征 x ( i ) x^{(i)} x(i)的线性,由于我们在目标方程中真正要求解的是参数向量 θ = ( θ 0 , θ 1 , … , θ n ) ′ θ=(θ_0,θ_1,…,θ_n)' θ=(θ0,θ1,…,θn)′,因此只需要对参数 θ = ( θ 0 , θ 1 , … , θ n ) ′ θ=(θ_0,θ_1,…,θ_n)' θ=(θ0,θ1,…,θn)′保持线性即可。而对特征 x ( i ) x^{(i)} x(i)是否线性并不影响,只需要在进行线性回归前进行适当的数据转化即可。
我们如此思考,将M个N维样本组成矩阵 X M × N X_{M×N} XM×N:
1.X的每一行对应一个样本,共M个样本;
2.X的每一列对应样本的一个维度,共N维(也就是模型的影响因素个数,或是同一因素不同阶数的影响);
3.还有一维常数项,全为1(所以实际上是N+1维)。
所以,目标函数转换为:
J ( θ ) = 1 2 ∑ i = 1 m ( θ T x ( i ) − y ( i ) ) 2 = 1 2 ( Xθ − Y ) T ( Xθ − Y ) ( 平 方 和 求 和 等 于 矩 阵 与 其 转 置 相 乘 ) J(\textbf{θ})=\frac{1}{2}\sum_{i=1}^m(\textbf{θ}^T\textbf{x}^{(i)}-y^{(i)} )^2 =\frac{1}{2}(\textbf{Xθ}-\textbf{Y})^T (\textbf{Xθ}-\textbf{Y}) (平方和求和等于矩阵与其转置相乘) J(θ)=21i=1∑m(θTx(i)−y(i))2=21(Xθ−Y)T(Xθ−Y)(平方和求和等于矩阵与其转置相乘)
所以,目标函数求导,也就是目标函数的梯度为:
∂ J ( θ ) ∂ θ = ∂ ∂ θ [ 1 2 ( Xθ − Y ) T ( Xθ − Y ) ] = ∂ / ∂ θ [ 1 2 ( θ T X T − Y T ) ( Xθ − Y ] \frac{∂J(\textbf{θ})}{∂\textbf{θ}}=\frac{∂}{∂\textbf{θ}} [\frac{1}{2} (\textbf{Xθ}-\textbf{Y})^T (\textbf{Xθ}-\textbf{Y})]=∂/∂\textbf{θ} [\frac{1}{2} (\textbf{θ}^T X^T-Y^T )(\textbf{Xθ}-\textbf{Y}] ∂θ∂J(θ)=∂θ∂[21(Xθ−Y)T(Xθ−Y)]=∂/∂θ[21(θTXT−YT)(Xθ−Y]
∂ J ( θ ) ∂ θ = ∂ ∂ θ [ 1 2 ( θ T X T Xθ − θ T X T Y + Y T Xθ − Y T Y ) ] = X T Xθ − 1 2 X T Y − 1 2 X T Y = 0 \frac{∂J(\textbf{θ})}{∂\textbf{θ}}=\frac{∂}{∂\textbf{θ}} [\frac{1}{2} (\textbf{θ}^T \textbf{X}^T \textbf{Xθ}-\textbf{θ}^T \textbf{X}^T \textbf{Y}+\textbf{Y}^T \textbf{Xθ}-\textbf{Y}^T \textbf{Y})]=\textbf{X}^T \textbf{Xθ}-\frac{1}{2} \textbf{X}^T\textbf{Y}-\frac{1}{2}\textbf{X}^T\textbf{Y}=0 ∂θ∂J(θ)=∂θ∂[21(θTXTXθ−θTXTY+YTXθ−YTY)]=XTXθ−21XTY−21XTY=0
其中,上式中使用了几个线性代数结论:
1.当矩阵A为对称阵时, ∂ ( θ T Aθ ) ∂ θ = 2 Aθ , 故 ∂ ( θ T X T Xθ ) ∂ θ = 2 X T Xθ \frac{∂(\textbf{θ}^T \textbf{Aθ})}{∂\textbf{θ}}=2\textbf{Aθ},故 \frac{∂(\textbf{θ}^T \textbf{X}^T \textbf{Xθ})}{∂\textbf{θ}}=2\textbf{X}^T \textbf{Xθ} ∂θ∂(θTAθ)=2Aθ,故∂θ∂(θTXTXθ)=2XTXθ
2. ∂ Aθ ∂ θ = A T , ∴ ( ∂ θ T A ) ∂ θ = A \frac{∂\textbf{Aθ}}{∂\textbf{θ}}=\textbf{A}^T,∴\frac{(∂\textbf{θ}^T \textbf{A})}{∂θ}=\textbf{A} ∂θ∂Aθ=AT,∴∂θ(∂θTA)=A。 故 ( ∂ θ T X T Y ) ∂ θ = X T Y 故 \frac{(∂\textbf{θ}^T \textbf{X}^T \textbf{Y})}{∂\textbf{θ}}=\textbf{X}^T \textbf{Y} 故∂θ(∂θTXTY)=XTY
综上所述,
令 ∂ J ( θ ) ∂ θ = X T Xθ − X T Y = 0 \frac{∂J(\textbf{θ})}{∂\textbf{θ}}=\textbf{X}^T \textbf{Xθ}-\textbf{X}^T \textbf{Y}=0 ∂θ∂J(θ)=XTXθ−XTY=0
可以得到目标函数 J ( θ ) J(\textbf{θ}) J(θ)的驻点:
超 级 重 要 结 论 : θ = ( X T X ) − 1 X T Y 超级重要结论:\textbf{θ}=(\textbf{X}^T \textbf{X})^{-1} \textbf{X}^T \textbf{Y} 超级重要结论:θ=(XTX)−1XTY
简 单 记 忆 方 法 ( 不 正 规 ) : Xθ = Y ⇒ X T Xθ = X T Y ⇒ θ = ( X T X ) − 1 X T Y 简单记忆方法(不正规):\textbf{Xθ}=\textbf{Y}⇒\textbf{X}^T \textbf{Xθ}=\textbf{X}^T \textbf{Y}⇒\textbf{θ}=(\textbf{X}^T \textbf{X})^{-1} \textbf{X}^T \textbf{Y} 简单记忆方法(不正规):Xθ=Y⇒XTXθ=XTY⇒θ=(XTX)−1XTY
代入样本数据点X,Y之后,就可以求解得到θ的值
但是,如果 X T X \textbf{X}^T\textbf{X} XTX不可逆怎么办?
为了解决该问题,我们在上式中增加扰动,得到:
θ = ( X T X + λ I ) − 1 X T Y θ=(\textbf{X}^T \textbf{X}+λ\textbf{I})^{-1} \textbf{X}^T \textbf{Y} θ=(XTX+λI)−1XTY
其中λ>0。且λ的选择需要根据实际情况进行修改,也就是λ是可调节的参数(超参数)。(其实 λ I λ\textbf{I} λI中的 I \textbf{I} I不是标准单位矩阵,而是第一行为0的 I \textbf{I} I)。
(X^T X)矩阵不可逆的常见原因,及简单的解决办法
1).具有多余的特征,即两个特征之间关系非常紧密(例如两个特征线性相关)
2).特征数量太多(比如特征数量大于样本数据集数量)
解决办法:找出关系密切的特征,删去多余特征。
为什么增加了扰动可以避免不可逆?
∵对于任意非零向量u,有
u T X T Xu = ( Xu ) T Xu \textbf{u}^T \textbf{X}^T \textbf{Xu}=(\textbf{Xu})^T \textbf{Xu} uTXTXu=(Xu)TXu,令 v = Xu \textbf{v}=\textbf{Xu} v=Xu, ∴ v T v ≥ 0 ∴\textbf{v}^T \textbf{v}≥0 ∴vTv≥0恒成立, ∴ X T X ∴\textbf{X}^T \textbf{X} ∴XTX是半正定矩阵
∴对于任意 λ > 0 , X T X + λ I λ>0,\textbf{X}^T \textbf{X}+λ\textbf{I} λ>0,XTX+λI一定是正定矩阵,因此一定可逆。(即加入扰动后,避免了 X T X \textbf{X}^T \textbf{X} XTX是全零矩阵的情况。)
为什么增加了扰动还能防止过拟合?
在线性回归的目标函数中加入复杂度惩罚因子(目标函数增加平方和的损失),可以一定程度的抑制噪声数据的干扰。这种做法的本质是假定参数θ服从高斯分布。加入扰动后的目标函数如下:
R i d g e 回 归 : J ( θ ) = 1 2 m ∑ i = 1 m [ ( θ T x ( i ) − y ( i ) ) 2 ] + λ ∑ j = 1 n θ j 2 Ridge回归:J(\textbf{θ})=\frac{1}{2m} \sum_{i=1}^m[(\textbf{θ}^T\textbf{x}^{(i)}-y^{(i)} )^2 ]+λ\sum_{j=1}^nθ_j^2 Ridge回归:J(θ)=2m1i=1∑m[(θTx(i)−y(i))2]+λj=1∑nθj2
L a s s o 回 归 : J ( θ ) = 1 2 m ∑ i = 1 m [ ( θ T x ( i ) − y ( i ) ) 2 ] + λ ∑ j = 1 n ∣ θ j ∣ Lasso回归:J(\textbf{θ})=\frac{1}{2m} \sum_{i=1}^m[(\textbf{θ}^T\textbf{x}^{(i)}-y^{(i)} )^2 ]+λ\sum_{j=1}^n|θ_j | Lasso回归:J(θ)=2m1i=1∑m[(θTx(i)−y(i))2]+λj=1∑n∣θj∣
其中 λ ∑ j = 1 n θ j 2 λ\sum_{j=1}^nθ_j^2 λ∑j=1nθj2这一项,叫做正则项,这种做法叫做Ridge回归,也叫 l 2 l_2 l2正则(L2-norm)。同理,如果改为 λ ∑ j = 1 n ∣ θ j ∣ λ\sum_{j=1}^n|θ_j | λ∑j=1n∣θj∣,则叫做Lasso回归,也叫 l 1 l_1 l1正则(L1-norm)。
利用上述新的目标函数,再进行求导求驻点的操作,最终得到的结果就是上述加了扰动λ后的结果。这就解释了为什么加了扰动后的结果可以防止过拟合。
-----------------------------注释-----------------------------
1).Ridge回归可以很简单对 λ ∑ j = 1 n θ j 2 λ\sum_{j=1}^nθ_j^2 λ∑j=1nθj2项求导,但是Lasso回归要如何对 λ ∑ j = 1 n ∣ θ j ∣ λ\sum_{j=1}^n|θ_j | λ∑j=1n∣θj∣项求导?
构造函数
f ( x , α ) = x + 1 α log ( 1 + e − α x ) , x ≥ 0 f(x,α)=x+\frac{1}{α}\log(1+e^{-αx} ),x≥0 f(x,α)=x+α1log(1+e−αx),x≥0
所以有如下近似:
∣ x ∣ ≈ f ( x , α ) + f ( − x , α ) = 1 α log ( 1 + e − α x + 1 + e α x ) |x|≈f(x,α)+f(-x,α)=\frac{1}{α}\log(1+e^{-αx}+1+e^{αx} ) ∣x∣≈f(x,α)+f(−x,α)=α1log(1+e−αx+1+eαx)
所以 ∣ x ∣ |x| ∣x∣的梯度为:
∇ ∣ x ∣ ≈ 1 ( 1 + e − α x − 1 ( 1 + e α x ) ; ∇ 2 ∣ x ∣ ≈ ( 2 α e α x ) / ( 1 + e α x ) 2 ∇|x|≈\frac{1}{(1+e^{-αx}}-\frac{1}{(1+e^{αx})};∇^2 |x|≈(2αe^{αx})/(1+e^{αx} )^2 ∇∣x∣≈(1+e−αx1−(1+eαx)1;∇2∣x∣≈(2αeαx)/(1+eαx)2
实践中,通常取 α = 1 0 6 α=10^6 α=106
2).广义逆矩阵(伪逆矩阵)
由 Xθ = Y ⇒ θ = ( X T X ) − 1 X T Y \textbf{Xθ}=\textbf{Y}⇒\textbf{θ}=(\textbf{X}^T \textbf{X})^{-1} \textbf{X}^T \textbf{Y} Xθ=Y⇒θ=(XTX)−1XTY可知,定义:
A + = ( A T A ) − 1 A T \textbf{A}^+=(\textbf{A}^T \textbf{A})^{-1} \textbf{A}^T A+=(ATA)−1AT
当 A \textbf{A} A为可逆方阵时,可以推导得到 A + = A − 1 \textbf{A}^+=\textbf{A}^{-1} A+=A−1
当 A \textbf{A} A为矩阵(非方阵)时,称 A + A^+ A+为广义逆矩阵(伪逆矩阵)
-----------------------------注释-----------------------------
在线性回归中,当n比较低维的时候,可以直接用解析的方法计算。但是当n比较高维的时候,这样做就会耗费大量的计算能力。这时候最好就要用梯度下降法(Gradient Descent)。不一定能找到全局最优,但一定能找到局部最优,通常情况下,局部最优解已经可以满足任务要求了。
差不多当n>10000时,直接求解法的效率就明显低于梯度下降法了。
另外,梯度下降法求解的是局部最优解,而直接求解法求的是全局最优解