Gibt es eine Formel für eine s-förmige Kurve mit Domäne und Bereich [0,1]

10

Grundsätzlich möchte ich Ähnlichkeitsmaße in Gewichte umwandeln, die als Prädiktoren verwendet werden. Die Ähnlichkeiten werden auf [0,1] sein, und ich werde die Gewichte so einschränken, dass sie auch auf [0,1] liegen. Ich hätte gerne eine Parameterfunktion, die dieses Mapping ausführt, das ich wahrscheinlich mithilfe des Gradientenabfalls optimieren werde. Die Anforderungen sind, dass 0 Karten auf 0, 1 Karten auf 1 und es streng erhöht wird. Eine einfache Ableitung wird ebenfalls geschätzt. Danke im Voraus

Edit: Danke für die bisherigen Antworten, die sind sehr hilfreich. Um meinen Zweck klarer zu machen, ist die Aufgabe die Vorhersage. Meine Beobachtungen sind extrem spärliche Vektoren mit einer einzigen Dimension, die vorhergesagt werden kann. Meine Eingabedimensionen werden verwendet, um die Ähnlichkeit zu berechnen. Meine Vorhersage ist dann eine gewichtete Summe des Wertes anderer Beobachtungen für den Prädiktor, wobei das Gewicht eine Funktion der Ähnlichkeit ist. Der Einfachheit halber beschränke ich meine Gewichte auf [0,1]. Es ist jetzt hoffentlich offensichtlich, warum ich 0 benötige, um 0 zuzuordnen, 1, um 1 zuzuordnen, und damit es streng zunimmt. Wie Whuber darauf hingewiesen hat, erfüllt die Verwendung von f (x) = x diese Anforderungen und funktioniert tatsächlich ziemlich gut. Es sind jedoch keine Parameter zu optimieren. Ich habe viele Beobachtungen, so dass ich viele Parameter tolerieren kann. Ich werde den Gradientenabstieg von Hand codieren, daher bevorzuge ich eine einfache Ableitung.

Zum Beispiel sind viele der gegebenen Antworten symmetrisch um 0,5. Es wäre nützlich, Parameter zum Verschieben nach links / rechts zu haben (z. B. bei der Beta-Verteilung).

user117053
quelle
4
erfüllt jede Ihrer Anforderungen. f(x)=x
whuber
Ich habe als Antwort auf Ihre Bearbeitung ein wenig hinzugefügt, um die Verschiebung von links nach rechts zu steuern. Alle drei Beispielfamilien in meinem Bild haben eine direkte Möglichkeit, dies zu kontrollieren.
Glen_b -Reinstate Monica

Antworten:

8

Hier ist eine:

y=11+(x1x)β

wo ist > 0β>0

[! [] [1]] 2

Ismam Huda
quelle
Ist dies eine Standardfunktion wie die von s i n ? Ich bin daran interessiert, es in der Ehe zu identifizieren, aber ich konnte nicht. Könnten Sie bitte eine Referenz geben? tanhsin
Darkmoor
Hallo Darkmoor, ich habe diese Gleichung erhalten, indem ich mit der "inversen Logit-Funktion" herumgespielt habe. Sie können sehen, dass es y = inverses logit (x) = 1 / (1 + e ^ -x) ähnelt,
weil
2
Sie können eine zusätzliche Anpassungsstufe hinzufügen, um die Position, an der die Funktion gleich 0,5 ist, mit y = 1 / (1+ (x ^ r / (1-x ^ r)) ^ - b) abzustimmen. . Um y = 0,5 bei x0 zu erreichen, setze r = -log (2) / log (x0). Oder wenn Sie sicherstellen möchten, dass y = k für einige k zwischen 0 und 1 bei x = x0 ist, setzen Sie r = -log ((1 / k - 1) ^ (1 / b) +1) / log (x0)
Wmmsmith
7

Wie bereits von @whuber kommentiert, erfüllt die Funktion die drei von Ihnen genannten Anforderungen (dh 0 entspricht 0, 1 entspricht 1 und die Funktion nimmt strikt zu). Im Titel Ihrer Frage scheinen Sie darauf hinzuweisen, dass Sie auch daran interessiert sind, dass die Funktion S-förmig ist, wie in der Sigmoid / Logistic-Kurve. Ist das richtig? In diesem Fall sollten Sie auf jeden Fall die folgende Logistikfunktion ausprobieren, die ungefähr alle 4 von Ihnen angegebenen Kriterien erfüllt: 1f(x)=x .

11+ek(x0.5)

Das in dieser Gleichung steuert die Steigung Ihrer Kurve. Durch Ändern von k können Sie auch steuern, wie nahe f ( 0 ) und f ( 1 ) an 0 bzw. 1 liegen. Zum Beispiel für k = 20 ist f ( 0 ) = 4,539787 e - 05 und f ( 1 ) = 0,9999546 .kkf(0)f(1)k=20f(0)=4.539787e05f(1)=0.9999546

Die Ableitung dieser Funktion kann leicht berechnet werden als:

kek(x0.5)(1+ek(x0.5))2
user3487564
quelle
Diese Funktion bildet 1 -> 1 nicht ab. Tatsächlich ist f -> 1 x -> ∞. Abhängig von k mag der Wert von f bei x = 1 ziemlich klein sein, aber er wird niemals genau 0 sein. Tatsächlich ist dies der Hauptgrund für die Verwendung von e ^ ... im Nenner, dh dass die relevante Domäne ist [0, ∞) anstelle von [0,1].
Wmmsmith
7

Lassen Sie mich die allgemeinste Lösung anbieten, die den Anforderungen entspricht: Sie erhalten die größtmögliche Flexibilität bei der Auswahl und Optimierung.

Wir können "S-förmig" als eine monoton ansteigende Kurve interpretieren (weil die Transformation eins zu eins sein sollte), die aus einem Teil besteht, der nach oben konkav ist, und einem anderen Teil, der nach unten konkav ist. Wir können uns darauf konzentrieren, die linke Hälfte nach unten konkav zu machen, da der andere Typ (mit der linken Hälfte nach oben konkav) durch Invertieren solcher Transformationen erhalten wird.

ff

f

Diese zweite Ableitung kann praktisch alles : Alles, was wir brauchen, ist das

  • es ist integrierbar,

  • [0,k)

  • (k,1]

f

f

f(x)=0xf(t)dt

und

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

fff(0)f(1)=CfC


f

Zahl

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")
whuber
quelle
7

Wofür Sie dies verwenden möchten, ist mir nicht besonders klar, daher kann ich nicht sagen, ob dies sinnvoll ist, aber die Erfüllung all Ihrer Kriterien scheint ziemlich trivial zu sein.

  • s-förmige Kurve

  • parametrische Funktion

  • 0 Karten auf 0, 1 Karten auf 1, streng steigend

  • einfache Ableitung

Warum also nicht einfach eine geeignete spezifische Familie kontinuierlicher unimodaler * Verteilungen auf [0,1] nehmen, deren PDF "einfach" ist? Das scheint jeden Teil dessen zu erfüllen, was Sie dort auflisten.

* (dessen Modus von den Endpunkten entfernt ist)

  • s-förmige Kurve - garantiert durch Unimodalität (mit Modus nicht an Endpunkten)

  • parametrisch - durch Angabe einer bestimmten Familie mit Parametern

  • 0 Karten auf 0, 1 Karten auf 1 nehmen streng zu - das ist, was Verteilungsfunktionen auf [0,1] tun; Sie brauchen nur die Dichte> 0 in (0,1)

  • einfache Ableitung - das ist das PDF. Wenn das PDF also nach einem für Sie geeigneten Kriterium "einfach" ist, sind Sie fertig.

Es gibt (wie Alex R sagte) unendlich viele davon. Die Beta, die er erwähnt, ist offensichtlich, aber das PDF ist die unvollständige Beta-Funktion. Sie benötigen also etwas, um dies zu bewerten. Es ist eine Standardfunktion in vielen Paketen (einschließlich fast aller anständigen Statistikpakete), daher bezweifle ich, dass dies der Fall ist schwierig sein. Beachten Sie jedoch, dass nicht alle Betas unimodal sind (mit dem Modus nicht am Ende), sodass die Familie auch CDFs umfasst, die nicht "s" geformt sind.

Hier sind Bilder von drei einigermaßen einfachen Familien:

Geben Sie hier die Bildbeschreibung ein

Es gibt viele andere Möglichkeiten und neue können leicht konstruiert werden.

- -

Als Antwort auf die Bearbeitung der Frage:

c=12μαβαα+β12

Glen_b - Monica neu starten
quelle