线性回归

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhao_cq/article/details/80808296

假设函数

hypothesis是指拟合的函数,表示为hθ(x)=θTx , 其中θ=[θ0,θ1,,θn,], x=[x0,x1,,xn],x0=1

hθ(x)=[θ0θ1...θn][x0x1xn]=θTx

这里需要注意的是,为了形式简洁,将x0 放入向量中,并且赋值为1.

损失函数

定义线性回归的损失函数为:(均方误差)

J(θ)=12mi=1m(hθ(x(i))y(i))2

对于线性回归,均方误差损失是一个凸函数,具有全局最小值。

优化方法

梯度下降法

这个比较常规

对于损失函数J(θ), 对于每个θj ,进行更新:

repeat until converge:

θj=θjαθjJ(θ)

这里需要注意的是,所有的θj同时更新的,也就是上式中的θ 向量都采用同一个向量,直到下次更新。

对于线性回归的损失函数而言,上面的式子可以进一步写为:

θj=θjα[1mi=1m(hθ(x(i))y(i))xj(i)],(j=0,1,2,,,n)

由于上式中,对所有样本进行了求和,即涉及 了所有样本,因此这种梯度下降法又称为“Batch gradient decent”

Normal Equation

这个方法就是梯度等于零,直接求解。但是使用了向量形式。对于线性迭代推导如下:

假定有m个样本,样本feature个数为n,那么可以定义:

x(i)=[x0(i)x1(i)xn(i)] ,θ=[θ0θ1θn] ,y=[y0y1ym]

可以看到 x(i)Rn+1,θRn+1,yRm ,定义:

X=[(x(1))T(x(2))T(x(m))T] ,XRm×(n+1)

由损失函数定义可以得到其向量形式为:

J(θ)=12m(Xθy)T(Xθy)=12m(θTXTXθ2yTXθ+yTy)

因此求导得:
θJ(θ)=12m(2XTXθ2XTy)

如果XTX 可逆,得到θ=(XTX)1XTy 。这个方法称为Normal Equation。

在使用Octave计算时,上式可以写为:pinv(X'*X)*X'*y

使用Normal Equation时,不需要考虑feature scaling.

与梯度下降法相比如下:

Gradient Descent Normal Equation
Need to choose alpha No need to choose alpha
Needs many iterations No need to iterate
O(kn2) O(n3), need to calculate inverse of XTX
Works well when n is large Slow if n is very large

从他们的时间复杂度可以看出,当n比较大时,用梯度下降法时间上更有优势。这里的大,吴恩达给出的建议是,当n < 10000时,可以考虑Normal Equation,当n >10000时,使用梯度下降更好。

不可逆

XTX 不可逆时,称为singular 或 degenerate, 可能是由于两个原因:

  • 有线性相关的feature
  • feature 太多,使得mn

解决办法是删除一些feature或者使用正则化方法。

在Octave中,有两个求逆函数qinv inv ,使用qinv 会在XTX 不可逆返回其逆矩阵,其中涉及一些数学操作。

过拟合和正则化

欠拟合(under-fitting, high bias):模型没有很好地捕捉数据特征,不能很好地拟合数据

过拟合(over-fitting, high varience) :

过拟合的表现:对于训练集,预测非常准确,对于新数据预测很差,也就是泛化能力差(generalize)。

如何避免过拟合,有两种方式:

  • 减少特征维度,有两种方法:

    • 手动选择特征
    • 通过模型选择

    缺点:损失了部分信息

  • 正则化(regularization):保留所有特征,但是减小参数θ 的值,对于具有很多特征,每个特征都对预测值有贡献的问题,有很好的效果。

正则化是一种避免过拟合的手段,其思想是通过在损失函数中添加参数“惩罚”,控制参数幅度,限制参数搜索空间。从而达到以下目的:

  • 简化预测函数(hypothesis) hθ(x)
  • 减小过拟合倾向

正则化后,损失函数可以写为下式:可以看到这里的正则化项从1开始,没有对 θ0 进行约束。在实际操作时,加上 θ0 对结果的影响也很小。

J(θ)=12m[i=1m(hθ(x(i))y(i))2+λj=1nθj2]

这将损失函数分成了两个部分:拟合训练集、减小参数值。这两部分的权重通过λ 来调节,因此如何挑选合适的λ 也是十分重要的,有相关算法后续会介绍。

梯度下降法

正则化后,如果使用梯度下降法进行迭代有以下迭代公式:

θ0=θ0αmi=1m(hθ(x(i))y(i))x0(i)

θj=θjα[1mi=1m(hθ(x(i))y(i))xj(i)+λmθj],(j=1,2,,,n)

可以写成:

θj=(1αλm)θjα[1mi=1m(hθ(x(i))y(i))xj(i)],(j=1,2,,,n)

其中,(1αλm)<1 ,因此可以将上式理解成:首先将θj 缩小一点,然后按照正常的梯度下降法进行处理。这样就可以保证 θj 不会太大,从而减小了overfitting 的可能。

Normal Equation

当含有L2正则化项后,损失函数的向量形式可以写为:

J(θ)=12m(Xθy)T(Xθy)+λ2mθTLθ=12m(θTXTXθ2yTXθ+yTy+λLθ)

因此求导得:
θJ(θ)=12m(2XTXθ2XTy+2λLθ)

如果XTX+λL 可逆,得到θ=(XTX+λL)1XTy

注意,由于不需要对θ0 进行正则化,因此,

L=[000...0010...0001...0000...1]

正则化后还有一个好处:当XTX 不可逆时,通过加上λLXTX+λL 一般是可逆的。

技巧

技巧1:feature scaling

确保所有的属性值都在同一个量级上,梯度下降法会更快收敛。

一般使得每个属性大概满足xi[1.1] ,距离此范围不大的可以不用处理。

处理方法有:

  • 除以最大值

  • mean normalization:

    xi 替换为xiμi 或者xiμisi,使得属性值的均值大约为0.(不对x0 进行处理),其中,μi 为均值,si=maxmin 或标准差。

注意:如果使用了scaling技巧,那么在预测时,同样需要对样本值进行相同的处理

技巧2:判断收敛和选择步长

通过画J(θ) 随迭代次数的图来判断,正常应该是逐渐下降的。如果逐渐上升,应该减小步长。但是步长太小就会导致收敛太慢。

吴恩达给出的选择步长的方法是:从小到大试,首先确定太小的和太大的,然后从这之间按照3倍关系试,例如可以选择0.001,0.003,0.01,0.03,0.1,0.3,1,这个序列。

属性选择和多项式回归

可以有很多方式来改进假设函数,例如

  • 属性选择(feature choice)

    有时会面对很多属性,不一定按照原属性进行拟合,而是应该根据实际情况对属性进行一些处理或计算。

    比如可以将两个属性相乘得到新属性

  • 多项式回归(polynomial regression)

    假设函数可能不是线性的,这时只需要构造新属性,然后在这个属性上进行拟合即可。例如拟合hθ(x)=θ0+θ1x1+θ2x12+θ3x13, 构造x1=x1,x2=(x1)2,x3=(x1)3 即可。这时,就需要注意feature scaling的问题了

展开阅读全文

没有更多推荐了,返回首页