matlab:fminunc返回';用户目标函数返回复数;尝试一个新的观点…';

matlab:fminunc返回';用户目标函数返回复数;尝试一个新的观点…';,matlab,machine-learning,Matlab,Machine Learning,fminunc返回的是“用户目标函数返回的复数”;正在尝试一个新的点…“当“iter详细说明”打开时。我知道这是因为我的成本函数,出于某种原因,它返回一个复杂的组件(准确地说,它返回J=NaN+NaNi)。关于它为什么这样做,以及我如何修复它,有什么想法吗? 另外,我有一个非常大的功能集(大约1000个),这可能是因为它超过了最大值或精度? P.s.成本函数和梯度: hyp = sigmoid(X * theta); reg = (lambda/(2*m))*sum((theta(2:end).

fminunc返回的是“用户目标函数返回的复数”;正在尝试一个新的点…“当“iter详细说明”打开时。我知道这是因为我的成本函数,出于某种原因,它返回一个复杂的组件(准确地说,它返回J=NaN+NaNi)。关于它为什么这样做,以及我如何修复它,有什么想法吗? 另外,我有一个非常大的功能集(大约1000个),这可能是因为它超过了最大值或精度? P.s.成本函数和梯度:

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


m为车组数,y为0或1。。所以第二部分是否定的,第一部分是否定的。。你知道一些事情。我正在读取一个图像文件,对于像素值,matlab返回的大多是负值。我需要找出范围,以便将其缩放为正值。我正在将RGB转换为Lab。这就是产生错误的地方。
>> (1+2i) * nan

ans =

      NaN +    NaNi