【问题标题】:Batch gradient descent in scikit-learnscikit-learn 中的批量梯度下降
【发布时间】:2020-08-06 20:36:06
【问题描述】:
我们如何为 sklearn.linear_model.SGDRegressor 设置参数以使其执行 Batch 梯度下降?
我想使用批量梯度下降来解决线性回归问题。我需要让 SGD 像批量梯度下降一样,这应该(我认为)通过在一个时期结束时修改模型来完成。它可以以某种方式参数化以使其表现得像这样吗?
【问题讨论】:
标签:
machine-learning
scikit-learn
regression
linear-regression
gradient-descent
【解决方案1】:
我需要让 SGD 表现得像批量梯度下降,这应该(我认为)通过在一个 epoch 结束时修改模型来完成。
你不能那样做;从documentation 可以清楚地看出:
每次估计每个样本的损失梯度,并沿途更新模型
虽然在 SGDClassifier 文档中提到
SGD 允许小批量(在线/核外)学习
这大概也适用于SGDRegressor,实际上意味着您可以使用partial_fit 方法来提供不同批次的数据;然而,计算(和更新)总是按样本执行。
如果您确实需要使用 GD 执行线性回归,您可以在 Keras 或 Tensorflow 中轻松完成,组装一个 LR 模型并使用等于整个训练样本的批量大小。