0

fminunc は 'ユーザー目的関数が複素数を返しました。'iter-detailed' がオンの場合、新しいポイントを試行しています...'。コスト関数が原因であることはわかっていますが、何らかの理由で複雑なコンポーネントを返しています (正確には、J = NaN + NaNi を返しています)。なぜこれを行っているのか、どうすれば修正できるのかについてのアイデアはありますか? PS 私は非常に大きなセット機能 (約 1000) を持っていますが、最大値または精度を超えている可能性がありますか? Ps コスト関数と勾配:

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));
4

1 に答える 1

1

次のような奇妙なバグの合流点に遭遇する可能性があります。

  • sigmoid(X*theta) is negative OR greater than one (which would give you the complex part when you take its log in line 3 ); and
  • either m or y is NaN?

I hadn't noticed this before, but if a NaN interacts with a complex number, you get a "complex" NaN.

>> (1+2i) * nan

ans =

      NaN +    NaNi
于 2012-05-06T05:47:50.313 に答える