24 votos

¿Existe una fórmula para una curva en forma de s con dominio y rango [0,1]?

Básicamente, quiero convertir las medidas de similitud en pesos que se utilicen como predictores. Las similitudes estarán en [0,1], y restringiré los pesos para que también estén en [0,1]. Me gustaría una función paramétrica que hace este mapeo que probablemente voy a optimizar utilizando el descenso gradiente. Los requisitos son que 0 mapas a 0, 1 mapas a 1 y que sea estrictamente creciente. Una derivada simple también es apreciada.

Edita: Gracias por las respuestas hasta ahora, son muy útiles. Para dejar más claro mi propósito, la tarea es la predicción. Mis observaciones son vectores muy dispersos con una sola dimensión para predecir. Mis dimensiones de entrada se utilizan para calcular la similitud. Mi predicción es entonces una suma ponderada del valor de otras observaciones para el predictor donde el peso es una función de la similitud. Estoy limitando mis pesos en [0,1] para simplificar. Es de esperar obvio ahora por qué requiero 0 para asignar a 0, 1 para asignar a 1, y para que sea estrictamente creciente. Como whuber ha señalado utilizando f(x) =x cumple estos requisitos y en realidad funciona bastante bien. Sin embargo, no tiene parámetros para optimizar. Tengo un montón de observaciones para que pueda tolerar una gran cantidad de parámetros. Voy a ser la codificación de la mano el descenso del gradiente, por lo tanto, mi preferencia por una derivada simple.

Por ejemplo, gran parte de las respuestas dadas son simétricas en torno a .5. Sería útil disponer de parámetros para desplazar a la izquierda/derecha (como con la distribución beta)

19voto

learnr Puntos 1585

Aquí tienes una:

$y=\frac{1}{1+\left ( \frac{x}{1-x} \right )^{-\beta}}$

donde $\beta$ es $>0$

!   1 ] 2

11voto

AdamSane Puntos 1825

No tengo muy claro para qué quieres usar esto, así que no puedo decir si tiene sentido, pero cumplir todos tus criterios parece bastante trivial.

  • curva en forma de s

  • función paramétrica

  • 0 corresponde a 0, 1 corresponde a 1, estrictamente creciente

  • derivada simple

Entonces, ¿por qué no tomar cualquier familia específica conveniente de funciones de distribución continua unimodal* en [0,1] cuyo pdf sea "simple"? Eso parece cumplir cada parte de lo que enumeras ahí.

* (cuyo modo está acotado lejos de los extremos)

  • curva en forma de s - garantizada por la unimodalidad (con modo no en los extremos)

  • paramétrico - dando cualquier familia específica que tenga parámetros

  • 0 mapea a 0, 1 mapea a 1 estrictamente creciente - eso es lo que hacen las funciones de distribución en [0,1]; sólo necesitas que la densidad sea >0 en (0,1)

  • derivada simple -- eso es el pdf, así que si el pdf es "simple" según el criterio que te convenga, ya está.

Hay (como dijo Alex R) un número infinito de ellos. La beta que menciona es obvia, pero la cdf es la función beta incompleta, por lo que necesitaría algo para evaluarla. Es una función estándar en muchos paquetes (incluidos casi todos los paquetes de estadísticas decentes), por lo que dudo que sea difícil. Tenga en cuenta, sin embargo, que no todas las betas son unimodales (con la moda no en los extremos), por lo que la familia también abarca cdfs que no tienen forma de "s".

Aquí tienes fotos de tres familias razonablemente sencillas:

enter image description here

Hay muchas otras opciones y se pueden construir fácilmente otras nuevas.

--

En respuesta a la edición de la pregunta:

Obsérvese que las tres familias de las que he hecho dibujos tienen una forma sencilla de obtener desplazamientos izquierda-derecha (i) para la distribución triangular, el parámetro desplaza directamente la curva a izquierda o derecha (es decir, controla el grado de asimetría, $c=\frac12$ es el caso simétrico); para el logitnormal el $\mu$ controla la asimetría; para la distribución beta, el signo de ${\alpha-\beta}$ (equivalentemente, el signo de $\frac{\alpha}{\alpha+\beta}-\frac12$ ) lo controla.

8voto

Joel B Puntos 392

Como ya ha comentado @whuber la función $ f(x)=x $ cumple los tres requisitos que has mencionado (es decir, 0 corresponde a 0, 1 corresponde a 1 y la función es estrictamente creciente). En el título de su pregunta, parece indicar que también le interesa que la función tenga forma de S, como en la curva sigmoidea/logística. ¿Es correcto? En ese caso, debería probar la siguiente función logística, que cumple aproximadamente los 4 criterios que ha especificado: $$\frac{1}{1+e^{-k(x-0.5)}}$$ .

En $k$ en esta ecuación controlará la pendiente de tu curva. Cambiar $k$ también le permitirá controlar lo cerca $f(0)$ y $f(1)$ son a 0 y 1, respectivamente. Por ejemplo para $k=20$ , $f(0)=4.539787e-05$ y $f(1)=0.9999546$ .

La derivada de esta función se calcula fácilmente como: $$\frac{ke^{-k(x-0.5)}}{(1+e^{-k(x-0.5)})^2}$$ Encontrará más información sobre esta función en https://en.wikipedia.org/wiki/Logistic_function

8voto

jldugger Puntos 7490

Permítanme ofrecerles la solución más general y coherente con los requisitos: que le dará la mayor flexibilidad para elegir y optimizar.

Podemos interpretar "en forma de S" como un monotónicamente creciente curva (porque la transformación debe ser unívoca) formada por una parte cóncava hacia arriba y otra cóncava hacia abajo. Podemos centrarnos en que la mitad izquierda sea cóncava hacia abajo, porque el otro tipo (con la mitad izquierda cóncava hacia arriba) se obtiene invirtiendo dichas transformaciones.

Dado que la transformación $f$ se supone que es diferenciable, por lo que debe tener una derivada decreciente $f^\prime$ en la mitad izquierda y una derivada creciente en la mitad derecha. En cualquier caso, la derivada debe ser no negativa y sólo puede ser cero en un punto aislado (si es que lo es: el valor mínimo de la derivada da la menor pendiente de la transformación).

No se requiere que la derivada sea diferenciable, pero como cuestión práctica podemos suponer que es diferenciable en casi todas partes con derivada $f^{\prime\prime}$ .

Esta segunda derivada puede hacer prácticamente cualquier cosa : todo lo que necesitamos es que

  • es integrable,

  • es menor o igual que cero para todos los valores de algún intervalo de la izquierda $[0, k)$ y

  • es mayor o igual que cero para todos los valores del intervalo de la derecha $(k, 1]$ .

Estas funciones $f^{\prime\prime}$ (y sus inversos) parametrizan el conjunto de todas las soluciones. (Hay cierta redundancia: de ella se encarga un paso final de normalización que se describe más adelante).

El Teorema Fundamental del Cálculo nos permite recuperar $f$ de tout dicha especificación. Es decir,

$$f^\prime(x) = \int_0^x f^{\prime\prime}(t) dt$$

y

$$f(x) = \int_0^x f^\prime(t) dt.$$

Las condiciones de $f^{\prime\prime}$ garantizan que $f$ aumenta monotónicamente desde su mínimo $f(0)$ hasta un máximo $f(1) = C$ . Por último, normalice $f$ dividiendo los valores de la integral anterior por $C$ .


He aquí una ilustración que comienza con una versión de un paseo aleatorio para la segunda derivada. En ella, las derivadas no se han normalizado, pero la transformación $f$ ha sido.

Figure

Para aplicar este enfoque, puede comenzar con una expresión analítica para $f^{\prime\prime}$ que puede variar en función de un número finito de parámetros. También se puede especificar dando algunos puntos a lo largo de su gráfica e interpolando entre ellos--siempre que el interpolador respete la negatividad de los valores en $[0,k)$ y la positividad en $(k,1]$ . Este último es el método utilizado para generar la ilustración. El correspondiente R (más abajo) proporciona los detalles del cálculo.

Este enfoque le permite diseñar cualquier transformación que desee. Podrías empezar dibujando la curva en S, estimando sus pendientes (relativas) $f^\prime$ y a partir de ahí estimar sus pendientes. Especificar algunas $f^{\prime\prime}$ para que coincida con esta última imagen, y luego proceder a calcular $f^\prime$ y luego $f$ .

Tenga en cuenta que $f$ que primero son cóncavas hacia arriba y luego cóncavas hacia abajo también se pueden obtener negando $f^{\prime\prime}$ desde el principio. La condición crítica para crear una curva en forma de S es que (aparte de posibles excursiones en un conjunto de medida cero) $f^{\prime\prime}$ puede cruz cero como máximo una vez.

Por cierto, la solución $f(x)=x$ surge al establecer $f^{\prime\prime}(x)=0$ casi en todas partes, haciendo $f^\prime$ constante y positiva, de donde $f$ es lineal; la normalización asegura que la pendiente es $1$ y el intercepto es $0$ . (Hacer $f^\prime$ constante y negativa produce la solución $f(x)=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")

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X