机器学习笔记——线性回归

线性回归详解

机器学习笔记——线性回归

学习资源:斯坦福机器学习公开课 by Andrew Ng

0 符号说明

  • mm:训练样本个数
  • nn:样本的特征个数(特征的维度),这里先取n=1n=1
  • hθ(x)hθ(x):假设函数,hθ(x)=θ0+θ1xhθ(x)=θ0+θ1x
  • J(θ0,θ1)J(θ0,θ1):损失函数,J(θ0,θ1)=12mi=1m(hθ(x(i))y(i))2J(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2

故,x(i)jxj(i)表示第ii个样本的第j个特征值,(x(i),y(i))(x(i),y(i))为第ii个训练样例。

1 初识线性回归

这里使用 andrew Ng 老师的课件示例,先从单一特征开始

通过房子的面积和已知的售出价格,找到对应面积的最佳出售价格,训练样本见下表:

Size in feet2 (x) Price ($) in 1000’s (y)
2104 460
1416 232
1534 315
852 178

这个训练样本描出来结果如下图所示

这里写图片描述

我们希望通过这些样本,回归出一条预测曲线,如下图所示。如何保证这条线是我们需要的预测函数,引出损失函数。

这里写图片描述

损失函数:Jθ(x)=12mi=1m(hθ(x(i))y(i))2

损失函数其目的:保证假设函数对应的预测值和实际值差值平方和最小。这样就能找到满足需求的hθ(x)hθ(x),也就是我们的预测函数(预测直线)。

2 将样本特征扩展到多维

泛化考虑,给定数据集为D=(x1,y1),(x2,y2),(x3,y3),,(xn,yn)D=(x1,y1),(x2,y2),(x3,y3),⋯,(xn,yn),其中每一个样本x(i)x(i)都有n个特征(n维特征)。考虑用线性回归建立一个线性模型,针对每一个样本x(i)x(i),假设x(i)0=1x0(i)=1,则

h(x(i))=θ0+θ1x(i)1+θ2x(i)2++θnx(i)n=θTx(i)h(x(i))=θ0+θ1x1(i)+θ2x2(i)+⋯+θnxn(i)=θTx(i)

损失函数同之前Jθ(x)Jθ(x)的一样。

X=111x(1)1x(2)1x(m)1x(1)nx(2)nx(m)nX=[1x1(1)⋯xn(1)1x1(2)⋯xn(2)⋮⋮⋯⋮1x1(m)⋯xn(m)]θ=θ0θ1θnθ=[θ0θ1⋮θn]y⃗ =y0y1yny→=[y0y1⋮yn]

则,损失函数可以表示为:

Jθ(x)=12mi=1m(hθ(x(i))y(i))2=12m(Xθy⃗ )T(Xθy⃗ )Jθ(x)=12m∑i=1m(hθ(x(i))−y(i))2=12m(Xθ−y→)T(Xθ−y→)

3 如何最小化Jθ(x)Jθ(x)-梯度下降法

简述:利用求导数的思想,寻找斜率方向(梯度反方向)的极值点,每迭代一次找到一个极值点(极小值),直到损失函数不在继续变小(变小的范围在可接受的阈值范围内)。

如下图所示,下图为只有一个特征的情况,损失函数应用梯度下降算法后J的变化

这里写图片描述

回忆之前的单一特征的线性回归模型

hθ(x)=θ0+θ1xhθ(x)=θ0+θ1x

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

J(θ)J(θ)进行求导,可得

θ0J(θ0,θ1)=1mi=1m(hθ(x(i))y(i))∂∂θ0J(θ0,θ1)=1m∑i=1m(hθ(x(i))−y(i))

θ1J(θ0,θ1)=1mi=1m(hθ(x(i))y(i))x(i)∂∂θ1J(θ0,θ1)=1m∑i=1m(hθ(x(i))−y(i))x(i)

则可以开始迭代了,直到θθ变化极小为止

θ0:=θ01mi=1m(hθ(x(i))y(i))θ0:=θ0−1m∑i=1m(hθ(x(i))−y(i))

θ1:=θ11mi=1m(hθ(x(i))y(i))x(i)θ1:=θ1−1m∑i=1m(hθ(x(i))−y(i))x(i)

设学习率为αα,则算法描述为:

temp0:=θ0αθ0J(θ0,θ1)temp1:=θ1αθ1J(θ0,θ1)θ0:=temp0θ1:=temp1temp0:=θ0−α∂∂θ0J(θ0,θ1)temp1:=θ1−α∂∂θ1J(θ0,θ1)θ0:=temp0θ1:=temp1

MATLAB代码如下:

m = length(y);
J = zeros(m, 1);

for iter = 1 : num_iters
    J = X * theta - y;
    temp1 = theta(1) - alpha * (1/m) * sum(J .* X(:, 1));
    temp2 = theta(2) - alpha * (1/m) * sum(J .* X(:, 2));
    theta(1) = temp1;
    theta(2) = temp2;
end

将其泛化:

θj:=θjαmi=1m(hθ(x(i)j)y(i))x(i)jθj:=θjαmi=1mx(i)j(hθ(x(i)j)y(i))θj:=θj−αm∑i=1m(hθ(xj(i))−y(i))xj(i)θj:=θj−αm∑i=1mxj(i)(hθ(xj(i))−y(i))

由前面X的定义,对上式进行向量化:

θ:=θαmXT(Xθy⃗ )θ:=θ−αmXT(Xθ−y→)

则前面的代码可以简化,同时多维特征下面这种方法也适用:

m = length(y);
J_history = zeros(num_iters, 1);

for iter = 1 : num_iters
    theta = theta - alpha / m * X' * (X * theta - y);
end

4 Normal Equation

对于特征维数不多的情况下,用正规方程求解更迅速。推导如下:
损失函数:Jθ(x)=12mi=1m(hθ(x(i))y(i))2Jθ(x)=12m∑i=1m(hθ(x(i))−y(i))2

向量化化简:Jθ(x)=12m(Xθy⃗ )T(Xθy⃗ )Jθ(x)=12m(Xθ−y→)T(Xθ−y→)

由于是求导取极值,则系数可以省去,故上式可继续化简:

J(θ)=12(Xθy⃗ )T(Xθy⃗ )J(θ)=12(θTXTXθθTXTyyTXθyTy)J(θ)=12(Xθ−y→)T(Xθ−y→)J(θ)=12(θTXTXθ−θTXTy−yTXθ−yTy)

则,θJ(θ)∂∂θJ(θ)化简为

参考该图:

这里写图片描述

θJ(θ)=XTXθXTy=0∂∂θJ(θ)=XTXθ−XTy=0

则找到对应最小值的J:θ=(XTX)1XTyθ=(XTX)−1XTy

matlab代码见下:

theta = pinv( X' * X ) * X' * y;

5 特征归一化

Idea: Make sure features are on a similar scale.

如何实现,对于某一个特征:xi=xiuiδixi=xi−uiδi

其中,uu为均值,δ为标准差。一般保证范围在1xi1−1≤xi≤1附近。

除了这些,分母也可以用最值差。

6 学习率和多项式回归

学习率αα一般保证合理的范围。下面给出了一个设定的参考范围。

,0.001,,0.01,,0.1,,1,⋯,0.001,⋯,0.01,⋯,0.1,⋯,1,⋯

一般先扫面几个段的效果,然后以三倍的倍数进行递增。

多项式回归如下式所示

hθ(x)=θ0+θ1x+θ2x2hθ(x)=θ0+θ1x+θ2x2

如果无法收敛,需要注意形式,如上式可以改成下式

hθ(x)=θ0+θ1x+θ2xhθ(x)=θ0+θ1x+θ2x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值