Mam (symetryczną) macierz, M
która reprezentuje odległość między każdą parą węzłów. Na przykład,
ABCDEFGHIJKL A 0 20 20 20 40 60 60 60 100 120 120 120 B 20 0 20 20 60 80 80 80 120 140 140 140 C 20 20 0 20 60 80 80 80 120 140 140 140 D 20 20 20 0 60 80 80 80 120 140 140 140 E 40 60 60 60 0 20 20 20 60 80 80 80 F 60 80 80 80 20 0 20 20 40 60 60 60 G 60 80 80 80 20 20 0 20 60 80 80 80 H 60 80 80 80 20 20 20 0 60 80 80 80 I 100 120 120 120 60 40 60 60 0 20 20 20 J 120 140 140 140 80 60 80 80 20 0 20 20 K 120140 140 140 80 60 80 80 20 20 0 20 L 120 140 140 140 80 60 80 80 20 20 20 0
Czy istnieje metoda wyodrębniania klastrów M
(w razie potrzeby można ustalić liczbę klastrów), tak aby każdy klaster zawierał węzły o niewielkich odległościach między nimi. Na przykład, klastry byłoby (A, B, C, D)
, (E, F, G, H)
i (I, J, K, L)
.
Próbowałem już UPGMA i k
-means, ale powstałe klastry są bardzo złe.
Odległości są średnimi krokami, które wykonałby przypadkowy chodzik, aby przejść od węzła A
do węzła B
( != A
) i wrócić do węzła A
. Jest gwarantowane, że M^1/2
to metryka. Aby uruchomić k
-means, nie używam centroidu. Definiuję odległość między n
skupieniem węzłów c
jako średnią odległość między n
wszystkimi węzłami i c
.
Wielkie dzięki :)
clustering
Yassin
źródło
źródło
Odpowiedzi:
Istnieje wiele opcji.
Grupowanie k-medoidów
Po pierwsze, możesz spróbować podzielić na partycje wokół medoidów (pam) zamiast używać klastrowania k-średnich. Ten jest bardziej solidny i może dawać lepsze wyniki. Van der Laan przerobił algorytm. Jeśli zamierzasz wdrożyć go sam, jego artykuł jest wart przeczytania.
Istnieje specjalny algorytm grupowania k-medoidów dla dużych zestawów danych. Algorytm nazywa się Clara w R i jest opisany w rozdziale 3 Znajdowanie grup w danych: Wprowadzenie do analizy skupień. autorzy: Kaufman, L i Rousseeuw, PJ (1990).
grupowanie hierarchiczne
Zamiast UPGMA możesz wypróbować inne hierarchiczne opcje klastrowania. Przede wszystkim, gdy korzystasz z hierarchicznego klastrowania, upewnij się, że poprawnie zdefiniowałeś metodę partycjonowania. Ta metoda podziału jest zasadniczo sposobem obliczania odległości między obserwacjami a skupieniami. Najczęściej używam metody Warda lub pełnego powiązania, ale inne opcje mogą być dla ciebie wyborem.
Nie wiem, czy już go wypróbowałeś, ale w aplikacjach filogenetycznych często preferowana jest metoda pojedynczego łączenia lub łączenie sąsiadów nad UPGMA. Jeśli jeszcze tego nie wypróbowałeś, możesz również spróbować, ponieważ często daje to wyjątkowo dobre wyniki.
W R możesz spojrzeć na klaster pakietów . Wszystkie opisane algorytmy są tam zaimplementowane. Zobacz? Pam,? Clara,? Hclust, ... Sprawdź także inną implementację algorytmu w? Kmeans. Czasami wybranie innego algorytmu może znacznie poprawić klastrowanie.
EDYCJA: Pomyślałem o czymś: jeśli pracujesz z wykresami i węzłami oraz polubieniami, powinieneś również przyjrzeć się algorytmowi klastrowania markowa. Ten jest używany na przykład w grupowaniu sekwencji na podstawie podobieństwa wybuchu i działa niesamowicie dobrze. Może zrobić dla Ciebie grupowanie lub dać kilka pomysłów na rozwiązanie problemu badawczego, na którym się koncentrujesz. Nie wiedząc nic na ten temat, sądzę, że zdecydowanie warto przyjrzeć się jego wynikom. Jeśli mogę tak powiedzieć, nadal uważam tę metodę Stijn van Dongen za jeden z najładniejszych wyników w grupowaniu, jakie kiedykolwiek spotkałem.
http://www.micans.org/mcl/
źródło
Jednym ze sposobów wyróżnienia klastrów w macierzy odległości jest skalowanie wielowymiarowe . Podczas projekcji osób (tutaj, jak to nazywacie waszymi węzłami) w przestrzeni 2D, zapewnia porównywalne rozwiązanie do PCA. Nie jest to nadzorowane, więc nie będziesz mógł z góry określić liczby klastrów, ale myślę, że może to pomóc w szybkim podsumowaniu danej macierzy odległości lub podobieństwa.
Oto, co możesz uzyskać ze swoimi danymi:
Dodałem małe drgania na współrzędnych xiy, aby umożliwić rozróżnianie przypadków. Zamień
tmp
na,1-tmp
jeśli wolisz pracować z odmiennościami, ale daje to zasadniczo ten sam obraz. Oto jednak hierarchiczne rozwiązanie klastrowe z kryteriami pojedynczej aglomeracji:Możesz dodatkowo udoskonalić wybór klastrów w oparciu o dendrogram lub bardziej niezawodne metody, patrz np. To powiązane pytanie: Jakie kryteria stop dla aglomeracyjnego hierarchicznego klastrowania są stosowane w praktyce?
źródło
Grupowanie widmowe [1] wymaga macierzy powinowactwa, grupowanie jest zdefiniowane przez pierwszych funkcji własnych rozkładuK
Gdy jest macierzą powinowactwa danych, a jest macierzą diagonalną zdefiniowaną jako (edytuj: przepraszam za niejasność, ale możesz wygenerować macierz powinowactwa z macierzy odległości pod warunkiem, że znasz maksimum możliwe / rozsądna odległość jako , chociaż istnieją również inne schematy)A D Aij=1−dij/max(d)
Ponieważ jest składową elektroniczną , z funkcjami własnymi ułożonymi jako kolumny, zachowując tylko największych wektorów własnych w , definiujemy macierz znormalizowanąX L K X
Każdy wiersz jest punktem w i może być grupowany za pomocą zwykłego algorytmu grupowania (np. K-średnich).Y Rk
Spójrz na moją odpowiedź tutaj, aby zobaczyć przykład: https://stackoverflow.com/a/37933688/2874779
[1] Ng, AY, Jordan, MI i Weiss, Y. (2002). Na temat grupowania widmowego: analiza i algorytm. Postępy w neuronowych systemach przetwarzania informacji, 2, 849–856. Str.2
źródło
Próbujesz zgromadzić razem węzły wykresu lub sieci, które są blisko siebie. Istnieje cała dziedzina badań poświęcona temu problemowi, która jest czasami nazywana wykrywaniem społeczności w sieciach . Patrząc na problem z tego punktu widzenia, prawdopodobnie można to wyjaśnić.
Znajdziesz wiele algorytmów poświęconych temu problemowi, a niektóre z nich opierają się na tej samej idei, którą miałeś, a mianowicie na pomiarze odległości między węzłami za pomocą losowych spacerów.
Problem jest często formułowany jako optymalizacja modułowości [1], w której modułowość klastra mierzy, jak dobrze klaster dzieli sieć w gęsto połączonych klastrach (tj. Klastrach, w których węzły są blisko siebie).
W rzeczywistości możesz pokazać, że modułowość jest równa prawdopodobieństwu, że losowy walker pozostaje, po jednym kroku, w tych samych klastrach, niż początkowo minus to samo prawdopodobieństwo dla dwóch niezależnych walkerów [2].
Jeśli zezwolisz na więcej kroków losowych spacerowiczów, szukasz bardziej zgrubnego grupowania sieci. Liczba kroków losowego przejścia odgrywa zatem rolę parametru rozdzielczości, który pozwala odzyskać hierarchię klastrów. W tym przypadku ilość wyrażająca tendencję losowych spacerowiczów do pozostania w początkowej grupie po t krokach nazywa się stabilnością Markowa podziału w czasie t [2] i jest równoważna modułowości, gdy t = 1 .
Możesz zatem rozwiązać swój problem, znajdując klaster wykresu, który optymalizuje stabilność w danym czasie t , gdzie t jest parametrem rozdzielczości (większe t da większe klastry). Jedną z najczęściej stosowanych metod optymalizacji stabilności (lub modułowości z parametrem rozdzielczości) jest algorytm Louvaina [3]. Implementację można znaleźć tutaj: https://github.com/michaelschaub/generalizedLouvain .
[1] Newman, MEJ i Girvan, M. Znajdowanie i ocena struktury społeczności w sieciach. Phys. Rev. E 69, 026113 (2004).
[2] Delvenne, J.-C., Yaliraki, SN i Barahona, M. Stabilność społeczności grafów w różnych skalach czasowych. Proc. Natl. Acad Sci. 107, 12755–12760 (2010).
[3] Blondel, VD, Guillaume, J.-L., Lambiotte, R. & Lefebvre, E. Szybki rozwój społeczności w dużych sieciach. J. Stat. Mech Teoria Exp. 2008, P10008 (2008).
źródło
Cóż, możliwe jest wykonanie grupowania K-środków na danej macierzy podobieństwa, najpierw trzeba wyśrodkować macierz, a następnie wziąć wartości własne macierzy. Ostatnim i najważniejszym krokiem jest pomnożenie dwóch pierwszych zestawów wektorów własnych przez pierwiastek kwadratowy przekątnych wartości własnych, aby uzyskać wektory, a następnie przejść dalej za pomocą średnich K. Poniżej kod pokazuje, jak to zrobić. Możesz zmienić macierz podobieństwa. fpdist jest macierzą podobieństwa.
źródło
Zanim spróbujesz uruchomić grupowanie na macierzy, możesz spróbować wykonać jedną z technik analizy czynnikowej i zachować tylko najważniejsze zmienne do obliczenia macierzy odległości. Inną rzeczą, którą możesz zrobić, to spróbować użyć metod rozmytych, które zwykle działają lepiej (przynajmniej z mojego doświadczenia) w tego rodzaju przypadkach, spróbuj najpierw Cmeans, Fuzzy K-medoidów i Specjalnie GKCmeans.
źródło
Myślę, że ko-klastrowanie jest jedną z odpowiedzi. Ale nie jestem tutaj ekspertem. Wspólne tworzenie klastrów nie jest metodą nowonarodzoną, więc możesz znaleźć trochę alg w R, wiki pokazuje te koncepcje w dobry sposób. Inną metodą, o której nie wspomniano, jest podział na wykresy (ale widzę, że wykres nie byłby rzadki, podział na wykresy byłby przydatny, gdyby w macierzy dominowały wartości oznaczające = maksymalna odległość = brak podobieństwa między węzłami).
źródło
Spójrz na PROPAGACJĘ AFFINITY, Ta technika przyjmuje jako dane wejściowe macierz podobieństwa i tworzy optymalną liczbę klastrów wraz z reprezentatywnym przykładem dla każdego klastra.
źródło
Najpierw przekonwertuj macierz odległości na macierz współrzędnych za pośrednictwem https://math.stackexchange.com/a/423898, a następnie będziesz w stanie z łatwością skutecznie wykorzystać dowolny istniejący algorytm grupowania.
źródło
Możesz także użyć algorytmu Kruskala do znalezienia drzew o minimalnej rozpiętości, ale kończącego się, gdy tylko zdobędziesz trzy klastry. Próbowałem w ten sposób, aby uzyskać klastry, o których wspomniałeś: {ABCD}, {EFGH} i {IJKL}.
źródło