欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > 机器学习-使用梯度下降最小化均方误差

机器学习-使用梯度下降最小化均方误差

2025/5/10 11:57:06 来源:https://blog.csdn.net/liruiqiang05/article/details/145328514  浏览:    关键词:机器学习-使用梯度下降最小化均方误差

前面有一篇文章《机器学习-常用的三种梯度下降法》,这篇文章中对于均方误差的求偏导是错误的,为了澄清这个问题,我再写一篇文章来纠正一下,避免误导大家。

一、批量梯度下降法

我们用 批量梯度下降法 来求解一个简单的 线性回归模型,找出最优参数。

假设问题:

假设我们有以下训练数据集(假设是某个小型房屋面积与价格的关系):

房屋面积 (平方英尺) x房屋价格 (万元) y
13
25
37
49

我们假设线性模型的形式为:

y=wx+b

我们的目标是找到参数 w(权重) 和 b(偏置),使得预测值 y^最接近真实值 y。

步骤 1:定义损失函数(均方误差 MSE)

批量梯度下降法的目标是最小化损失函数,常见的损失函数是 均方误差(MSE):

其中:

  • mm 是样本数量(本例中 m=4)
  • x_i 是输入特征
  • y_i 是实际输出
  • w 是模型权重,b 是偏置

步骤 2:计算损失函数的梯度

对损失函数 J(w,b)进行求导,得到偏导数(梯度):

步骤 3:更新参数公式

使用批量梯度下降法,按照以下公式更新参数:

其中:

  • α 是学习率(如 0.01 或 0.1),控制每次更新的步长
  • 梯度值表示损失函数对参数 w 和 b 的变化率

步骤 4:具体计算示例(手算)

假设初始参数:

  • w=0, b=0
  • 学习率 α=0.01
第 1 轮迭代:

计算预测值:

计算误差(预测 - 真实):

计算梯度:

更新参数:

第 2 轮迭代:

使用更新后的参数 w=0.35, b=0.12,重复上述步骤,直到参数收敛。

步骤 5:Python 代码示例

下面是使用 Python 实现批量梯度下降的简单代码:

import numpy as np# 输入数据
X = np.array([1, 2, 3, 4])  # 房屋面积
y = np.array([3, 5, 7, 9])  # 房屋价格# 初始化参数
w = 0
b = 0
learning_rate = 0.01
num_iterations = 1000  # 迭代次数# 梯度下降
m = len(X)  # 样本数量
for i in range(num_iterations):y_pred = w * X + b  # 预测值error = y_pred - y  # 误差# 计算梯度dw = (2/m) * np.sum(error * X)db = (2/m) * np.sum(error)# 更新参数w -= learning_rate * dwb -= learning_rate * dbif i % 100 == 0:loss = np.mean(error ** 2)print(f"Iteration {i}: Loss = {loss}, w = {w}, b = {b}")# 结果输出
print(f"Trained parameters: w = {w}, b = {b}")

步骤 6:应用场景

批量梯度下降适合以下情况:

  1. 数据量较小(可以快速计算整个数据集的梯度)
  2. 数据噪声较少(因为每次更新都使用完整数据,减少波动)
  3. 适用于批量处理场景,如:
    • 线性回归(如房价预测、销售预测)
    • 机器学习训练时的批处理系统

总结

  • 批量梯度下降法的特点:

    1. 每次使用 全部数据 来计算损失和梯度。
    2. 收敛速度稳定,但计算量较大,适合小数据集。
    3. 更新参数时是全局最优的方向,但容易卡在局部最优。
  • 示例回顾:
    我们通过房屋面积与价格的线性回归模型,演示了如何使用批量梯度下降一步步优化参数 w 和 b,最终使得预测值与真实值尽可能接近。

希望这个例子能帮助你理解批量梯度下降法的实际应用!

二、随机梯度下降法

用随机梯度下降法(SGD)求解线性回归模型的参数:

假设问题:

我们要拟合一个简单的线性回归模型:

y=wx+b

给定一些样本数据:

xy
13
25
37
49

目标是找到参数 w 和 b,使得均方误差(MSE)最小:

随机梯度下降法的步骤:

实际计算示例:

重复迭代过程:

接下来从数据集中随机抽取样本,比如 (x2=2,y2=5),并重复计算梯度和更新参数,直到收敛(参数变化足够小)。

总结:
  1. 批量梯度下降 一次使用所有数据计算梯度,而
  2. 随机梯度下降(SGD) 每次仅使用一个随机样本来更新参数,因此更新速度快,但震荡较大。
  3. 适用于大规模数据,能够更快接近最优解。

希望这个示例对你有所帮助!

三、再来回顾一下大一高数中导数的求法

求导步骤:

使用 链式法则 进行求导:

最终结果:

机器学习中,梯度和导数是很重要的概念,大家可以回顾一下高等数学中的微分,对于我们学习机器学习有很大的帮助。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词