吴恩达机器学习笔记复盘(八)多元线性回归的梯度下降

简介

梯度下降是多元线性回归的主流优化方法,具有普适性和可扩展性,而标准方程法适用于特定场景。实际应用中需结合特征工程和参数调优提升模型性能。本篇不复盘参数调优。

1.多元线性回归模型

多元线性回归模型假设因变量 y与多个自变量 x_1, x_2, \cdots, x_n之间存在线性关系,其数学表达式为: y = w_1x_1 + w_2x_2 + \cdots + w_nx_n + b其中 w_1, w_2, \cdots, w_n是特征权重,b是偏置项。为了方便表示,我们可以使用向量形式:

\mathbf{W} = \begin{bmatrix} w_1 \\ w_2 \\ \vdots \\ w_n \end{bmatrix}, \quad \mathbf{X} = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{bmatrix}

则模型可以写成:

y = \mathbf{W}^T\mathbf{X} + b

2. 代价函数

为了衡量模型预测值与真实值之间的差异,我们通常使用均方误差(Mean Squared Error, MSE)作为代价函数:J(\mathbf{W}, b) = \frac{1}{2m} \sum_{i=1}^{m} (y^{(i)} - \hat{y}^{(i)})^2

其中 m是样本数量,y^{(i)}是第i个样本的真实值,\hat{y}^{(i)}是第 i个样本的预测值,即:

\hat{y}^{(i)} = \mathbf{W}^T\mathbf{X}^{(i)} + b

3. 梯度下降更新规则

梯度下降的核心思想是沿着代价函数的负梯度方向更新参数,以逐步减小代价函数的值。具体来说,我们需要计算代价函数 J(\mathbf{W}, b) 关于参数\mathbf{W}b的偏导数,然后根据偏导数更新参数。

3.1 计算偏导数

关于 w_j的偏导数:

\frac{\partial J(\mathbf{W}, b)}{\partial w_j} = \frac{1}{m} \sum_{i=1}^{m} (\hat{y}^{(i)} - y^{(i)}) x_j^{(i)}

其中 x_j^{(i)}是第 i个样本的第 j个特征值。

关于 b的偏导数:

\frac{\partial J(\mathbf{W}, b)}{\partial b} = \frac{1}{m} \sum_{i=1}^{m} (\hat{y}^{(i)} - y^{(i)})

3.2 更新参数

在每次迭代中,我们使用以下更新规则来更新参数\mathbf{W}b

- 更新 w_j

w_j := w_j - \alpha \frac{\partial J(\mathbf{W}, b)}{\partial w_j}

- 更新 \(b\):

b := b - \alpha \frac{\partial J(\mathbf{W}, b)}{\partial b}

其中 \alpha是学习率,控制每次迭代中参数更新的步长。学习率过大可能导致算法无法收敛,学习率过小则会导致收敛速度过慢。

4. 梯度下降的步骤

1. 初始化参数:

随机初始化权重 \mathbf{W}和偏置 b

2. 计算预测值:

根据当前的参数\mathbf{W}b,计算每个样本的预测值\hat{y}^{(i)}

3. 计算偏导数:

根据上述公式计算代价函数关于 \mathbf{W}b的偏导数。

4. 更新参数:

根据偏导数和学习率更新参数 \mathbf{W}b

5. 重复步骤 2 - 4:

直到满足停止条件,例如达到最大迭代次数或代价函数的变化小于某个阈值。

5. 代码示例

以下是一个使用梯度下降实现多元线性回归的 Python 代码示例:

import numpy as np

# 生成一些示例数据
np.random.seed(42)
X = np.random.rand(100, 3)
y = 2 * X[:, 0] + 3 * X[:, 1] + 4 * X[:, 2] + np.random.randn(100) * 0.1

# 初始化参数
W = np.zeros(X.shape[1])
b = 0

# 定义超参数
learning_rate = 0.01
num_iterations = 1000

# 梯度下降
for iteration in range(num_iterations):
    # 计算预测值
    y_pred = np.dot(X, W) + b
    
    # 计算误差
    error = y_pred - y
    
    # 计算偏导数
    dW = (1 / X.shape[0]) * np.dot(X.T, error)
    db = (1 / X.shape[0]) * np.sum(error)
    
    # 更新参数
    W = W - learning_rate * dW
    b = b - learning_rate * db

# 输出最终参数
print("最终权重:", W)
print("最终偏置:", b)

概括总结

梯度下降是一种简单而有效的优化算法,通过不断更新参数来最小化代价函数。在多元线性回归中,我们可以使用梯度下降来寻找最优的权重和偏置。需要注意的是,学习率的选择对算法的收敛性和性能有重要影响,需要进行适当的调整。简要核心过程是以下部分

使用向量符号将多元线性回归模型简化为

F_{W,b}(X) = W \cdot X + b其中 W是特征权重向量,X是特征向量,b是偏置项。

梯度下降更新规则

代价函数J(W, b)Wb的偏导分别为

\frac{\partial J}{\partial W_j} = \frac{1}{m} \sum_{i=1}^m (F_{W,b}(X^{(i)}) - Y^{(i)}) X_j^{(i)}

\frac{\partial J}{\partial b} = \frac{1}{m} \sum_{i=1}^m (F_{W,b}(X^{(i)}) - Y^{(i)})

参数更新规则:

W_j := W_j - \alpha \cdot \frac{\partial J}{\partial W_j}

b := b - \alpha \cdot \frac{\partial J}{\partial b}

 标准方程法(对比 

直接通过矩阵运算求解最优参数,无需迭代。

缺点:无法推广到其他算法(如逻辑回归),计算复杂度高O(n^3),适用于特征数较少的场景。

线性回归细节处理补充

特征缩放原理

比如房价预测:

问题背景

- 两个特征取值范围差异大:面积(300-2000平方英尺)vs 卧室数量(0-5间)

。 - 不同特征范围导致参数权重差异显著(如w1需更小,w2需更大)。

未缩放的影响

 - 成本函数等高线呈狭长椭圆形,梯度下降容易来回震荡,收敛缓慢。

- 举例:面积参数w1的微小变化会显著影响预测结果,而卧室参数w2需更大调整才起作用。

特征缩放的作用

 - 将特征缩放到相似范围(如0-1),使等高线更接近圆形。 - 梯度下降能更直接地朝全局最小值移动,大幅提升收敛速度。

核心结论

 - 特征缩放是解决特征值范围差异的关键预处理步骤。

- 推荐方法:归一化(Normalization)或标准化(Standardization)。 视频最后预告了下一期将具体介绍特征缩放的实现方法。

特征缩放解决方法

归一化(Normalization)

 - 方法:将特征值除以最大值,使范围缩放到0-1。

- 示例:面积300-2000平方英尺 → 除以2000;卧室数0-5 → 除以5。

- 效果:简单快速,适合特征范围明确的场景。

均值归一化(Mean Normalization)

- 步骤:

① 计算特征均值(μ)

② 计算范围(max - min)

③ 缩放公式:`(x - μ) / (max - min)`

- 示例:

面积均值600,范围1700 → `(x-600)/1700`,结果-0.18~0.82。

- 效果:数据以0为中心,适合对称分布的特征。

Z-score归一化(Standardization)

 - 步骤:

① 计算均值(μ)和标准差(σ)

② 缩放公式:`(x - μ) / σ`

- 示例:面积μ=600,σ=150 → `(x-600)/150`,结果-2~9.3。

- 效果:适合正态分布数据,使特征符合标准正态分布。

关键原则

- 目标是让特征值范围在-1~1之间(可放宽至-3~3)。

- 对取值范围过大(如体温98.6-105°F)或过小的特征,缩放能显著提升梯度下降效率。

- 缩放后的数据会使成本函数等高线更接近圆形,减少震荡,加速收敛。

实践建议

- 优先对数值型特征进行缩放。

- 测试不同缩放方法对模型的影响。

- 当不确定时,建议执行特征缩放。 

线性回归的学习率(Learning Rate)

之前偷懒,把学习率和特征工程跳过了。细想一下不应该,会影响以后的复习,回来补一下。

在机器学习中,学习率(Learning Rate)优化算法(如梯度下降)中的一个重要超参数,用于控制模型参数更新的速度。它决定了每次迭代中参数向梯度反方向移动的步长。

学习率的作用 

1. 参数更新

 在线性回归的梯度下降优化过程中,模型参数(如权重 w 和偏置 b)的更新公式为:

w = w - learning_rate * gradient_w
b = b - learning_rate * gradient_b

学习率直接决定了每次更新的幅度。

2. 平衡收敛速度与稳定性

- 学习率过大:可能跳过最优解,导致模型震荡甚至发散。

- 学习率过小:收敛速度过慢,容易陷入局部最优(尤其在复杂模型中)。

- 学习率的影响示例

 假设目标是最小化损失函数(如均方误差),不同学习率的效果如下:

- 过大的学习率:  参数更新剧烈,损失波动大,可能无法收敛

 - 合适的学习率: 损失平稳下降,快速收敛到最优解。

- 过小的学习率:  收敛缓慢,可能陷入局部最优。 ### **如何选择学习率?

1. 经验值: 通常从较小值(如 0.01, 0.001)开始尝试,逐步调整。

2. 自适应调整策略:

- 动态学习率:在训练过程中逐渐降低学习率(如指数衰减、余弦退火)。

- 自适应算法:使用 Adam、RMSprop 等优化器,自动调整学习率。

3. 验证与调参: 通过交叉验证或验证集监控损失变化,选择使模型泛化能力最佳的学习率。

总结

 学习率是模型训练的关键,直接影响模型的收敛速度和最终性能。在实际应用中,需要结合问题复杂度、数据规模和优化算法特性,通过实验找到最佳值。说白点,就是不断调。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值