机器学习笔记——线性回归
学习资源:斯坦福机器学习公开课 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)=12m∑i=1m(hθ(x(i))−y(i))2J(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2
故,x(i)jxj(i)表示第ii个样本的第个特征值,(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 |
… | … |
这个训练样本描出来结果如下图所示

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

损失函数:
损失函数其目的:保证假设函数对应的预测值和实际值差值平方和最小。这样就能找到满足需求的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,则
损失函数同之前Jθ(x)Jθ(x)的一样。
令X=⎡⎣⎢⎢⎢⎢⎢⎢11⋮1x(1)1x(2)1⋮x(m)1⋯⋯⋯⋯x(1)nx(2)n⋮x(m)n⎤⎦⎥⎥⎥⎥⎥⎥X=[1x1(1)⋯xn(1)1x1(2)⋯xn(2)⋮⋮⋯⋮1x1(m)⋯xn(m)],θ=⎡⎣⎢⎢⎢⎢θ0θ1⋮θn⎤⎦⎥⎥⎥⎥θ=[θ0θ1⋮θn],y⃗ =⎡⎣⎢⎢⎢⎢y0y1⋮yn⎤⎦⎥⎥⎥⎥y→=[y0y1⋮yn]。
则,损失函数可以表示为:
3 如何最小化Jθ(x)Jθ(x)-梯度下降法
简述:利用求导数的思想,寻找斜率方向(梯度反方向)的极值点,每迭代一次找到一个极值点(极小值),直到损失函数不在继续变小(变小的范围在可接受的阈值范围内)。
如下图所示,下图为只有一个特征的情况,损失函数应用梯度下降算法后J的变化

回忆之前的单一特征的线性回归模型
hθ(x)=θ0+θ1xhθ(x)=θ0+θ1x
Jθ(x)=12m∑i=1m(hθ(x(i))−y(i))2Jθ(x)=12m∑i=1m(hθ(x(i))−y(i))2
对J(θ)J(θ)进行求导,可得
∂∂θ0J(θ0,θ1)=1m∑i=1m(hθ(x(i))−y(i))∂∂θ0J(θ0,θ1)=1m∑i=1m(hθ(x(i))−y(i))
∂∂θ1J(θ0,θ1)=1m∑i=1m(hθ(x(i))−y(i))x(i)∂∂θ1J(θ0,θ1)=1m∑i=1m(hθ(x(i))−y(i))x(i)
则可以开始迭代了,直到θθ变化极小为止
θ0:=θ0−1m∑i=1m(hθ(x(i))−y(i))θ0:=θ0−1m∑i=1m(hθ(x(i))−y(i))
θ1:=θ1−1m∑i=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−αm∑i=1m(hθ(x(i)j)−y(i))x(i)jθj:=θj−αm∑i=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)=12m∑i=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(θ)∂∂θJ(θ)化简为
参考该图:

则找到对应最小值的J:θ=(XTX)−1XTyθ=(XTX)−1XTy
matlab代码见下:
theta = pinv( X' * X ) * X' * y;
5 特征归一化
Idea: Make sure features are on a similar scale.
如何实现,对于某一个特征:xi=xi−uiδixi=xi−uiδi
其中,uu为均值,为标准差。一般保证范围在−1≤xi≤1−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+θ2x−−√hθ(x)=θ0+θ1x+θ2x