如何使用sklearn实现分类任务中的批量梯度下降?我们有SGDClassifier用于随机梯度下降,它一次处理一个实例,以及线性/逻辑回归,它使用正常方程法。
回答:
如另一个类似问题和sklearn的文档中指出的那样,问题的可能答案是:
SGD允许小批量(在线/离线)学习,参见partial_fit方法。
但是partial_fit
真的是批量梯度下降吗?
SGD:计算成本函数的梯度,并使用梯度下降步骤为每个样本更新权重。
批量/小批量GD:计算成本函数的梯度,并使用梯度下降步骤每批次更新一次权重。
因此,批量大小为1的批量GD == SGD。
现在我们清楚了定义,让我们研究sklearn的SGDClassifier
代码。
partial_fit
的文档字符串说
对给定样本执行一次随机梯度下降的周期。
但这不是批量GD,它看起来更像是运行fit
方法的辅助函数,设置max_iter=1
(实际上在文档字符串中注释为相同)。
partial_fit
调用_partial_fit
,设置max_iter==1
。参考链接
fit
方法调用_fit
,它调用_partial_fit
,设置max_iter
为指定/默认的最大迭代次数。参考链接
结论:
partial_fit
实际上并不执行批量GD,即它不是按批次计算梯度并更新权重,而是为每个样本这样做。
在sklearn中似乎没有机制来执行批量梯度下降。