如何获得 0 到 1 之间的 sigmoid 函数以获得正确答案的概率?

Posted

技术标签:

【中文标题】如何获得 0 到 1 之间的 sigmoid 函数以获得正确答案的概率?【英文标题】:How to get a sigmoid function between 0 and 1 for probability of correct answer? 【发布时间】:2020-10-29 03:02:48 【问题描述】:

我正在尝试模拟一些数据,其中响应可能是正确的 (1) 或错误的 (0)。因此,我试图找到一个有四个条件的分布(在这种情况下是圆的度数)。

因此,x 轴是 pi/2, pi, pi1.5, 2pi。我已将其从 0 标准化为 1,以使其更容易。在 y 轴上,我希望回答正确的概率是 0-1 或 0-100 等。我正在尝试生成/绘制一个 sigmoid 函数,这样当条件接近 1 时概率更高,而当条件接近 1 时概率更低条件更接近于 0。

我似乎无法生成 0 到 1 之间的 sigmoid,除非我设置 x = np.linspace (-10,10,10),否则它只会给我一条直线。我怎样才能做到这一点?我目前拥有的代码如下。谢谢!

我最初打算使用 beta 分布,因为它更适合(因为它是围绕一个圆的度数),但似乎无法将它变成我想要的形状。任何帮助将不胜感激!

def sigmoid(x,x0=0,k=0.5):
            return (1 / (1 + np.exp(-x)))
x = np.linspace(0,1,10)

【问题讨论】:

那么 sigmoid 是 0 表示负无穷大,1 表示正无穷大。因此,这个想法是永远不会真正达到0 anc 1 啊,我明白了,谢谢!然后你会建议将我的 4 个条件标准化以适应 -10 到 +10 还是这是不好的做法? 【参考方案1】:

由于您对标准化为[0,1] 范围感到满意,请考虑标准化为[-1,1]

import numpy as np
import matplotlib.pyplot as plt

def norm(x):
    # normalise x to range [-1,1]
    nom = (x - x.min()) * 2.0
    denom = x.max() - x.min()
    return  nom/denom - 1.0

def sigmoid(x, k=0.1):
    # sigmoid function
    # use k to adjust the slope
    s = 1 / (1 + np.exp(-x / k)) 
    return s

# un-normalised data
x = np.linspace(-4,+4,100)
# normalise the data
x = norm(x) 

plt.plot(x, sigmoid(x))
plt.show()

【讨论】:

谢谢!如何改变这个函数来改变斜坡的陡度以及它在 x 轴上“开始”的位置?对不起,我没有研究过这个:) 不用担心 :) - 我已经编辑了问题(参见代码段)来回答您的评论。只是为了清楚;该图是使用 k=0.1 绘制的,我已将其指定为 sigmoid 函数的默认值。

以上是关于如何获得 0 到 1 之间的 sigmoid 函数以获得正确答案的概率?的主要内容,如果未能解决你的问题,请参考以下文章

神经网络为啥要用sigmoid函数?为啥要映射到0-1之间?求解释

神经网络为什么要用sigmoid函数?为什么要映射到0-1之间?

sigmoid有啥作用

如何为 CNN 的每个班级获得 0 到 1 之间的分数?

sigmoid函数与softmax函数

AI数学基础4-Sigmoid函数