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

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

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

0 符号说明

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

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

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 = ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) , ⋯ , ( x n , y n ) ,其中每一个样本 x(i) x ( i ) 都有n个特征(n维特征)。考虑用线性回归建立一个线性模型,针对每一个样本 x(i) x ( i ) ,假设 x(i)0=1 x 0 ( i ) = 1 ,则

h(x(i))=θ0+θ1x(i)1+θ2x(i)2++θnx(i)n=θTx(i) h ( x ( i ) ) = θ 0 + θ 1 x 1 ( i ) + θ 2 x 2 ( i ) + ⋯ + θ n x n ( i ) = θ T x ( i )

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

X=111x(1)1x(2)1x(m)1x(1)nx(2)nx(m)n X = [ 1 x 1 ( 1 ) ⋯ x n ( 1 ) 1 x 1 ( 2 ) ⋯ x n ( 2 ) ⋮ ⋮ ⋯ ⋮ 1 x 1 ( m ) ⋯ x n ( m ) ] θ=θ0θ1θn θ = [ θ 0 θ 1 ⋮ θ n ] y⃗ =y0y1yn y → = [ y 0 y 1 ⋮ y n ]

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

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

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

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

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

这里写图片描述

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

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

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

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

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

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

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

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

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

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

temp0:=θ0αθ0J(θ0,θ1)temp1:=θ1αθ1J(θ0,θ1)θ0:=temp0θ1:=temp1 t e m p 0 := θ 0 − α ∂ ∂ θ 0 J ( θ 0 , θ 1 ) t e m p 1 := θ 1 − α ∂ ∂ θ 1 J ( θ 0 , θ 1 ) θ 0 := t e m p 0 θ 1 := t e m p 1

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 = 1 m ( h θ ( x j ( i ) ) − y ( i ) ) x j ( i ) θ j := θ j − α m ∑ i = 1 m x j ( i ) ( h θ ( x j ( i ) ) − y ( i ) )

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

θ:=θαmXT(Xθy⃗ ) θ := θ − α m X T ( 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))2 J θ ( x ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2

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

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

J(θ)=12(Xθy⃗ )T(Xθy⃗ )J(θ)=12(θTXTXθθTXTyyTXθyTy) J ( θ ) = 1 2 ( X θ − y → ) T ( X θ − y → ) J ( θ ) = 1 2 ( θ T X T X θ − θ T X T y − y T X θ − y T y )

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

参考该图:

这里写图片描述

θJ(θ)=XTXθXTy=0 ∂ ∂ θ J ( θ ) = X T X θ − X T y = 0

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

matlab代码见下:

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

5 特征归一化

Idea: Make sure features are on a similar scale.

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

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

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

6 学习率和多项式回归

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

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

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

多项式回归如下式所示

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值