Usiłuję zbudować skrót cosinus wrażliwy na lokalizację, aby znaleźć potencjalne pary podobnych przedmiotów bez konieczności porównywania każdej możliwej pary. Mam to w zasadzie działające, ale większość par w moich danych wydaje się mieć podobieństwo cosinus w zakresie od -0,2 do +0,2, więc staram się pokroić w kostkę dość dokładnie i wybrać rzeczy o podobieństwie cosinus 0,1 i wyższym.
Czytałem rozdział 3 „Górnicze ogromne zbiory danych”. Mówi on o zwiększeniu dokładności wyboru pary kandydatów przez wzmocnienie rodziny wrażliwej na lokalizację. Myślę, że prawie rozumiem matematyczne wyjaśnienie, ale staram się zobaczyć, jak praktycznie to zrealizuję.
To, co mam do tej pory, jest następujące
- Powiedziałem 1000 filmów, każdy z ocenami wybranych użytkowników 1 mln. Każdy film jest reprezentowany przez rzadki wektor wyników użytkownika (numer wiersza = identyfikator użytkownika, wartość = wynik użytkownika)
- Buduję N losowych wektorów. Długość wektora odpowiada długości wektorów filmowych (tj. Liczbie użytkowników). Wartości wektorowe to +1 lub -1. W rzeczywistości koduję te wektory jako binarne, aby zaoszczędzić miejsce, z +1 mapowanym na 1 i -1 mapowanym na 0
- Buduję wektory szkicowe dla każdego filmu, biorąc iloczyn iloczynu filmu i każdego z N losowych wektorów (a raczej, jeśli utworzę macierz R, układając N losowych wektorów poziomo i układając je jeden na drugim, a następnie szkic dla filmu m to R * m), a następnie przyjmuję znak każdego elementu w powstałym wektorze, więc kończę wektorem szkicu dla każdego filmu z + 1s i -1s, który ponownie koduję jako binarny. Każdy wektor ma długość N bitów.
- Następnie szukam podobnych szkiców, wykonując następujące czynności
- Podzieliłem wektor szkicu na pasma r bitów
- Każde pasmo bitów r jest liczbą. Łączę ten numer z numerem zespołu i dodaję film do segmentu mieszającego pod tym numerem. Każdy film można dodać do więcej niż jednego segmentu.
- Następnie patrzę w każde wiadro. Wszystkie filmy znajdujące się w tym samym segmencie są parami kandydującymi.
Porównując to do 3.6.3 mmds, mój krok AND ma miejsce, gdy patrzę na pasma bitów r - para filmów przechodzi krok AND, jeśli bity r mają tę samą wartość. Mój krok OR odbywa się w segmentach: filmy są parami kandydującymi, jeśli oba znajdują się w jednym z segmentów.
Książka sugeruje, że mogę „wzmocnić” moje wyniki, dodając więcej kroków AND i OR, ale brakuje mi praktycznego sposobu, aby to zrobić praktycznie, ponieważ wyjaśnienie procesu budowy kolejnych warstw polega raczej na sprawdzeniu równości par niż na parach wymyślanie numerów wiader.
Czy ktoś może mi pomóc zrozumieć, jak to zrobić?
źródło