是否有关于S形曲线的公式,其范围和范围为[0,1]


10

基本上,我想将相似性度量转换为用作预测变量的权重。相似之处将在[0,1]上,而我将权重也限制在[0,1]上。我想要执行此映射的参数函数,我可能会使用梯度下降对其进行优化。要求是0映射到0,1映射到1,并且严格增加。还可以理解一个简单的导数。提前致谢

编辑:感谢到目前为止的答复,这些都非常有帮助。为了使我的目的更清楚,任务是预测。我的观察结果是具有单个维度的极稀疏向量,可以对其进行预测。我的输入尺寸用于计算相似度。然后,我的预测是该预测变量的其他观察值的加权总和,其中权重是相似性的函数。为了简单起见,我将权重限制在[0,1]上。希望现在显而易见,为什么我要求0映射为0,要求1映射为1,并要求它严格增加。正如whuber指出的那样,使用f(x)= x可以满足这些要求,并且实际上效果很好。但是,它没有要优化的参数。我有很多观察,所以我可以容忍很多参数。我将手动编码梯度下降,因此我偏爱简单的导数。

例如,给出的许多响应都是关于.5对称的。使参数向左/向右移动(例如使用beta分布)会很有用


4
FX=X满足您的每一项要求。
ub

为了响应您关于控制左右移动的修改,我添加了一些内容。我图片中的所有三个示例家族都有直接的控制方法。
Glen_b-恢复莫妮卡

Answers:


8

这是一个:

ÿ=1个1个+X1个-X-β

其中> 0β>0

[![] [1]] 2


这是一个标准功能,如小号ň?我有兴趣在星期三识别它,但我没有。你能给个参考吗?tanhsin
Darkmoor

嗨,Darkmoor,我通过玩“逆向logit函数”得到了这个方程。您会看到它类似于y =逆logit(x)= 1 /(1 + e ^ -x),因为logit映射为(0,1) imgur.com/a/H0kGF
Ismam Huda,

2
您可以添加额外的调整级别,以便可以通过使用y = 1 /(1+(x ^ r /(1-x ^ r))^-b)来调整函数等于.5的位置。 。然后,要在x0处获得y = .5,请设置r = -log(2)/ log(x0)。或者,如果您想确保x = x0处0和1之间的某个k的y = k,则设置r = -log((1 / k-1)^(1 / b)+1)/ log(x0)
wmsmith

7

正如@whuber所评论的那样,函数 满足您提到的三个要求(即0映射为0,1映射为1,并且该函数严格增加)。在问题的标题中,您似乎表明您对S形函数也很感兴趣,例如Sigmoid / Logistic曲线。它是否正确?在这种情况下,您当然应该尝试以下逻辑函数,该函数将大致满足您指定的所有4个条件:1FX=X

1个1个+Ë-ķX-0.5

此方程式中的将控制曲线的斜率。更改k还将允许您控制f 0 f 1 分别接近0和1的程度。例如对于k = 20f 0 = 4.539787 e 05f 1 = 0.9999546ķķF0F1个ķ=20F0=4.539787Ë-05F1个=0.9999546

该函数的导数很容易计算为: 有关此功能的更多信息,请访问https://en.wikipedia.org/wiki/Logistic_function

ķË-ķX-0.51个+Ë-ķX-0.52

此函数不映射1->1。实际上,f-> 1如x->∞。取决于k,x = 1处的f的值可能很小,但永远不会恰好为0。实际上,这是在分母中使用e ^ ...的主要原因,即相关域为[0,∞)代替[0,1]。
wmsmith

7

让我提供符合要求的最通用的解决方案:这将为您提供最大的选择和优化灵活性。

我们可以将“ S形”解释为单调递增曲线(因为变换应该是一对一的),它由一个向上凹的部分和另一个向下凹的部分组成。我们可能集中在使左半部分凹入向下,因为另一种类型(左半部分凹入向上)是通过反转这样的变换获得的。

由于变换被认为是可微的,因此它必须具有递减的导数f FF的左半部分,而右半部分递增的导数。无论如何,导数必须是非负的,并且只能在孤立点为零(如果有的话:导数的最小值给出变换的最小斜率)。

它不要求导数微分的,但作为一个实际问题我们可以假设,这是几乎处处与衍生F

这个二阶导数几乎可以做任何事情我们所需要的就是

  • 它是可集成的

  • 对于某个左手区间所有值,均小于或等于零,并且[0ķ

  • 对于右间隔中的所有值都大于或等于零。ķ1个]

此类函数(及其反函数)对所有解的集合进行参数化。F (有一些冗余:下面描述的最后一个标准化步骤可以解决这个问题。)

微积分的基本定理使我们能够从任何这样的规范中恢复。那是,F

FX=0XFŤdŤ

FX=0XFŤdŤ

的条件保证˚F从其minimim单调上升˚F 0 至某个最大˚F 1 = C ^。最后,通过将前一个积分的值除以C来标准化fFFF0F1个=CFC


这是从二阶导数的随机游走版本开始的说明。其中,导数尚未归一化,但变换已归一。F

数字

F[0ķķ1个]R

FFFF

FFF

FX=XFX=0FF1个0FFX=1个-X

n <- 51                      # Number of interpolation points
k.1 <- floor(n * 2/3)        # Width of the left-hand interval
k.2 <- n - k.1               # ............ right-hand interval
x <- seq(0, 1, length.out=n) # x coordinates
set.seed(17)

# Generate random values of the second derivative that are first negative,
# then positive.  Modify to suit.
y.2 <- (c(runif(k.1, -1, 0), 0.5*runif(k.2, 0, 1))) * abs(cos(3*pi * x)) + 
  c(rep(-.1, k.1), rep(.5,k.2))

# Recover the first derivative and then the transformation.  Control the 
# minimum slope of the transformation.
y.1 <- cumsum(y.2)
y.1 <- y.1 - min(y.1) + 0.005 * diff(range(y.1))
y <- cumsum(y.1)
y <- (y - y[1]) / (y[n] - y[1]) # Normalize the transformation

#
# Plot the graphs.
par(mfrow=c(1,3))
plot(x, y.2, type="l", bty="n", main="Second derivative")
points(x, y.2, pch=20, cex=0.5)
abline(h=0, col="Red", lty=3)
plot(x, y.1, type="l", bty="n", lwd=2, main="First derivative")
abline(h=0, col="Red", lty=3)
plot(x, y, type="l", lwd=2, main="Transformation")

7

对我来说,您要使用它的目的不是很清楚,所以我不能说这样做是否有意义,但满足您的所有条件似乎很琐碎。

  • s形曲线

  • 参数函数

  • 0映射为0,1映射为1,严格增加

  • 单导数

那么,为什么不对pdf为“简单”的[0,1]仅仅采用任何方便的连续单峰*分布族呢?这似乎满足了您列出的所有内容。

*(其模式限制于端点)

  • s形曲线-通过单峰性保证(模式不在端点处)

  • 参数化-通过提供任何具有参数的特定族

  • 0映射为0,1映射为1严格增加-这就是[0,1]上的分布函数的作用;您只需要密度(0,1)> 0

  • 简单派生-即pdf,因此,如果pdf适合您的标准是“简单的”,则说明您完成了。

(如Alex R所说)有无数个。他提到的beta很明显,但是cdf是不完整的beta函数,因此您需要评估一下---它是许多软件包(包括几乎所有不错的stats软件包)中的标准函数,因此我怀疑很难。但是请注意,并不是所有的beta都是单峰的(模式不在末尾),因此该族还包含非“ s”形的cdf。

这是三个相当简单的家庭的照片:

在此处输入图片说明

还有许多其他选择,可以轻松构建新的选择。

-

响应对问题的编辑:

C=1个2μα-βαα+β-1个2

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.