Zasadniczo chcę przekształcić miary podobieństwa w wagi, które są używane jako predyktory. Podobieństwa będą dotyczyć [0,1], a ja ograniczę wagi również do [0,1]. Chciałbym funkcji paramterycznej, która wykonuje to mapowanie, które prawdopodobnie zoptymalizuję za pomocą spadku gradientu. Wymagania są takie, że 0 map do 0, 1 map do 1 i będzie się stale zwiększać. Doceniana jest również prosta pochodna. Z góry dziękuję
Edycja: Dzięki za dotychczasowe odpowiedzi, są bardzo pomocne. Aby wyjaśnić mój cel, zadaniem jest przewidywanie. Moje obserwacje to bardzo rzadkie wektory z jednym wymiarem do przewidzenia. Moje wymiary wejściowe służą do obliczania podobieństwa. Moje przewidywanie jest wówczas ważoną sumą wartości innych obserwacji dla predyktora, gdzie waga jest funkcją podobieństwa. Dla uproszczenia ograniczam swoje wagi do [0,1]. Mam nadzieję, że teraz jest oczywiste, dlaczego potrzebuję 0, aby zmapować do 0, 1, aby zmapować do 1, i aby ściśle rosła. Jak zauważył whuber, użycie f (x) = x spełnia te wymagania i faktycznie działa całkiem dobrze. Jednak nie ma parametrów do optymalizacji. Mam wiele obserwacji, więc mogę tolerować wiele parametrów. Będę ręcznie kodować spadek gradientu, stąd moja preferencja dla prostej pochodnej.
Na przykład wiele podanych odpowiedzi jest symetrycznych względem .5. Przydałby się parametr do przesuwania w lewo / w prawo (np. Z rozkładem wersji beta)
źródło
Odpowiedzi:
Tutaj jest jeden:
gdzie jestβ >0
] 2
źródło
Jak już skomentował @whuber, funkcja spełnia trzy wymienione przez ciebie wymagania (tj. 0 map do 0, 1 map do 1, a funkcja ściśle się zwiększa). W tytule twojego pytania wydajesz się wskazywać, że interesuje Cię również funkcja w kształcie litery S, jak w krzywej Sigmoid / Logistic. Czy to jest poprawne? W takim przypadku z pewnością powinieneś wypróbować następującą funkcję logistyczną, która w przybliżeniu spełni wszystkie 4 określone kryteria: .f(x)=x
w równaniu będzie kontrolować nachylenie swojej krzywej. Zmiana będzie również pozwalają kontrolować, jak blisko i są na 0 i 1, odpowiednio. Na przykład w przypadku , i .k k f(0) f(1) k=20 f(0)=4.539787e−05 f(1)=0.9999546
Pochodną tej funkcji można łatwo obliczyć jako: Więcej informacji na temat tej funkcji można można znaleźć na https://en.wikipedia.org/wiki/Logistic_function
źródło
Pozwól, że przedstawię najbardziej ogólne rozwiązanie zgodne z wymaganiami: zapewni Ci największą elastyczność w wyborze i optymalizacji.
Możemy interpretować „w kształcie litery S” jako monotonicznie rosnącą krzywą (ponieważ transformacja powinna być jeden do jednego) składająca się z jednej części wklęsłej w górę i drugiej części wklęsłej w dół. Możemy skupić się na uczynieniu lewej połowy wklęsłym, ponieważ drugi typ (z lewą połówką wklęsłą do góry) uzyskuje się poprzez odwrócenie takich przekształceń.
Ponieważ transformacja ma być różniczkowalna, musi zatem mieć malejącą pochodną w lewej połowie i rosnącą pochodną w prawej połowie. Niezależnie od tego pochodna musi być nieujemna i może wynosić zero tylko w izolowanym punkcie (jeśli w ogóle: minimalna wartość pochodnej daje najmniejszy spadek transformacji).f f′
Nie jest wymagane, aby pochodna była różniczkowalna, ale w praktyce możemy przypuszczać, że jest różniczkowalna prawie wszędzie z pochodną .f′′
Ta druga pochodna może zrobić praktycznie wszystko : potrzebujemy tylko tego
jest całkowalne,
jest mniejsze lub równe zero dla wszystkich wartości w pewnym przedziale po lewej stronie , i[0,k)
jest większe lub równe zero dla wszystkich wartości w prawym przedziale .(k,1]
Takie funkcje (i ich odwrotności) parametryzują zestaw wszystkich rozwiązań.f′′ (Istnieje pewna redundancja: zajmuje się nią ostatni etap normalizacji opisany poniżej.)
Fundamentalne twierdzenie rachunku całkowego pozwala nam odzyskać z dowolnej takiej specyfikacji. To jest,f
i
Warunki na gwarancji, że wzrasta monotonicznie od jego minimim do pewnego maksymalnego . Wreszcie, normalizacja przez podzielenie wartości poprzedniego całki przez .f′′ f f(0) f(1)=C f C
Oto ilustracja rozpoczynająca się od wersji losowego przejścia dla drugiej pochodnej. W nim pochodne nie zostały znormalizowane, ale transformacja została.f
Aby zastosować to podejście, możesz zacząć od wyrażenia analitycznego dla , być może zróżnicowanego o skończoną liczbę parametrów. Możesz to również określić, podając punkty na wykresie i interpolując między nimi - pod warunkiem, że interpolator przestrzega ujemności wartości na i dodatniej na . do wygenerowania ilustracji. Odpowiedni kod (poniżej) zawiera szczegóły obliczeń.f′′ [0,k) (k,1]
R
Takie podejście pozwala zaprojektować dowolną transformację. Możesz zacząć od szkicowania krzywej S, oszacowania jej (względnych) nachyleń , a następnie oszacowania jej nachyleń. Określ aby dopasować to ostatnie zdjęcie, a następnie przejdź do obliczenia a następnie .f′ f′′ f′ f
Zauważ, że które są najpierw wklęsłe w górę, a następnie wklęsłe w dół, można również uzyskać, negując na początku . Krytycznym warunkiem utworzenia krzywej w kształcie litery S jest to, że (poza możliwymi skokami na zbiorze miary zero) może faktycznie przekroczyć zero.f f′′ f′′
Nawiasem mówiąc, rozwiązanie powstaje przez ustawienie prawie wszędzie, co powoduje, że stała i dodatnia, skąd jest liniowy; normalizacja zapewnia, że nachylenie wynosi a punkt przecięcia wynosi . (Ustawienie stałej stałą i ujemną daje rozwiązanie .)f(x)=x f′′(x)=0 f′ f 1 0 f′ f(x)=1−x
źródło
To, czego próbujesz użyć, nie jest dla mnie szczególnie jasne, więc nie mogę powiedzieć, czy to ma sens, ale spełnienie wszystkich twoich kryteriów wydaje się dość trywialne.
Dlaczego więc nie wziąć żadnej wygodnej konkretnej rodziny ciągłych dystrybucji unimodalnych * na [0,1], którego pdf jest „prosty”? Wydaje się, że spełnia każdą część tego, co tam wymienisz.
* (którego tryb jest ograniczony od punktów końcowych)
Krzywa w kształcie litery S - gwarantowana przez jednomodalność (z trybem nie w punktach końcowych)
parametryczny - przez podanie dowolnej konkretnej rodziny, która ma parametry
0 mapuje na 0, 1 mapuje na 1 ściśle rosnący - to właśnie robią funkcje dystrybucji na [0,1]; wystarczy, że gęstość będzie wynosić> 0 cali (0,1)
prosta pochodna - to jest pdf, więc jeśli pdf jest „prosty” według dowolnego kryterium, które Ci odpowiada, to koniec.
Istnieje (jak stwierdził Alex R) nieskończona ich liczba. Wersja beta, o której wspomina, jest oczywista, ale cdf jest niekompletną funkcją beta, więc musisz coś ocenić, to --- jest to standardowa funkcja w wielu pakietach (w tym prawie we wszystkich pakietach z przyzwoitymi statystykami), więc wątpię, aby być trudne. Zauważ jednak, że nie wszystkie bety są jednomodalne (z trybem nie na końcach), więc rodzina obejmuje również pliki cdf, które nie mają kształtu „s”.
Oto zdjęcia trzech stosunkowo prostych rodzin:
Istnieje wiele innych opcji, a nowe można łatwo zbudować.
-
W odpowiedzi na edycję pytania:
Zauważ, że wszystkie trzy rodziny, które narysowałem, mają prosty sposób na uzyskanie przesunięć w lewo-prawo (i) dla rozkładu trójkątnego, parametr bezpośrednio przesuwa krzywą w lewo lub w prawo (tj. Kontroluje stopień asymetrii, jest przypadkiem symetrycznym); dla logitnormal parametr steruje asymetrią; dla dystrybucji beta kontroluje go znak (równoważnie znak ).c=12 μ α−β αα+β−12
źródło