这节主要介绍线性回归的相关知识,包括目标函数、最小二乘、L1、L2正则、梯度下降、AUC、logistic回归、softmax回归等。
回归主要是用来做拟合的,比如已知一部分房子的面积、几居室及售价信息,来估计当前要售卖的房屋的大概价格等。
**
**
所谓线性回归,是指各属性的参数是线性的,目标本身可能是一阶,也可能是高阶的。
例:已知房屋的售价和建筑面积
x1
、房间个数
x2
有关,则可表示为:
hθ(x)=θ0+θ1x1+θ2x2
。
上述是针对只有两个参数的情况,但参数有多个时:
hθ(x)=∑i=0nθixi=θTX
这里
hθ(x)
即为我们的决策函数。我们的目的是求出决策函数的各个参数
θ
。
下面是为求出各参数
θ
的理论和实际做法。
相对于估计值,真实值为:
y(i)=θTx(i)+ε(i)
其中误差
ε(i)
是独立同分布的,并且服从均值为0、方差为
σ2
的高斯分布,即:
P(ε(i))=12π−−√σexp(−(ε(i))22σ2)
根据真实值和估计值之间的关系:
P(y(i)|x(i);θ)=12π−−√σexp(−(y(i)−θTx(i))22σ2)
则误差的似然函数
L(θ)=∏i=1nP(y(i)|x(i);θ)=∏i=1n12π−−√σexp(−(y(i)−θTx(i))22σ2)
为求最大似然,对上述求导:
l(θ)=∑i=1nlog12π−−√σexp(−(y(i)−θTx(i))22σ2)=mlog12π−−√σ−1σ2⋅12∑i=1n(y(i)−θTx(i))2
令
J(θ)=12∑i=1n(y(i)−θTx(i))2=12∑i=1n(hθ(x(i))−y(i))2
由于
l(θ)
中第一项为常数项,为使
l(θ)
最大,则等价于对
J(θ)
求最小,这里
J(θ)
定义为损失函数,是真实值和估计值差的平方和,为使决策函数的最大似然,需要让损失函数最小,怎样求出
J(θ)
的最小值呢?我们进一步推导。
**
**
决策函数最大似然的最大值等价于求损失函数
J(θ)
的最小值。
J(θ)=12∑i=1n(hθ(x(i))−y(i))2=12(xθ−y)T(xθ−y)=12(θTxT−yT)(xθ−y)=12(θTxTxθ−θTxTy−yTxθ+yTy)
根据机器学习(3)中如何对矩阵求偏导数,我们对
J(θ)
求偏导数:
∂J(θ)∂θ=12(2xTxθ−2xTy)=xTxθ−xTy
最小值处:
∂J(θ)∂θ=0
,即
xTxθ−xTy
=0。
xT(xθ−y)=0
若
xTx
可逆,则
θ=(xTx)−1xTy
(最小二乘)。
为防止
xTx
不可逆(也为了防止过拟合)的情况,加入扰动项
λ
(通常称为岭回归,这里
λ
通常是一个极小的数值):
θ=(xTx+λI)−1xTy
**
**
在线性回归中,为了预防过拟合,需要对损失函数加入扰动项,常用的扰动项有两种:L1正则(lasso回归)和L2正则(岭回归)。
L1正则的损失函数:
J(θ)=12∑i=1n(hθ(x(i))−y(i))2+λ∑i=1n|θj|
L2正则的损失函数:
J(θ)=12∑i=1n(hθ(x(i))−y(i))2+λ∑i=1nθ2j
注:这里的岭回归虽然和最小二乘里的一样,但最小二乘中是用于一次性计算出所有的参数,而这里是用于迭代过程中使用的。
另外,L1相比于L2,参数更稀疏(
θ
为0或接近0的比较多)。
**
**
上面的最小二乘是从纯数学理论的角度推导的,实际应用中,X的属性可能很多,导致
xTx
很大,计算其逆变得不切实际。实际应用中,梯度下降比较受欢迎。在机器学习(1)中已经提到过偏导数的作用,偏导数是梯度下降可行的理论支持。
梯度下降法是按下面的流程进行的:
1)首先对
θ
赋值,这个值可以是随机的,也可以让
θ
是一个全零的向量。
2)更新
θ
的值,使得J(
θ
)按梯度下降的方向进行减少,即更新后的
θ
使得J(
θ
)更小。
对上述的损失函数,在
θj
处的梯度方向为:
∂J(θ)∂θj=∂∂θj12(hθ(x)−y)2=(hθ(x)−y)xj
下面是更新的过程,也就是
θj
会向着梯度最小的方向进行减少。
θj
表示更新之前的值,-后面的部分表示按梯度方向减少的量,
α
表示步长,也就是每次按照梯度减少的方向变化多少。
θj=θj−α⋅∂J(θ)∂θj=θj−α⋅(hθ(x)−y)xj
,其中
α
是步长。
下面的图可以更直观清晰:
这是一个表示参数
θ
与损失函数J(
θ
)的关系图,红色的部分是表示J(
θ
)有着比较高的取值,我们需要的是,能够让J(
θ
)的值尽量的低。也就是深蓝色的部分。
θ0
,
θ1
表示
θ
向量的两个维度。
在上面提到梯度下降法的第一步是给
θ
给一个初值,假设随机给的初值是在图上的十字点。
然后我们将
θ
按照梯度下降的方向进行调整,就会使得J(
θ
)往更低的方向进行变化,如图所示,算法的结束将是在
θ
下降到无法继续下降为止。
**
**
我们现实生活中的很多数据不一定都能用线性模型描述。依然是上述的房价问题,很明显直线非但不能很好的拟合所有数据点,而且有时候误差非常大,但是一条类似二次函数的曲线却能拟合地很好。为了解决非线性模型建立线性模型的问题,我们预测一个点的值时,选择与这个点相近的点而不是所有的点做线性回归。基于这个思想,便产生了局部加权线性回归算法。在这个算法中,其他离一个点越近,权重越大,对回归系数的贡献就越多。
局部加权依然使用损失函数,只不过使用的是加权的损失函数:
J(θ)=12∑i=1nω(i)(hθ(x(i))−y(i))2
这里
ω(i)
即为权重,比较常用的一个权重函数为:
ω(i)=exp(−(x(i)−x)22τ2)
**
**
首先给出logistic/sigmoid函数的定义形式:
g(x)=11+e−x
为后面使用方便,对上述g(x)求导,可以推导出其导数为:
g′(x)=g(x)(1−g(x))
logistic的决策函数满足上述形式,即:
hθ(x)=11+e−θTx
假定:
p(y=1|x;θ)=hθ(x);p(y=0|x;θ)=1−hθ(x)
我们可以用一个式子描述上述两个的概率:
p(y|x;θ)=(hθ(x))y(1−hθ(x))1−y
为求出决策函数中的参数
θ
,依然通过最大似然的方式。logistic回归的最大似然为:
L(θ)=∏i=1np(y(i)|x(i);θ)=∏i=1n(hθ(x(i)))y(i)(1−hθ(x(i)))1−y(i)
对最大似然求对数:
l(θ)=log(L(θ))=∑i=1n(y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i))))
对
l(θ)
在
θj
处求导数,则:
∂l(θ)∂θj=∑i=1n(y(i)hθ(x(i))∂hθ(x(i))∂θj+1−y(i)1−hθ(x(i))∂(1−hθ(x(i)))∂θj)=∑i=1n(y(i)hθ(x(i))−1−y(i)1−hθ(x(i)))∂hθ(x(i))∂θj
根据
g′(x)=g(x)(1−g(x))
,上述求导进一步得到:
∂l(θ)∂θj=∑i=1n(y(i)hθ(x(i))−1−y(i)1−hθ(x(i)))hθ(x(i))(1−hθ(x(i)))∂θTx∂θj=∑i=1n(y(i)−hθ(x(i)))x(i)j
这个结果很熟悉有木有?在线性回归中通过损失函数最小得到的结果和上述一致,所以logistic的参数也可以通过类似的梯度下降法得到(虽然二者都是通过梯度下降法得到参数,但还是有一定区别,下面有详细说明)。
关于logistic的损失函数:
常用的损失函数有差平方损失函数(比如线性回归中使用的)、差绝对值损失函数、对数损失函数或对数似然损失函数等。logistic中使用的是对数似然损失函数,即logistic的损失函数为
−l(θ)=−∑i=1n(y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i))))
logistic的损失函数,也即交叉熵损失函数(交叉熵在下一节中有详细介绍)。
补充:线性回归和逻辑回归都是采用梯度下降进行参数计算的,但原理并不相同。线性回归是通过高斯分布用最大似然推导计算出来的;逻辑回归是直接根据目标函数用最大似然推导计算出来的。最优化理论可以证明通过梯度下降可以求出线性回归和逻辑回归的参数,但梯度下降只是一种求出参数的简单有效的方式。除了梯度下降还有牛顿法,牛顿法和梯度下降法的区别在于牛顿法是二阶求导,计算比较复杂并且可能二阶导不存在或没法求出,梯度下降法是一阶求导,计算复杂度低,更简单有效。