我目前正在Coursera平台上进行机器学习,我正在尝试实施Logistic回归。为了实现Logistic回归,我使用梯度下降来最小化成本函数,我将编写一个名为recipes.each do |recipe|
的函数,它返回在当前参数集中评估的每个参数的成本和梯度。
问题更好地描述如下:
我的成本函数正在运行,但渐变函数不是。请注意,我更愿意使用循环来实现它,而不是逐个元素的操作。
我正在单独计算costFunctionReg.m
(在MATLAB中,theta[0]
),因为它没有正则化,即我们不使用第一个术语(theta(1)
)。
lambda
我做错了什么?
答案 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