Matlab正则化Logistic回归 - 如何计算梯度

时间:2016-08-09 14:20:42

标签: matlab machine-learning octave logistic-regression gradient-descent

我目前正在Coursera平台上进行机器学习,我正在尝试实施Logistic回归。为了实现Logistic回归,我使用梯度下降来最小化成本函数,我将编写一个名为recipes.each do |recipe|的函数,它返回在当前参数集中评估的每个参数的成本和梯度。

问题更好地描述如下:

Problem Description

Problem Description Continued

我的成本函数正在运行,但渐变函数不是。请注意,我更愿意使用循环来实现它,而不是逐个元素的操作。

我正在单独计算costFunctionReg.m(在MATLAB中,theta[0]),因为它没有正则化,即我们不使用第一个术语(theta(1))。

lambda

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您应用正则化的方式不正确。您可以在之后添加正则化对所有训练示例求和,而是在每个示例之后添加正则化 。如果您将代码保留为校正前的代码,则无意中使梯度步长变大,最终会超出解决方案的范围。这种过冲会累积,并且不可避免地会为所有组件提供Inf-Inf的梯度向量(偏差项除外)。

简单地说,在第二个lambda*theta(j)循环终止后放置for语句:

for j = 2 : n    
    for i = 1 : m
        grad(j) = grad(j) + ( h(i) - y(i) ) * X(i,j); % Change
    end
    grad(j) = grad(j) + lambda * theta(j); % Change
end