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

Andrew Ng机器学习作业Python实现:梯度下降算法异常求助

解决梯度下降算法的参数计算错误问题

我一眼就看到你的Python代码里有个大小写敏感的变量名错误,这正是导致梯度下降结果偏离预期的核心原因!

问题定位

你的梯度下降函数参数定义的是小写的x,但在计算误差项的时候却误用了大写的X:

theta = theta - (alpha / m) * np.dot(x.T,(np.dot(X, theta) - y))
# 这里的大写X应该改成小写x!

Python是严格区分大小写的编程语言,x和X会被识别为两个完全独立的变量——你这里调用了未在函数内定义的X,实际计算时大概率误用了全局作用域的X,导致梯度更新的逻辑完全偏离了正确方向。

修正后的代码

把大写的X改成小写的x,同时可以利用已经计算好的hyp变量避免重复矩阵运算,优化代码效率:

def gradientDescent(x, y, theta, alpha, num_iter):
    m = np.size(x, axis=0)
    for i in range(num_iter):
        hyp = np.dot(x, theta)
        # 复用已计算的hyp,替代重复的np.dot(x, theta)
        theta = theta - (alpha / m) * np.dot(x.T, (hyp - y))
    return theta

逻辑验证

修正后的Python代码逻辑和你给出的Octave实现完全对齐:

  • 两者都会先计算假设值X*theta(对应Python的np.dot(x, theta))
  • 接着计算误差项X*theta - y,再通过转置特征矩阵做乘法,最后按学习率和样本数缩放完成theta更新

你提到正规方程法能得到正确结果,说明特征矩阵X、标签y等数据都是没问题的,修正变量名错误后,梯度下降应该就能输出预期的array([[-3.6303],[1.1664]])了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 13:12:42