Wersja skrócona: Jaka jest najbardziej wydajna obliczeniowo metoda szacowania trybu wielowymiarowego zestawu danych, próbkowanego z ciągłego rozkładu?
Wersja długa: Mam zestaw danych, który muszę oszacować dla trybu. Tryb nie pokrywa się ze średnią lub medianą. Przykład pokazano poniżej, jest to przykład 2D, ale rozwiązanie ND byłoby lepsze:
Obecnie moją metodą jest
- Oblicz oszacowanie gęstości jądra na siatce równej pożądanej rozdzielczości trybu
- Poszukaj największego obliczonego punktu
Oczywiście oblicza to KDE w wielu niewiarygodnych punktach, co jest szczególnie złe, jeśli istnieje wiele punktów danych o dużych wymiarach lub oczekuję dobrej rozdzielczości w trybie.
Alternatywą byłoby użycie symulowanego wyżarzania, algorytmu genetycznego itp., Aby znaleźć globalny pik w KDE.
Pytanie brzmi, czy istnieje mądrzejsza metoda wykonywania tego obliczenia?
Odpowiedzi:
Metodą, która pasuje do rachunku za to, co chcesz zrobić, jest algorytm przesunięcia średniego . Zasadniczo, średni przesunięciem polega na ruchu wzdłuż kierunku gradientu, który ocenia się nie parametrycznie z „cienia”, danego jądra . To znaczy, jeśli gęstość jest szacowana przez , to jest szacowana przez . Szczegóły szacowania gradientu gęstości jądra opisano w tym artykule , który również wprowadził algorytm przesunięcia średniego. K f ( x ) K ∇ f ( x ) K ′K′ K f(x) K ∇f(x) K′
Bardzo szczegółowy opis algorytmu znajduje się również w tym wpisie na blogu .
źródło
Jeśli twoim głównym zainteresowaniem są problemy dwuwymiarowe, powiedziałbym, że oszacowanie gęstości jądra jest dobrym wyborem, ponieważ ma ładne właściwości asymptotyczne (zauważ, że nie twierdzę, że jest najlepszy). Zobacz na przykład
W przypadku większych wymiarów (4+) ta metoda jest naprawdę powolna ze względu na dobrze znaną trudność w oszacowaniu optymalnej macierzy przepustowości, patrz .
Problem z poleceniem
ks
w pakiecieKDE
polega na tym, że, jak wspomniałeś, ocenia on gęstość w określonej siatce, co może być bardzo ograniczające. Ten problem można rozwiązać, jeśli używasz pakietuKDE
do oszacowania macierzy przepustowości, na przykładHscv
zaimplementując estymator gęstości jądra, a następnie optymalizując tę funkcję za pomocą poleceniaoptim
. Jest to pokazane poniżej przy użyciu danych symulowanych i jądra GaussaR
.Na przykład estymatory o ograniczonym kształcie są zwykle szybsze
Ale są one zbyt spiczasty do tego celu.
Problem w dużych wymiarach jest trudny do ataku niezależnie od zastosowanej metody ze względu na charakter samego pytania. Na przykład metoda zaproponowana w innej odpowiedzi (przesunięcie średnie) jest dobra, ale wiadomo, że oszacowanie pochodnej gęstości jest jeszcze trudniejsze niż oszacowanie samej gęstości pod względem błędów (nie krytykuję tego, tylko wskazuję jak trudny jest ten problem). Wtedy prawdopodobnie będziesz potrzebować tysięcy obserwacji, aby dokładnie oszacować tryb w wymiarach większych niż w przypadku problemów innych niż zabawki.4
Inne metody, które możesz rozważyć, to: dopasowanie wielowymiarowej skończonej mieszanki normalnych (lub innych elastycznych rozkładów) lub
Mam nadzieję, że to pomoże.
źródło
Niedawno opublikowaliśmy artykuł sugerujący szybki estymator trybu spójnego.
Nasz estymator ma złożoność czasową , gdzie jest wymiarowością, a jest liczbą obserwowanych punktów. Chociaż nasza metoda może nie być tak precyzyjna, jak inne już tu wspomniane, wypisujemy kompletne dowody na spójność i silną spójność.O(dn) d n
Sugerowałbym również nowe estymatory trybu minimalnej wariancji z mojego ostatniego artykułu
Te estymatory mają złożoność czasową dla punktów w . Zobacz rozdział 2.3 tam. Estymatory mają dokładność podobną do znanych algorytmów.O(dn2) n Rd
źródło