matlab fminunc没有退出(无限期运行)

时间:2012-05-02 06:32:25

标签: matlab machine-learning regression

我一直在尝试在matlab中实现逻辑回归一段时间。我已经完成了,但对于我不知道的原因,我无法使用fminunc执行单次迭代。当它调用的函数时,程序只是无限期地进入等待模式。代码有问题,还是我的数据设置得很大?

function [theta J] = logisticReg(initial_theta, X, y, lambda, iter)

% Set Options
options = optimset('GradObj', 'on', 'MaxIter', iter);

% Optimize
[theta, J, exit_flag] = fminunc(@(t)(costFunctionReg(t, X, y, lambda)), initial_theta, options);

end

,其中

X is a [676,6251] matrix
y is a [676,1] vector
lambda = 1
initial_theta is [6251, 1] vector of zeros
iter = 1

任何'指向正确的方向'将不胜感激! 附:我能够运行costFunctionReg。所以假设它是这个功能。

按要求提供costFunctionReg

function [J, grad] = costFunctionReg(theta, X, y, lambda)

m = length(y); % number of training examples

J = 0;
grad = zeros(size(theta));

hyp = sigmoid(X * theta);
cost_reg = (lambda / (2*m)) * sum(theta(2:end).^2);

J = 1/m * sum((-y .* log(hyp)) - ((1-y) .* log(1-hyp))) + cost_reg;


grad(1) = 1/m * sum((hyp - y)' * X(:,1));
grad(2:end) = (1/m * ((hyp - y)' * X(:,2:end))) + (lambda/m)*theta(2:end)';

回答@Rasman问题:

Cost at initial theta: NaN
press any key to continue 
Performing Logistic Regrestion
Error using sfminbx (line 28)
Objective function is undefined at initial point. fminunc cannot continue.

Error in fminunc (line 406)
   [x,FVAL,~,EXITFLAG,OUTPUT,GRAD,HESSIAN] = sfminbx(funfcn,x,l,u, ...

Error in logisticReg (line 8)
[theta, J, exit_flag] = fminunc(@(t)(costFunctionReg(t, X, y, lambda)),
initial_theta, options);

Error in main (line 40)
[theta J] = logisticReg(initial_theta, X, y, lambda, iter);

第一行是我用initial_theta运行costFunctionReg。

1 个答案:

答案 0 :(得分:0)

您可能已尝试搜索此链接: http://www.mathworks.com/matlabcentral/newsreader/view_thread/290418

一般弧线(我已经复制并粘贴/编辑了上述网站的文字):

错误消息表明您的目标函数“obj” 错误,或返回和无效值,如Inf,NaN或复杂 在x0点评估时的数字。

你可能想在调用fmincon(或者你的情况下是fminunc)之前在x0评估你的函数,看它是否定义得很好:类似

  costFunctionReg(initial_theta)

如果你的函数(costFunctionReg)返回一个复数值的结果,那么使用real()去除它。