Przeprowadzam kilka testów skupiających dużą liczbę bardzo dużych rzadkich wektorów reprezentujących częstotliwościowo-odwrotne częstotliwości dokumentów różnych dokumentów hipertekstowych. Jaki algorytm zaproponujesz do grupowania tych danych, biorąc pod uwagę proporcje zbioru danych? Wymiar wektorów będzie> 3 · 10 , a liczba wektorów może wynosić około 10 . Przyjrzałem się algorytmom dbscan i optyki. Liczba klastrów nie jest znana. A indeks przestrzenny o tak dużej wymiarowości wydaje się skomplikowany.Clustering ogromnej przestrzeni wektorowej
Odpowiedz
Osiągnąłem prawie tak dobre wyniki z prostym skupiskiem K, jak prawie wszystkim, i jest zdecydowanie szybsze niż większość alternatyw. Osiągnąłem również dobre wyniki w przypadku aglomeracji parami, ale jest to trochę wolniej. W przypadku K-średnich musisz zacząć od pewnej szacowanej liczby klastrów, ale możesz dostosować ją algorytmicznie w miarę upływu czasu. Jeśli znajdziesz dwa klastry ze środkami, które są zbyt blisko siebie, zmniejszasz liczbę klastrów. Jeśli znajdziesz klastry o zbyt dużym zakresie odmian, wypróbuj więcej klastrów. Stwierdziłem, że sqrt (N) jest rozsądnym punktem wyjścia - ale zwykle zaczynam od więcej niż 10^7 dokumentów niż 10^9. W przypadku 10^9 może to nieco zmniejszyć.
Jeśli jednak było to zależne ode mnie, to bardzo ciężko by mi było zacząć od zredukowania wymiarów za pomocą czegoś takiego jak Landmark MDS, , a następnie podczas łączenia w klastry.
Drzewa decyzyjne są popularne do wydajnej pracy w przestrzeniach wielowymiarowych. Sprawdź listę Clustering Via Decision Tree Construction.
Ponadto, Randomized Forests są wyjątkowo wydajnymi uczniami i OpenCV implementation exists, jeśli chcesz się z nimi bawić.
Słyszałem, że semantic hashing osiąga doskonałe wyniki. Jednak głębokie sieci przekonań są dość trudne do wdrożenia. Możesz spróbować min haszowania (to jest podejście probabilistyczne) lub locality sensistive hashing for euclidean spaces.
Generalnie, klastrowanie w tak dużych przestrzeniach wymiarowych jest trudne z powodu klątwy wymiarów i faktu, że większość przedmiotów ma do siebie podobne odległości. Standardowe podejścia, takie jak K-średnie, mogą zadziałać, jeśli wcześniej zmniejszysz wymiarowość za pomocą SOM lub PCA.
Dzięki za interesujące linki. – piotr
Gdy grupowanie danych zawsze będę próbować przynajmniej te dwa algorytmy w następującej kolejności:
K oznacza: spróbuj szczypanie wyniki w jak największym stopniu. Jeśli potrafisz sprawić, by K-Means działał dla ciebie i zapewniał przyzwoite wyniki, prawie na pewno nie zrobisz tego lepiej, gdy będzie jakikolwiek inny algorytm.
Maksymalizacja oczekiwań: algorytm K-średnich został opracowany jako tania i dobra alternatywa dla algorytmu EM. Algorytm EM jest trudniejszy do zrozumienia i droższy do obliczenia, ale wyniki EM są doskonałe. Możesz dowiedzieć się więcej o EM http://en.wikipedia.org/wiki/Expectation-maximization_algorithm. Jest to implementacja OpenCV EM: http://opencv.willowgarage.com/documentation/expectation-maximization.html
Jeżeli wyniki żadna z tych dwóch są zadowalające, chciałbym zacząć szukać gdzie indziej, ale nie dopóki nie próbowałem obu.
Czy K-średnich nie jest instancją EM? – bayer
@bayer: Nie, z pewnością nie są one tym samym algorytmem, jeśli to masz na myśli. K-Means jest nieparametryczny, ale EM jest (co oznacza, że EM twierdzi, że istnieje bazowy wielozmienny rozkład gaussowski dla danych, który nie jest bardzo rygorystycznym założeniem, jeśli wziąć pod uwagę centralne twierdzenie graniczne.) Z tego co rozumiem, EM algorytm jest czasami grupowany jako meta-algorytm, w którym znajdują się inne algorytmy. Może faktycznie zostać wdrożony niezależnie od tego, co widziałem. – ldog
- 1. Zastąp ciąg przy użyciu ogromnej przestrzeni sterty
- 2. Wieże pochodne i sposób korzystania z pakietu przestrzeni wektorowej (haskell)
- 3. Jak rozróżnić całki z biblioteką przestrzeni wektorowej (haskell)
- 4. Matlab: K-means clustering
- 5. R Clustering "czystość" metryki
- 6. Clustering Photos in R?
- 7. Node.js Multi Server Clustering
- 8. Usuwanie ogromnej ilości plików
- 9. Node.js Clustering - Co decyduje o równoważeniu obciążenia?
- 10. Odwołanie do zmiennej składowej wektorowej
- 11. Wykonaj moduł w ogromnej liczbie?
- 12. Oczyszczenie ogromnej biblioteki Perla Codebase
- 13. Tworzenie grafiki wektorowej za pomocą PHP
- 14. C++ literały wektorowej lub coś im
- 15. Format schowka grafiki wektorowej dla Qt
- 16. Dołącz metadane do kolumny wektorowej w Spark
- 17. Open source C++ biblioteka do matematyki wektorowej
- 18. Używanie grafiki wektorowej XAML w aplikacji WPF
- 19. disambiguate nieunikalne elementy w postaci wektorowej
- 20. Jak indeksować sekwencję wektorową w sekwencji wektorowej
- 21. Wymiana elementu w jednostce sieci wektorowej
- 22. Zwolnienie pamięci ogromnej tablicy numpy w IPython
- 23. Jak agregować na ogromnej tablicy w mongoDB?
- 24. Ajax JQuery - po ogromnej wartości ciągu
- 25. React architektura dla ogromnej aplikacji biznesowej
- 26. Kompresja i wyszukiwanie ogromnej listy słów
- 27. Clustering ~ 100 000 krótkich łańcuchów w języku Python
- 28. Przeniesienie kodu przestrzeni użytkownika do przestrzeni jądra
- 29. Recycler Wyświetl elementy o dużej pustej przestrzeni po 23.2.0
- 30. Najlepszy format pliku dla skalowalnej grafiki wektorowej w Internecie?
K-średnie powinno ** zawsze ** być pierwszą techniką segmentacji, którą próbujesz, próbując zgrupować * wszystko *. Jest prosty, wydajny i zapewnia doskonałe wyniki przez większość czasu.Jedynym minusem jest konieczność wyboru odpowiedniej wartości K. Zawsze możesz wypróbować rosnącą sekwencję K, obliczającą wariancję międzygrupową jako kryterium jakości zgrupowania. To jednak nie działa tak dobrze w praktyce. – ldog