我在Matlab中有一个梯度下降的问题。我不知道如何构建这个函数。
默认设置:
max_iter = 1000;
learing = 1;
degree = 1;我的logistic回归成本函数:(对吗?)
function [Jval, Jgrad] = logcost(function(theta, matrix, y)
mb = matrix * theta;
p = sigmoid(mb);
Jval = sum(-y' * log(p) - (1 - y')*log(1 - p)) / length(matrix);
if nargout > 1
Jgrad = matrix' * (p - y) / length(matrix);
end现在我的梯度下降函数:
function [theta, Jval] = graddescent(logcost, learing, theta, max_iter)
[Jval, Jgrad] = logcost(theta);
for iter = 1:max_iter
theta = theta - learing * Jgrad; % is this correct?
Jval[iter] = ???
end帮助:),汉斯
发布于 2014-04-11 08:23:33
您可以在常规的matlab函数中指定成本函数的代码:
function [Jval, Jgrad] = logcost(theta, matrix, y)
mb = matrix * theta;
p = sigmoid(mb);
Jval = sum(-y' * log(p) - (1 - y')*log(1 - p)) / length(matrix);
if nargout > 1
Jgrad = matrix' * (p - y) / length(matrix);
end
end然后,创建梯度下降方法(Jgrad在每个循环迭代中自动更新):
function [theta, Jval] = graddescent(logcost, learing, theta, max_iter)
for iter = 1:max_iter
[Jval, Jgrad] = logcost(theta);
theta = theta - learing * Jgrad;
end
end并使用一个可用于评估成本的函数对象调用它:
% Initialize 'matrix' and 'y' ...
matrix = randn(2,2);
y = randn(2,1);
% Create function object.
fLogcost = @(theta)(logcost(theta, matrix, y));
% Perform gradient descent.
[ theta, Jval] = graddescent(fLogcost, 1e-3, [ 0 0 ]', 10);您还可以查看建立在Matlab函数优化方法中的fminunc,它包括梯度下降的实现,以及其他最小化技术。
致以问候。
https://stackoverflow.com/questions/22997143
复制相似问题