【吴恩达系列】machine learning课程week2----多变量线性回归(梯度下降/正规方程)

多变量线性回归

1. 模型表示

     h θ ( x ) = θ 0 x 0 + θ 1 x 1 + ⋯ + θ n x n = θ T x h_\theta (x) = \theta_0 x_0+ \theta_1 x_1 + \dots + \theta_n x_n = \theta^T x hθ(x)=θ0x0+θ1x1++θnxn=θTx   with x 0 = 1 x_0=1 x0=1
线性函数:当函数满足以下两个性质,就被称为线性函数
- 齐次性: f ( a x ) = a f ( x ) f(ax)=af(x) f(ax)=af(x)
- 可加性: f ( x + y ) = f ( x ) + f ( y ) f(x+y)=f(x)+f(y) f(x+y)=f(x)+f(y)

2. 梯度下降法

  1. 直线方程假设
            h θ ( x ) = θ 0 x 0 + θ 1 x 1 + ⋯ + θ n x n = θ T x h_\theta (x) = \theta_0 x_0+ \theta_1 x_1 + \dots + \theta_n x_n = \theta^T x hθ(x)=θ0x0+θ1x1++θnxn=θTx
  2. 损失函数定义(最小均方误差 Least Mean Square):
            J ( θ ) = 1 2 m ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) 2 = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta)=\frac{1}{2m}\sum_{i=1}^m (\hat y^{(i)}−y^{(i)})^2=\frac{1}{2m}\sum_{i=1}^m (h_\theta(x^{(i)})−y^{(i)})^2 J(θ)=2m1i=1m(y^(i)y(i))2=2m1i=1m(hθ(x(i))y(i))2
    其中, x ( i ) x^{(i)} x(i)第i个训练数据的特征向量。
    ⚠️选择该形式的原因: 最大似然估计 链接
           假设 y ( i ) = θ T x ( i ) + ϵ ( i ) y^{(i)}=\theta^Tx^{(i)}+\epsilon^{(i)} y(i)=θTx(i)+ϵ(i),且 ϵ ( i ) ∼ N ( 0 , σ 2 ) \epsilon^{(i)} \sim \mathcal N (0,\sigma^2) ϵ(i)N(0,σ2)
  3. 优化目标
            arg ⁡ m i n θ J ( θ ) \arg min_{\theta} J(\theta) argminθJ(θ)
2.1 梯度下降更新

在一组(x,y)情况下计算 ∂ ∂ θ j J ( θ ) \frac{\partial}{\partial \theta_j}J(\theta) θjJ(θ)
        ∂ ∂ θ j J ( θ ) = ∂ ∂ θ j 1 2 ( h θ ( x ) − y ) 2 = 2 2 ( h θ ( x ) − y ) ∂ ∂ θ j ( h θ ( x ) − y ) \frac{\partial}{\partial \theta_j}J(\theta)=\frac{\partial}{\partial \theta_j}\frac{1}{2}(h_\theta(x)-y)^2=\frac{2}{2}(h_\theta(x)-y)\frac{\partial}{\partial \theta_j}(h_\theta(x)-y) θjJ(θ)=θj21(hθ(x)y)2=22(hθ(x)y)θj(hθ(x)y)
                        = ( h θ ( x ) − y ) ∂ ∂ θ j ( ∑ i n θ i x i − y ) = ( h θ ( x ) − y ) x j =(h_\theta(x)-y)\frac{\partial}{\partial \theta_j}(\sum^n_i\theta_i x_i-y)=(h_\theta(x)-y)x_j =(hθ(x)y)θj(inθixiy)=(hθ(x)y)xj

  1. 批量梯度下降法(batch gradient descent):在每一个步长内检查所有整个训练集中的所有样本

重复直到收敛:
       θ j : = θ j − α ∂ ∂ θ j J ( θ ) = θ 0 − α 1 m ∑ i = 1 m [ ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) ] \theta_j:=\theta_j-\alpha \frac{\partial}{\partial \theta_j} J(\theta)=\theta_0 - \alpha \frac{1}{m} \sum^m_{i=1}[(h_\theta(x^{(i)})- y^{(i)})x^{(i)}_j] θj:=θjαθjJ(θ)=θ0αm1i=1m[(hθ(x(i))y(i))xj(i)]    (对每个j)

⚠️ j j j迭代完(所有 θ \theta θ向量更新完)才更新 J ( θ ) J(\theta) J(θ)的值。

  1. 随机梯度下降法(stochastic gradient descent):每次更新 θ j \theta_j θj只需要一个样本 ( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i))

重复直到收敛:
       for i : = 1 : m i:=1:m i:=1:m
               θ j : = θ j − α ∂ ∂ θ j J ( θ ) = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j:=\theta_j−\alpha \frac{\partial}{\partial \theta_j} J(\theta)=\theta_0 − \alpha \frac{1}{m} \sum^m_{i=1} (h_\theta(x^{(i)})−y^{(i)})x^{(i)}_j θj:=θjαθjJ(θ)=θ0αm1i=1m(hθ(x(i))y(i))xj(i)    (对每个j)

  1. 二者总结
手段概括优点缺点
批量梯度下降法尽可能减小训练样本的总的预测代价能够获得最优解,支持并行计算样本容量较大时,性能显著下降
随机梯度下降法尽可能的减小每个训练样本的预测代价训练速度快并不一定能获得全局最优,经常出现抖动和噪音,且不能通过并行计算优化
2.2 特征缩放(Standardization)

数据归一化方法
θ \theta θ在小范围内会迅速下降,而在大范围内会缓慢下降,因此当变量非常不均匀时,会无效率地振荡到最佳状态。
通过特征缩放,能够使得训练过程更加有效的收敛。
       特征缩放:将所有特征的尺度都尽量缩放到-1 到 1 之间。
特征缩放+均值归一化,量化后的特征将服从标准正态分布
        x i = x i − μ i s i x_i=\frac{x_i-\mu_i}{s_i} xi=sixiμi
其中 μ \mu μ x x x向量元素的平均值, s i s_i si是最大值-最小值(Min-Max Normalization)或者标准偏差(Z-score standardization)( s = 1 m ∑ 1 m ( x i − μ ) 2 s=\sqrt{\frac{1}{m}\sum^m_1 (x_i-\mu)^2} s=m11m(xiμ)2 )。

  • 拓展Normalization
    量化后的特征将分布在 [0,1]区间。
            x i = x i − m i n ( x ) m a x ( x ) − m i n ( x ) x_i=\frac{x_i-min(x)}{max(x)-min(x)} xi=max(x)min(x)ximin(x)
2.3 学习率 α \alpha α
  1. α \alpha α过小,达到收敛所需的迭代次数会非常高;
  2. α \alpha α过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛,甚至可能发散,有时候也会出现收敛过慢。
           通常可以考虑尝试这些学习率: α \alpha α = 0.001,0.003, 0.01,0.03,0.1,0.3,1
2.4 判断收敛
  1. 绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛
  2. 自动测试是否收敛的方法,例如将代价函数的变化值与某个阀值(例如 0.001)进行比较,但通常看上面这样的图表更好。
2.5 特征和多项式回归
  1. 通过观察和推测去选取和构造特征
  2. 多项式回归模型的一般形式
    设最高次方的次数为n,且只有一个特征时: h ( θ ) = θ 0 + θ 1 x + θ 2 x 2 + ⋯ + θ n x n h(\theta) = \theta_0 + \theta_1 x + \theta_2 x^2 + \dots + \theta_n x^n h(θ)=θ0+θ1x+θ2x2++θnxn如果采用多项式回归模型,在运行梯度下降算法前,特征缩放非常有必要。
    多项式回归仍是参数 θ \theta θ的线性模型。

3. 正规方程法

  1. 直线方程假设
            h θ ( x ) = ( x 1 T x 2 T ⋮ x m T ) ⋅ ( θ 0 θ 1 ⋮ θ n ) = X ⋅ Θ h_\theta (x) = \begin{pmatrix} x_1^T \\ x_2^T \\ \vdots \\ x_m^T \end{pmatrix}· \begin{pmatrix} \theta_0 \\ \theta_1 \\ \vdots \\ \theta_n \end{pmatrix} = X · \Theta hθ(x)=x1Tx2TxmTθ0θ1θn=XΘ   其中m个样本,每个样本有n个特征, x j x_j xj第j个训练样本。
  2. 代价函数定义
            J ( Θ ) = 1 2 m ( X ⋅ Θ − Y ) 2 = 1 2 m ( X ⋅ Θ − Y ) T ( X ⋅ Θ − Y ) J(\Theta)=\frac{1}{2m} (X · \Theta−Y)^2 = \frac{1}{2m} (X · \Theta−Y)^T (X · \Theta−Y) J(Θ)=2m1(XΘY)2=2m1(XΘY)T(XΘY)
    其中, x ( i ) x^{(i)} x(i)第i个训练数据的特征向量。
  3. 优化目标
            arg ⁡ m i n Θ J ( Θ ) ⇒ ∂ ∂ Θ J ( Θ ) = 0 \arg min_{\Theta} J(\Theta) \Rightarrow \frac{\partial}{\partial \Theta} J(\Theta) = 0 argminΘJ(Θ)ΘJ(Θ)=0
3.1 推导
  1. J ( Θ ) = 1 2 m ( X Θ − Y ) T ( X Θ − Y ) = 1 2 m ( Θ T X T − Y T ) ( X Θ − Y ) J(\Theta)=\frac{1}{2m} (X \Theta−Y)^T (X \Theta−Y)=\frac{1}{2m} (\Theta^T X^T−Y^T) (X \Theta−Y) J(Θ)=2m1(XΘY)T(XΘY)=2m1(ΘTXTYT)(XΘY)
                = 1 2 m ( Θ T X T X Θ − Θ T X T Y − Y T X Θ − Y T Y ) =\frac{1}{2m}(\Theta^TX^TX\Theta-\Theta^TX^TY-Y^TX\Theta-Y^TY) =2m1(ΘTXTXΘΘTXTYYTXΘYTY)
  2. 已知 d A B d B = A T \frac{dAB}{dB}=A^T dBdAB=AT d X T A X d X = 2 A X \frac{dX^TAX}{dX}=2AX dXdXTAX=2AX
    ∂ ∂ Θ J ( Θ ) = 1 2 m ( 2 X T X Θ − X T Y − ( Y T X ) T − 0 ) \frac{\partial}{\partial \Theta}J(\Theta) = \frac{1}{2m}(2X^TX\Theta-X^TY-(Y^TX)^T-0) ΘJ(Θ)=2m1(2XTXΘXTY(YTX)T0)
                      = X T X Θ − X T Y =X^TX\Theta - X^TY =XTXΘXTY
  3. ∂ ∂ Θ J ( Θ ) = 0    ⇒    Θ = ( X T X ) − 1 X T Y \frac{\partial}{\partial \Theta}J(\Theta) =0 \ \ \Rightarrow \ \ \Theta = (X^TX)^{-1}X^TY ΘJ(Θ)=0    Θ=(XTX)1XTY

Θ = ( X T X ) − 1 X T Y \Theta = (X^TX)^{-1}X^TY Θ=(XTX)1XTY

⚠️另一种与trace有关的推导过程

3.2 可逆性

求解 ( X T X ) − 1 (X^TX)^{-1} (XTX)1

  1. 不可逆矩阵(奇异或退化矩阵)
    一般出现不可逆有两种情况:
    • 列向量线性相关,即训练集中存在冗余特征,此时应该剔除掉多余特征;
    • 特征过多,此时应该去掉影响较小的特征,或使用正则化;当样本总数 m 小于等于特征数量 n 时, ( X T X ) − 1 (X^TX)^{-1} (XTX)1一定不可逆。

4. 梯度下降正规方程对比

梯度下降正规方程
需要选择适当的学习率 α \alpha α不要学习率 α \alpha α
需要进行多步迭代不需要进行迭代,在 Matlab 等平台上,矩阵运算仅需一行代码就可完成
对多特征适应性较好,能在特征数量很多时仍然工作良好算法复杂度为 O(n3),所以如果特征维度太高(特别是超过 10000 维),那么不宜再考虑该方法
能应用到一些更加复杂的算法中,如逻辑回归(Logic Regression)矩阵需要可逆,并且,对于一些更复杂的算法,该方法无法工作

5. 局部加权线性回归

解释
代码

6. 代码

6.1 Python代码

代码地址待后续补充

  1. 代价函数:
            J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta)=\frac{1}{2m}\sum_{i=1}^m (h_\theta(x^{(i)})−y^{(i)})^2 J(θ)=2m1i=1m(hθ(x(i))y(i))2
    其中 h θ ( x ) = θ 0 x 0 + θ 1 x 1 + ⋯ + θ n x n = θ T x h_\theta (x) = \theta_0 x_0+ \theta_1 x_1 + \dots + \theta_n x_n = \theta^T x hθ(x)=θ0x0+θ1x1++θnxn=θTx
def computeCost(X, y, theta):
	inner = np.power(((X * theta.T) - y), 2) 
	return np.sum(inner) / (2 * len(X))
  1. 正规方程
            Θ = ( X T X ) − 1 X T Y \Theta = (X^TX)^{-1}X^TY Θ=(XTX)1XTY
import numpy as np def normalEqn(X, y):
theta = np.linalg.inv(X.T@X)@X.T@y  #X.T@X 等价于 X.T.dot(X) 
return theta
6.2 Matlab代码

github地址

7. 参考资料

csdn笔记
gitbook笔记
cs229笔记
课程翻译

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值