You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

梯度下降算法实现求助:迭代增加时参数w和c持续增大

梯度下降参数持续增大问题排查

你的代码存在两个核心错误,直接导致参数w、c随迭代次数不断发散:

1. 未定义的变量l

更新w的公式中,你写了np.sum(l * (y - y_calc)),但整个代码里从未定义过l变量。线性回归中对w的梯度计算,正确公式应该是(1/p) * np.sum(x * (y - y_calc))——这里的x是输入特征,显然你是把x误写成了l。如果运行时l被意外赋值为负数(比如l=-1),梯度更新方向会完全反转,导致参数不断增大而非收敛。

2. 输入数据类型错误

你的x和y是普通Python列表,直接执行w * x会触发列表重复操作(而非逐元素相乘),计算出的y_calc完全错误,梯度方向偏离正确路径,参数自然无法收敛到预期值。必须先将它们转换为numpy数组才能进行数值运算。

修正后的完整代码

import numpy as np

# 转换为numpy数组,支持逐元素运算
x = np.array([32.50234527, 53.42680403, 61.53035803, 47.47563963, 59.81320787,
55.14218841, 52.21179669, 39.29956669, 48.10504169, 52.55001444,
45.41973014, 54.35163488, 44.1640495 , 58.16847072, 56.72720806,
48.95588857, 44.68719623, 60.29732685, 45.61864377, 38.81681754])

y = np.array([31.70700585, 68.77759598, 62.5623823 , 71.54663223, 87.23092513,
78.21151827, 79.64197305, 59.17148932, 75.3312423 , 71.30087989,
55.16567715, 82.47884676, 62.00892325, 75.39287043, 81.43619216,
60.72360244, 82.89250373, 97.37989686, 48.84715332, 56.87721319])

w = c = 0
alpha = 0.0001
n = len(x)
p = float(n)

for _ in range(100000):
    y_calc = w * x + c
    # 修正变量l为x,回归正确的梯度计算逻辑
    w = w + alpha * ((1/p) * np.sum(x * (y - y_calc)))
    c = c + alpha * ((1/p) * np.sum(y - y_calc))

print(w, c)

运行这段代码后,输出会接近你预期的w≈1.3897、c≈0.0351。

额外优化建议

  • 迭代过程中可以打印均方误差(MSE),实时观察损失值是否持续下降,确认模型收敛状态。
  • 当前学习率alpha=0.0001偏保守,可尝试调至0.001,迭代10000次左右即可收敛到目标值。

内容的提问来源于stack exchange,提问作者sanepunk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 19:42:08