Existe-t-il une formule pour une courbe en S avec domaine et plage [0,1]


10

Fondamentalement, je veux convertir les mesures de similitude en poids qui sont utilisés comme prédicteurs. Les similitudes seront sur [0,1], et je limiterai les poids à également sur [0,1]. J'aimerais une fonction paramétrique qui effectue cette cartographie que j'optimiserai probablement en utilisant la descente de gradient. Les exigences sont que 0 correspond à 0, 1 correspond à 1 et il doit être strictement croissant. Un dérivé simple est également apprécié. Merci d'avance

Edit: Merci pour les réponses jusqu'à présent, celles-ci sont très utiles. Pour clarifier mon objectif, la tâche est la prédiction. Mes observations sont des vecteurs extrêmement clairsemés avec une seule dimension à prévoir. Mes dimensions d'entrée sont utilisées pour calculer la similitude. Ma prédiction est alors une somme pondérée de la valeur d'autres observations pour le prédicteur où le poids est fonction de la similitude. Je limite mes poids sur [0,1] pour plus de simplicité. Nous espérons maintenant clairement pourquoi j'ai besoin de 0 pour mapper sur 0, 1 pour mapper sur 1, et pour que cela augmente strictement. Comme l'a souligné whuber, l'utilisation de f (x) = x répond à ces exigences et fonctionne plutôt bien. Cependant, il n'a aucun paramètre à optimiser. J'ai beaucoup d'observations donc je peux tolérer beaucoup de paramètres. Je vais coder manuellement la descente du gradient, d'où ma préférence pour une dérivée simple.

Par exemple, la plupart des réponses données sont symétriques par rapport à 0,5. Il serait utile d'avoir un paramètre pour décaler vers la gauche / droite (comme avec la distribution bêta)


4
f(x)=x satisfait chacune de vos exigences.
whuber

J'ai ajouté un peu en réponse à votre modification sur le contrôle du décalage gauche-droite. Les trois exemples de familles sur ma photo ont un moyen direct de contrôler cela.
Glen_b -Reinstate Monica

Réponses:


8

En voici un:

y=11+(x1x)β

est > 0β>0

[![][1]] 2


Est-ce une fonction standard comme le de s i n ? Je suis intéressé à l'identifier dans le mercredi mais je n'ai pas pu. Pourriez-vous s'il vous plaît donner une référence? tanhsin
Darkmoor

Salut Darkmoor, j'ai obtenu cette équation en jouant avec la "fonction logit inverse". Vous pouvez voir qu'il ressemble à y = logit inverse (x) = 1 / (1 + e ^ -x) car logit correspond à (0,1) imgur.com/a/H0kGF
Ismam Huda

2
Vous pouvez ajouter un niveau supplémentaire de réglage afin de pouvoir régler la position à laquelle la fonction est égale à 0,5 en utilisant y = 1 / (1+ (x ^ r / (1-x ^ r)) ^ - b) . Ensuite, pour atteindre y = 0,5 à x0, définissez r = -log (2) / log (x0). Ou, si vous voulez vous assurer que y = k pour certains k entre 0 et 1 à x = x0, définissez r = -log ((1 / k - 1) ^ (1 / b) +1) / log (x0)
wmsmith

7

Comme déjà commenté par @whuber, la fonction satisfait les trois exigences que vous avez mentionnées (c.-à-d. 0 correspond à 0, 1 correspond à 1 et la fonction augmente strictement). Dans le titre de votre question, vous semblez indiquer que la fonction en forme de S vous intéresse également, comme dans la courbe sigmoïde / logistique. Est-ce correct? Dans ce cas, vous devriez certainement essayer la fonction logistique suivante qui répondra approximativement aux 4 critères que vous avez spécifiés: 1f(x)=x .

11+ek(x0.5)

Le dans cette équation contrôlera la pente de votre courbe. La modification de k vous permettra également de contrôler la distance entre f ( 0 ) et f ( 1 ) respectivement à 0 et 1. Par exemple, pour k = 20 , f ( 0 ) = 4,539787 e - 05 et f ( 1 ) = 0,9999546 .kkf(0)f(1)k=20f(0)=4.539787e05f(1)=0.9999546

La dérivée de cette fonction est facilement calculée comme:

kek(x0.5)(1+ek(x0.5))2

Cette fonction ne mappe pas 1 -> 1. En fait, f -> 1 comme x -> ∞. En fonction de k, la valeur de f à x = 1 peut être assez petite, mais elle ne sera jamais exactement 0. En fait, c'est la principale raison d'utiliser e ^ ... dans le dénominateur, c'est-à-dire pour que le domaine pertinent soit [0, ∞) au lieu de [0,1].
wmsmith

7

Permettez-moi de vous proposer la solution la plus générale conforme aux exigences: cela vous donnera le plus de flexibilité pour choisir et optimiser.

Nous pouvons interpréter "en forme de S" comme une courbe augmentant de façon monotone (parce que la transformation doit être biunivoque) composée d'une partie concave vers le haut et d'une autre partie concave vers le bas. Nous pouvons nous concentrer sur la réduction de la moitié gauche concave, car l'autre type (avec la moitié gauche concave vers le haut) est obtenu en inversant de telles transformations.

ff

f

Cette dérivée seconde peut pratiquement tout faire : tout ce dont nous avons besoin, c'est que

  • il est intégrable,

  • [0,k)

  • (k,1]

f

f

f(x)=0xf(t)dt

et

f(x)=0xf(t)dt.

fff(0)f(1)=CfC


f

Figure

f[0,k)(k,1]R

ffff

fff

f(x)=xf(x)=0ff10ff(x)=1x

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

Ce que vous essayez d'utiliser pour cela n'est pas particulièrement clair pour moi, donc je ne peux pas dire si cela a du sens, mais répondre à tous vos critères semble être assez trivial.

  • courbe en s

  • fonction paramétrique

  • 0 cartes à 0, 1 cartes à 1, en augmentation stricte

  • dérivé simple

Alors pourquoi ne pas simplement prendre n'importe quelle famille spécifique de distributions unimodales * continues sur [0,1] dont le pdf est "simple"? Cela semble remplir chaque partie de ce que vous y énumérez.

* (dont le mode est délimité des points de terminaison)

  • courbe en s - garantie par l'unimodalité (avec le mode pas aux points terminaux)

  • paramétrique - en donnant n'importe quelle famille spécifique qui a des paramètres

  • 0 correspond à 0, 1 correspond à 1 strictement - c'est ce que font les fonctions de distribution sur [0,1]; vous avez juste besoin que la densité soit> 0 in (0,1)

  • dérivé simple - c'est le pdf, donc si le pdf est "simple" selon le critère qui vous convient, vous avez terminé.

Il y en a (comme l'a dit Alex R) un nombre infini. La bêta qu'il mentionne est évidente, mais le cdf est la fonction bêta incomplète, donc vous auriez besoin de quelque chose pour l'évaluer --- c'est une fonction standard dans de nombreux packages (y compris presque tous les packages de statistiques décents), donc je doute que être difficile. Notez cependant que tous les bêtas ne sont pas unimodaux (avec le mode pas aux extrémités), donc la famille comprend également les cdfs qui ne sont pas en forme de "s".

Voici des photos de trois familles relativement simples:

entrez la description de l'image ici

Il existe de nombreux autres choix et de nouveaux peuvent facilement être construits.

-

En réponse à la modification de la question:

c=12μαβαα+β12

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.