【问题标题】:matlab fminunc not quitting (running indefinitely)matlab fminunc 不退出(无限期运行)
【发布时间】:2012-05-11 15:14:02
【问题描述】:

一段时间以来,我一直在尝试在 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。

【问题讨论】:

  • 你能显示costFunctionReg - 很可能问题出在这个问题上。也可以设置MaxFunEvals-也许你每次迭代需要这么多计算。
  • 我建议你在调试器中启动你的代码,并在代价函数中设置一个断点,看看你是否到达它,如果是,它里面发生了什么。
  • 嘿,快速提问。我还是机器学习的新手。我实际上是在尝试解决分类问题。这可能是我的问题的原因吗?
  • options= optimset(options ,'Display', 'iter-detailed'); 添加到您的选项中,然后告诉我您看到了什么
  • 我不熟悉分类问题,但如果某些值导致问题,你不应该使用 fminunc。此外,所需解的大尺寸可能会阻止您使用这种数值方法:虽然它会运行,但它可能永远不会正确收敛。

标签: matlab machine-learning regression


【解决方案1】:

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

一般弧线(我已从上述网站复制并粘贴/编辑文本)是:

错误消息表明您的目标函数“obj”要么 错误,或返回和无效值,例如 Inf、NaN 或复数 在点 x0 处求值时的数字。

您可能希望在调用 fmincon(或在您的情况下为 fminunc)之前在 x0 处评估您的函数,以查看它是否定义明确:类似于

  costFunctionReg(initial_theta)

如果您的函数 (costFunctionReg) 返回一个复数值结果,则使用 real() 将其剥离。

【讨论】:

    猜你喜欢
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 2023-01-12
    • 2011-10-28
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多