简介
梯度下降是多元线性回归的主流优化方法,具有普适性和可扩展性,而标准方程法适用于特定场景。实际应用中需结合特征工程和参数调优提升模型性能。本篇不复盘参数调优。
1.多元线性回归模型
多元线性回归模型假设因变量 与多个自变量
之间存在线性关系,其数学表达式为:
其中
是特征权重,
是偏置项。为了方便表示,我们可以使用向量形式:
则模型可以写成:
2. 代价函数
为了衡量模型预测值与真实值之间的差异,我们通常使用均方误差(Mean Squared Error, MSE)作为代价函数:
其中 是样本数量,
是第
个样本的真实值,
是第
个样本的预测值,即:
3. 梯度下降更新规则
梯度下降的核心思想是沿着代价函数的负梯度方向更新参数,以逐步减小代价函数的值。具体来说,我们需要计算代价函数 关于参数
和
的偏导数,然后根据偏导数更新参数。
3.1 计算偏导数
关于 的偏导数:
其中 是第
个样本的第
个特征值。
关于 的偏导数:
3.2 更新参数
在每次迭代中,我们使用以下更新规则来更新参数 和
:
- 更新 :
- 更新 \(b\):
其中 是学习率,控制每次迭代中参数更新的步长。学习率过大可能导致算法无法收敛,学习率过小则会导致收敛速度过慢。
4. 梯度下降的步骤
1. 初始化参数:
随机初始化权重 和偏置
。
2. 计算预测值:
根据当前的参数和
,计算每个样本的预测值
。
3. 计算偏导数:
根据上述公式计算代价函数关于 和
的偏导数。
4. 更新参数:
根据偏导数和学习率更新参数 和
。
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)
概括总结
梯度下降是一种简单而有效的优化算法,通过不断更新参数来最小化代价函数。在多元线性回归中,我们可以使用梯度下降来寻找最优的权重和偏置。需要注意的是,学习率的选择对算法的收敛性和性能有重要影响,需要进行适当的调整。简要核心过程是以下部分
使用向量符号将多元线性回归模型简化为
其中
是特征权重向量,
是特征向量,
是偏置项。
梯度下降更新规则
代价函数对
和
的偏导分别为
参数更新规则:
标准方程法(对比
直接通过矩阵运算求解最优参数,无需迭代。
缺点:无法推广到其他算法(如逻辑回归),计算复杂度高,适用于特征数较少的场景。
线性回归细节处理补充
特征缩放原理
比如房价预测:
问题背景
- 两个特征取值范围差异大:面积(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. 验证与调参: 通过交叉验证或验证集监控损失变化,选择使模型泛化能力最佳的学习率。
总结
学习率是模型训练的关键,直接影响模型的收敛速度和最终性能。在实际应用中,需要结合问题复杂度、数据规模和优化算法特性,通过实验找到最佳值。说白点,就是不断调。