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

使用梯度下降实现线性回归结果异常,与Sklearn结果不符求排查

梯度下降与Sklearn线性回归结果不一致的原因分析

1. 数据未做标准化处理

梯度下降对特征尺度极度敏感,而Sklearn的LinearRegression采用闭式最小二乘法求解,完全不受特征尺度影响。你的输入特征alcohol和目标变量total大概率数值范围差异较大,导致参数m(斜率)和c(截距)的梯度更新速率失衡——比如alcohol数值偏大,m的每轮更新幅度远大于c,1000轮迭代后模型还没收敛到最优状态,自然和闭式解结果差距大。

解决办法:先对alcohol做标准化处理(比如Z-score标准化:(x - x.mean())/x.std()),再运行梯度下降,参数收敛速度会大幅提升,结果也会和Sklearn的输出对齐。

2. 迭代次数不足

你设置的epochs=1000搭配learning_rate=0.0001,迭代次数明显不够。学习率极小意味着每轮参数更新幅度非常有限,需要更多迭代才能逼近最优解。

可以尝试将epochs调高到10000甚至100000,观察m和c是否逐渐接近Sklearn给出的2.0325和5.8578;也可以适当调大学习率(比如0.001),但要注意避免学习率过高导致参数震荡无法收敛。

3. 梯度计算逻辑验证

你的梯度下降公式是正确的:

  • MSE损失对斜率m的偏导:$\frac{\partial L}{\partial m} = \frac{2}{n}\sum -x_i(y_i - (m x_i + c))$,代码中dm的计算完全匹配,最终m = m_k - dm * learning_rate的更新逻辑正确。
  • MSE损失对截距c的偏导:$\frac{\partial L}{\partial c} = \frac{2}{n}\sum -(y_i - (m x_i + c))$,dc的计算也没问题。

所以梯度计算本身不是问题,核心矛盾还是收敛速度和尺度适配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 10:33:19