当启用 ‘iter-detailed’ 选项时,fminunc 返回 ‘用户目标函数返回复数;尝试新的点…’。我知道这是因为我的成本函数出现了问题,原因是它返回了一个复数部分(确切地说是 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) * nanans = NaN + NaNi