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

如何在sklearn中实现带动量的随机梯度下降(SGD)线性回归模型

基于sklearn实现带动量的SGD线性回归入门指引

sklearn内置的SGDRegressor已经原生支持普通动量与Nesterov动量变体,不需要手动从0实现,仅需在初始化时配置对应参数即可。你给出的基础代码未配置动量相关参数,修改方法如下:

核心动量参数说明

  • momentum:动量权重参数,取值范围0~1,行业通用最优默认值为0.9,设置为0时等价于无动量的普通SGD
  • nesterov:布尔值参数,设置为True时启用Nesterov加速动量,相比普通动量收敛速度更快、稳定性更高,一般建议开启
  • learning_rate:学习率调度策略,动量模式下不要使用默认的optimal选项,建议选择constant(固定学习率)、invscaling(学习率随迭代反比衰减)或adaptive(收敛停滞时自动下调学习率)
  • eta0:初始学习率,使用动量时必须手动指定该参数,可优先尝试0.01、0.001等常见值调试

调整后可运行代码

from sklearn import linear_model
from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler

# 加载数据集
X,y = load_boston().data,load_boston().target
# SGD类优化器对特征尺度极其敏感,必须先做标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 初始化带动量的SGD线性回归模型
clf = linear_model.SGDRegressor(
    loss='squared_loss',
    penalty='l2',
    alpha=0.01,
    max_iter=1000,
    # 动量相关配置
    learning_rate='invscaling',
    eta0=0.01,
    momentum=0.9,
    nesterov=True,
    random_state=42
)
clf.fit(X_scaled, y)

print('Score:',clf.score(X_scaled,y))
print('Regression coefficients:',clf.coef_)
print('deviation:',clf.intercept_ )

额外注意事项

  • 特征标准化是SGD类模型生效的前提,缺失这一步会导致动量更新方向被大尺度特征主导,出现收敛慢、精度低甚至不收敛的问题
  • 调参时可先固定momentum=0.9、nesterov=True,再调整初始学习率eta0与学习率调度策略,最后调整正则化系数alpha即可得到最优效果
  • 如果需要自定义动量逻辑,sklearn的SGDRegressor不支持自定义优化器扩展,可改用PyTorch、TensorFlow等深度学习框架的底层优化器接口实现,仅需少量代码即可完成带动量的线性回归训练

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 00:54:00