吴恩达机器学习_第2周_多维特征

第1周:引言、单变量回归

第 3 章 多维特征

3.1 多维特征和向量化

h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n h_{\theta}(x) = \theta_0 x_0 + \theta_1 x_1 + \theta_2 x_2 + \cdots + \theta_n x_n hθ(x)=θ0x0+θ1x1+θ2x2++θnxn
此时模型中的参数是一个n+1维的向量,任何一个训练实例也都是n+1维的向量,特征矩阵X的维度是m*(n+1)。 因此公式可以简化为: h θ ( x ) = θ T X h_{\theta}(x) = \theta^T X hθ(x)=θTX.

3.2 多变量梯度下降

与单变量线性回归类似,在多变量线性回归中,我们也构建一个代价函数,则这个代价函数是所有建模误差的平方和,即
J ( θ 0 , θ 1 , … , θ n ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta_0, \theta_1, \ldots, \theta_n) = \frac{1}{2m} \sum_{i=1}^{m} \left( h_\theta (x^{(i)}) - y^{(i)} \right)^2 J(θ0,θ1,,θn)=2m1i=1m(hθ(x(i))y(i))2
其中, h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n h_{\theta}(x) = \theta_0 x_0 + \theta_1 x_1 + \theta_2 x_2 + \cdots + \theta_n x_n hθ(x)=θ0x0+θ1x1+θ2x2++θnxn
我们的目标和单变量线性回归问题中一样,是要找出使得代价函数最小的一系列参数。 多变量线性回归的批量梯度下降算法为:
Repeat \text{Repeat} Repeat{
θ j : = θ j − α ∂ J ∂ θ j J ( θ 0 , θ 1 , . . . , θ n ) \theta_j := \theta_j - \alpha \frac{\partial J}{\partial \theta_j} J(\theta_0, \theta_1, ... , \theta_n) θj:=θjαθjJJ(θ0,θ1,...,θn)
}

Repeat \text{Repeat} Repeat{
θ j : = θ j − α ∂ ∂ θ j 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 \theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j} \frac{1}{2m} \sum_{i=1}^{m} \left( h_\theta \left( x^{(i)} \right) - y^{(i)} \right)^2 θj:=θjαθj2m1i=1m(hθ(x(i))y(i))2
}

求导后得到:
Repeat \text{Repeat} Repeat{
θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j := \theta_j - \alpha \frac{1}{m} \sum_{i=1}^{m} \left(h_\theta(x^{(i)}) - y^{(i)}\right) x_{j}^{(i)} \quad θj:=θjαm1i=1m(hθ(x(i))y(i))xj(i)
(simultaneously update  θ j  for  j = 0 , 1 , … , n ) \text{(simultaneously update } \theta_j \text{ for } j=0,1,\ldots,n) (simultaneously update θj for j=0,1,,n)
}

3.3 梯度下降法实践1-特征缩放

3.3.1 目的

不进行特征缩放会很难收敛。 以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的值为 0-2000平方英尺,而房间数量的值则是0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图能,看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。
Alt
如果我们能保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛。在这里插入图片描述

3.3.2 三种scaling的方式

  • Dividing by Maximum: X i → X i m a x ( X 1 , X 2 , . . . , X n ) X_i→ \frac{X_i}{max(X_1, X_2, ... , X_n)} Ximax(X1,X2,...,Xn)Xi
  • Mean Scaling: X i → X i − μ m a x − m i n X_i → \frac{X_i - \mu}{max - min} XimaxminXiμ
  • Z-score Standardization: x n = x n − μ s , x_n=\frac{x_n-\mu}{s}, xn=sxnμ,其中 μ \mu μ 是平均值, s s s是标准差。

3.4 梯度下降法实践2-判断梯度下降是否收敛

- 通过图像判断:
在这里插入图片描述
- Automatic Convergence Test:
Let ϵ \epsilon ϵ be 1 0 − 3 10^{-3} 103. If J ( w , b ) J(w,b) J(w,b) decreases by ≤ ϵ \epsilon ϵ in one iteration, then declare convergence.

3.5 梯度下降法实践3-学习率 α \alpha α

问题: 如何选择合适的学习率大小?
当我们运行梯度算法迭代的时候,我们有时会发现代价函数J随着迭代次数的增加呈现上下摆动的趋势,这时候就要想到可能是选取了不合适的学习率。
在这里插入图片描述
例如,如果 α \alpha α选择得过大,算法就会在J的最低点处不断横跳,极坏的情况下可能会导致代价函数J会不断增大,最终无法收敛。这时候的解决方案便是减小学习率 α \alpha α

如果学习率过小,则达到收敛所需的迭代次数会非常高;
如果学习率过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。

通常可以考虑尝试些学习率: α \alpha α = 0.01, 0.03, 0.1, 0.3, 1, 3, 10.

3.6 多项式回归

房价预测问题
在这里插入图片描述

h θ ( x ) = θ 0 + θ 1 × f r o n t a g e + θ 2 × d e p t h h_{\theta}(x)=\theta_{0}+\theta_{1}\times frontage+\theta_{2}\times depth hθ(x)=θ0+θ1×frontage+θ2×depth
x 1 = f r o n t a g e ( 临街宽度 ) , x 2 = d e p t h ( 纵向深度 ) , x = f r o n t a g e ∗ d e p t h = a r e a ( 面积 ) ,则 : x_{1}=frontage(临街宽度),x_{2}=depth(纵向深度),x=frontage*depth=area(面积),则: x1=frontage(临街宽度)x2=depth(纵向深度)x=frontagedepth=area(面积),则:
h θ ( x ) = θ 0 + θ 1 x h_{\theta}(x)=\theta_{0}+\theta_{1}x hθ(x)=θ0+θ1x
线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据,比如一个二次方模型:
h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 h_{\theta}(x)=\theta_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}^{2} hθ(x)=θ0+θ1x1+θ2x22
或者三次方模型:
h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 2 + θ 3 x 3 3 h_{\theta}(x)=\theta_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}^{2}+\theta_{3}x_{3}^{3} hθ(x)=θ0+θ1x1+θ2x22+θ3x33

在这里插入图片描述

通常我们需要先观察数据然后再决定准备尝试怎样的模型。另外,我们可以令:
x 2 = x 2 2 , x 3 = x 3 3 x_{2}=x_{2}^{2},x_{3}=x_{3}^{3} x2=x22,x3=x33,从而将模型转化为线性回归模型。
根据函数图形特性,我们还可以使:
h θ ( x ) = θ 0 + θ 1 ( s i z e ) + θ 2 ( s i z e ) 2 h_{\theta}(x)=\theta_{0}+\theta_{1}(size)+\theta_{2}(size)^{2} hθ(x)=θ0+θ1(size)+θ2(size)2
或者:
h θ ( x ) = θ 0 + θ 1 ( s i z e ) + θ 2 s i z e h_{\theta}(x)=\theta_{0}+\theta_{1}(size)+\theta_{2}\sqrt{size} hθ(x)=θ0+θ1(size)+θ2size
注:如果我们采用多项式回归模型,在运行梯度下降算法前,特征缩放非常有必要。

3.7 正规方程

3.7.1 定义与计算过程

正规方程是一种用于求解线性回归模型参数的方法,它直接通过数学公式计算得出参数的解析解。以下是正规方程的计算步骤:
假设我们有以下线性回归模型:
y = X θ + ϵ y = X\theta + \epsilon y=+ϵ
其中:

  • y y y是一个大小为 ( n , 1 ) (n, 1) (n,1)的向量,表示观测到的目标值。
  • X X X是一个大小为 ( n , m ) (n, m) (n,m)的矩阵,表示特征值,每一行对应一个样本,每一列对应一个特征,并且 X X X通常包含一个全为1的列,代表截距项 θ 0 \theta_0 θ0
  • θ \theta θ是一个大小为 ( m , 1 ) (m, 1) (m,1)的向量,表示模型参数。
  • ϵ \epsilon ϵ是一个大小为 ( n , 1 ) (n, 1) (n,1)的向量,表示误差项。
    正规方程的目标是最小化平方误差,即最小化以下损失函数:
    J ( θ ) = 1 2 n ( X θ − y ) T ( X θ − y ) J(\theta) = \frac{1}{2n} (X\theta - y)^T (X\theta - y) J(θ)=2n1(y)T(y)
    为了找到使 J ( θ ) J(\theta) J(θ)最小的 θ \theta θ,我们需要对 J ( θ ) J(\theta) J(θ)关于 θ \theta θ进行求导,并令导数等于零。以下是计算步骤:
  1. 变形
    J ( θ ) = 1 2 n ( X θ − y ) T ( X θ − y ) = 1 2 n ( θ T X T − y T ) ( X θ − y ) J(\theta)=\frac{1}{2n}(X\theta-y)^T(X\theta-y)=\frac{1}{2n}(\theta^TX^T-y^T)(X\theta-y) J(θ)=2n1(y)T(y)=2n1(θTXTyT)(y)
    = 1 2 n ( θ T X T X θ − θ T X T y − y T X θ − y T y ) =\frac{1}{2n}(\theta^TX^TX\theta-\theta^TX^Ty-y^TX\theta-y^Ty) =2n1(θTXTθTXTyyTyTy)

  2. 求导
    ∂ J ( θ ) ∂ θ = ∂ ∂ θ [ 1 2 n ( θ T X T X θ − θ T X T y − y T X θ − y T y ) ] \frac{\partial J(\theta)}{\partial \theta} = \frac{\partial}{\partial \theta} \left[ \frac{1}{2n}(\theta^TX^TX\theta-\theta^TX^Ty-y^TX\theta-y^Ty)\right] θJ(θ)=θ[2n1(θTXTθTXTyyTyTy)]
    这里对矩阵求导,需要用到以下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

  3. 应用法则
    ∂ J ( θ ) ∂ θ = 1 2 n ( 2 X T X θ − X T y − ( y T X ) T − 0 ) \frac{\partial J(\theta)}{\partial \theta}=\frac{1}{2n}(2X^TX\theta-X^Ty-(y^TX)^T-0) θJ(θ)=2n1(2XTXTy(yTX)T0)
    = 1 2 n ( 2 X T X θ − X T y − X T y − 0 ) = 1 n X T X θ − X T y =\frac{1}{2n}(2X^TX\theta-X^Ty-X^Ty-0)=\frac{1}{n}X^TX\theta-X^Ty =2n1(2XTXTyXTy0)=n1XTXTy

  4. 令导数等于零
    1 n X T ( X θ − y ) = 0 \frac{1}{n} X^T (X\theta - y) = 0 n1XT(y)=0

  5. 求解 θ \theta θ
    θ = ( X T X ) − 1 X T y \theta = (X^T X)^{-1} X^T y θ=(XTX)1XTy
    这就是正规方程的解。注意,这里假设 X T X X^T X XTX是可逆的,即矩阵 X X X的列是线性独立的。如果 X X X包含一个全为1的列作为截距项,那么 X T X X^T X XTX通常总是可逆的。

3.7.2 Python代码实现

在实际应用中,计算 β \beta β时,我们会使用数值计算库(如 NumPy)来计算矩阵的逆和乘法,因为手动计算这些矩阵运算是非常复杂和耗时的。下面是一个使用 Python 和 NumPy 来计算正规方程解的简单示例:

import numpy as np

# 假设 X 是特征矩阵,y 是目标值向量
X = np.array([[1, x1], [1, x2], ..., [1, xn]])  # 包含截距项
y = np.array([y1, y2, ..., yn])

# 使用 NumPy 计算正规方程解
beta = np.linalg.inv(X.T @ X) @ X.T @ y

3.7.3 与梯度下降的比较

特性正规方程 (Normal Equation)梯度下降 (Gradient Descent)
原理一次运算,直接得出解析解多次迭代,逐步逼近最优解
计算复杂度 O ( n 3 ) O(n^3) O(n3),适用于特征较少的情况 O ( k n 2 ) O(kn^2) O(kn2),k 是迭代次数,适用于特征较多的情况
适用性特征数量较少时更有效,否则运算代价大。(通常适用n<10000)特征数量非常多时更适用
学习率不需要选择学习率需要选择合适的学习率,影响收敛速度和结果
优点一次计算得出结果,不需要迭代适用于大规模数据集,灵活性好
缺点当特征非常多时,计算量大,可能不适用需要多次迭代,学习率选择不当可能导致问题
数据要求特征不能有严重的多重共线性特征需要归一化,以保证收敛速度
局部最小值对于线性回归,正规方程总能得到全局最小值对于非线性问题,可能会卡在局部最小值

总结,只要特征变量的数目并不大,标准方程是一个很好的计算参数 θ \theta θ的替代方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值