fminunc 正在返回“用户目标函数返回复数;当“iter-detailed”打开时,尝试一个新点...”。我知道这是因为我的成本函数,由于某种原因它返回一个复杂的组件(准确地说它返回 J = NaN + NaNi)。关于为什么要这样做以及我该如何解决它有什么想法吗? 附:我有一个非常大的特征集(大约 1000 个),它是否会超过最大值或精度? 附注成本函数和梯度:
hyp = sigmoid(X * theta);
reg = (lambda/(2*m))*sum((theta(2:end).^2));
J = (1/m * sum((-y .* log(hyp)) - ((1-y) .* log(1-hyp)))) + reg;
grad(1) = (1/m * ((hyp-y)' * X(:,1)))';
grad(2:end) = (1/m * ((hyp-y)' * X(:,2:end)))' + (lambda/m * theta(2:end));
最佳答案
您有可能遇到奇怪的错误融合,其中:
- sigmoid(X*theta) 为负数或大于 1(当您在第 3 行获取其对数时,这将为您提供复数部分);和
- m 或 y 是 NaN 吗?
我以前没有注意到这一点,但如果 NaN 与复数交互,你会得到一个“复数”NaN。
>> (1+2i) * nan
ans =
NaN + NaNi
关于matlab: fminunc 返回 'User objective function returned complex; trying a new point...',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10467265/