当前位置:  开发笔记 > 编程语言 > 正文

如何在逻辑回归中避免NaN?

如何解决《如何在逻辑回归中避免NaN?》经验,为你挑选了1个好方法。



1> Matthew Gunn..:

微妙的问题!看起来你正在使用正确的公式,但随后它出现了数字问题的kablooie.为什么?exp(x)/exp(x)如果x足够大,则不等于1 .

解决方案是使用不同但数学上等效的公式:

temp = arrayfun(@(x) 1/(1+x), exp(-testX * w))

您也可以放弃arrayfun通话(除非我遗漏了什么,否则似乎没有必要?):

temp = 1./(1+exp(-testX*w);

这些是与你所写的相同的公式(但没有数字问题).在数学中,e ^ x /(1 + e ^ x)= 1 /(1 + e ^ -x)

原始版本出了什么问题?

假设testX*w = 2000.那么你有exp(2000)= inf,并exp(2000)/ ( 1+ exp(2000)返回NaN因为inf/inf未定义.另一方面,1/inf = 0,第二个公式适用于所有情况.

回顾一下:

exp(x) ./ ( 1+ exp(x))          % <------ can give you inf/inf= NaN problems
1 ./ ( 1  + exp(-x))            % <------ works great!

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有