首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >梯度下降Matlab

梯度下降Matlab
EN

Stack Overflow用户
提问于 2014-04-10 19:21:07
回答 1查看 4.7K关注 0票数 0

我在Matlab中有一个梯度下降的问题。我不知道如何构建这个函数。

默认设置:

代码语言:javascript
复制
  max_iter = 1000;
  learing = 1;
  degree = 1;

我的logistic回归成本函数:(对吗?)

代码语言:javascript
复制
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

现在我的梯度下降函数:

代码语言:javascript
复制
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

帮助:),汉斯

EN

回答 1

Stack Overflow用户

发布于 2014-04-11 08:23:33

您可以在常规的matlab函数中指定成本函数的代码:

代码语言:javascript
复制
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在每个循环迭代中自动更新):

代码语言:javascript
复制
function [theta, Jval] = graddescent(logcost, learing, theta, max_iter)
    for iter = 1:max_iter 
        [Jval, Jgrad] = logcost(theta);
        theta = theta - learing * Jgrad;
    end
end

并使用一个可用于评估成本的函数对象调用它:

代码语言:javascript
复制
% 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,它包括梯度下降的实现,以及其他最小化技术。

致以问候。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22997143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档