【问题标题】:Matlab is rounding my sigmoid functionMatlab 正在舍入我的 sigmoid 函数
【发布时间】:2014-04-18 02:11:24
【问题描述】:

我已经在 Matlab 中实现了一个 sigmoid 函数,如下所示。

function [y] = sig(x)
    y = 1.0 / (1.0 + exp(-x));
end

当我给它一个较大的输入(例如 100)时,该函数会四舍五入我的结果并给我一个 1。

我怎样才能得到它的准确值?是否有可能或者我是否将 x 的值限制在一个较低的范围内。

【问题讨论】:

    标签: matlab logistic-regression


    【解决方案1】:

    如果你想要 1 和你的 sigmoid 函数之间的差异,你可以用简化的数学表达式定义一个函数:

    1 - 1/(1+exp(-x)) = (1+exp(-x))/(1+exp(-x)) - 1/(1+exp(-x)) = exp (-x) / (1+exp(-x))

    function [y] = one_minus_sig(x)
        y = exp(-x) / (1+exp(-x));
    end
    

    然后:

    one_minus_sig(100) = 3.7200759760208356e-44 
    

    【讨论】:

      【解决方案2】:

      1.0000000000000... 精确到大约 44 位,所以我不确定问题出在哪里?

      编辑:在早期版本中,我说的是 300 位 - 出于某种原因,我在该计算中使用了 x=900。这里有几个数字:

      0.9999999999999999999999999999999999999999999627992402397916403704030419613688166264110784601287070655313918820485222034076p

      使用 Maple 计算。

      【讨论】:

      • 据我了解,sigmoid 函数在无穷远处趋向 1。尽管 100 分别是一个很大的输入,sigmoid 应该返回一个非常接近 1 的数字,但不应该等于 1。我希望得到那个数字。
      • 您希望如何定义该数字?到固定位数?如果是这样,请使用 Maple 之类的东西。确切地?在这种情况下,您可能必须使用代数形式。 y300 的帖子也很有用。
      猜你喜欢
      • 2014-04-22
      • 1970-01-01
      • 2019-02-24
      • 2017-10-05
      • 2013-08-31
      • 2017-10-08
      • 2023-03-06
      • 1970-01-01
      • 2010-12-07
      相关资源
      最近更新 更多