Czy ktoś może mi wytłumaczyć algorytm Lossy Counting? Jest to algorytm przesyłania strumieniowego dotyczący wyszukiwania częstotliwości elementów w strumieniu. Dzięki.Co to jest zliczanie strat?
Odpowiedz
Załóżmy, że patrzysz na ruch w profilach na Facebooku. Masz miliardy odsłon. Chcesz dowiedzieć się, które profile są najczęściej odwiedzane. Możesz zachować liczbę dla każdego profilu, ale wtedy będziesz mieć bardzo dużą liczbę zliczeń do śledzenia, z których ogromna większość byłaby bez znaczenia.
W przypadku liczenia stratnego okresowo usuwa się z tabeli bardzo niskie liczby elementów. Najczęściej odwiedzane profile prawie nigdy nie miałyby niskiego poziomu, a gdyby tak się stało, prawdopodobnie nie pozostałyby tam zbyt długo.
Algorytm zasadniczo polega na grupowaniu wejść na bloki lub kawałki i liczeniu w obrębie każdej porcji. Następnie zmniejszasz liczbę każdego elementu o jeden, zrzucając wszystkie elementy, których liczba spada do zera.
Najczęściej odwiedzane profile będą liczone i pozostaną tam. Dowolne profile, które nie trafią zbyt często, spadną do zera w kilku blokach i nie będziesz już musiał ich śledzić.
Należy pamiętać, że ostateczne wyniki są zależne od zamówienia, co zwiększa wagę do ostatnio przetwarzanych liczb. W niektórych przypadkach ma to sens i jest raczej pozytywną stroną, niż wadą. (Jeśli chcesz wiedzieć, które profile są obecnie najbardziej popularne, teraz chcesz ważyc dostęp częściej niż dostęp w zeszłym miesiącu.)
Istnieje wiele udoskonaleń algorytmu. Ale podstawową ideą jest to, aby znaleźć ciężkie hitters bez konieczności śledzenia każdego elementu, okresowo oczyścić swoje liczby z wszelkich elementów, które nie wydają się być ciężkie hitters na podstawie danych do tej pory.
Możesz znaleźć wyjaśnienie, w jaki sposób liczenie strat (i lepkie próbkowanie) działa on this blog post i open-source version here.
Najczęściej oglądane przedmioty "przeżyją". Biorąc pod uwagę próg częstotliwości f, błąd częstotliwości e oraz całkowitą liczbę elementów N, dane wyjściowe można wyrazić w następujący sposób: Elementy z liczbą przekraczającą fN - eN.
Najgorszy przypadek jakiego potrzebujemy (1/e) * log (eN) liczników.
Na przykład, możemy chcieć wydrukować strony Facebooka osób, które dostały uderzenie ponad 20%, z progiem błędu 2% (zasada: błąd = 10% progu częstotliwości).
Dla częstotliwości f = 20%, e = 2%, wszystkie elementy o częstotliwości rzeczywistej przekraczającej f = 20% będą wyprowadzane - nie ma fałszywych negatywów. Ale zaniżamy. Częstotliwość wyjściowa elementu może być mniejsza od jego rzeczywistej częstotliwości o co najwyżej 2%. Fałszywe wyniki mogą pojawić się z częstością między 18% a 20%. Ostatni, żaden element z częstotliwością mniejszą niż 18% nie będzie wyprowadzany.
okno rozmiar 1/E Biorąc pod uwagę następujące gwarancje przytrzymanie:
- Częstotliwości są niedoszacowane przez co najwyżej E * N
- Brak wyników fałszywie ujemnych
- Fałszywe mieć prawdziwą częstotliwością co najmniej f N - e N
Link pomaga, dzięki ~ – DiveInto
- 1. Co to jest Serializable? Co to znaczy?
- 2. Co to jest "usuń to"?
- 3. Co to jest Pagel?
- 4. Co to jest _GLOBAL_OFFSET_TABLE?
- 5. Co to jest "android.R.layout.simple_list_item_1"?
- 6. Co to jest DetailsView.EnableModelValidation?
- 7. Co to jest NSPathStore2?
- 8. Co to jest czasownik = "*"?
- 9. Co to jest Postgresql_psycopg2?
- 10. Co to jest ?
- 11. co to jest .netrwhist?
- 12. co to jest Microsoft.Practices.EnterpriseLibrary.Data
- 13. Co to jest CGVector?
- 14. Co to jest $ {project.licensePath}?
- 15. co to jest alloc.h?
- 16. Co to jest PurpleEventCallback?
- 17. Co to jest global ::?
- 18. Co to jest? rodzaj?
- 19. Co to jest __meteor_bootstrap__?
- 20. Co to jest NuGetPackageImportStamp?
- 21. Co to jest LazyList?
- 22. Co to jest IllegalStateException?
- 23. Co to jest "loadall.so"?
- 24. Co to jest ws: //?
- 25. Co to jest DNVM?
- 26. Co to jest kthreadd_task
- 27. Co to jest AppDomain?
- 28. Co to jest klabject?
- 29. Co to jest UIViewController
- 30. Co to jest głód?
W innych źródłach są bloki lub kawałki nazwane jako wiadra? – neilmarion
Czy mógłbyś przedstawić pseudokod kodu, aby był on bardziej czytelny? Bardzo doceniony sir David. – neilmarion
to przykładowa implementacja https://github.com/mayconbordin/streaminer –