Grupowanie danych 1D

16

Mam zestaw danych, chcę utworzyć klastry na tych danych na podstawie tylko jednej zmiennej (nie ma brakujących wartości). Chcę utworzyć 3 klastry na podstawie tej jednej zmiennej.

Którego algorytmu grupowania użyć, k-średnich, EM, DBSCAN itp.?

Moje główne pytanie brzmi: w jakich okolicznościach powinienem używać k-średnich zamiast EM lub EM ponad k-średnich?

Ali
źródło
1
Algorytm EM jest narzędziem ogólnego przeznaczenia służącym do oszacowania maksymalnego prawdopodobieństwa z brakującymi danymi - czy możesz bardziej szczegółowo określić, w jaki sposób jest to „algorytm grupowania”?
Makro
Używam weka jako narzędzia i zgodnie z algorytmem grupowania EM jest wymieniony jako algorytm. Przepraszam za kiepskie pytanie, jestem nowy w eksploracji danych.
Ali
Wiem, że algorytm EM służy do oszacowania maksymalnego prawdopodobieństwa dla modeli zmiennych ukrytych (które można uznać za „brakujące dane”), a zmienne ukryte są często używane do modelowania grupowania. Być może o to właśnie chodzi.
Makro
@macro: możesz na początek rzucić okiem: stat.washington.edu/mclust .
user603
3
Jaki jest cel grupowania? Podobnie jak w przypadku większości pytań statystycznych, istnieje wiele odpowiedzi, a znajomość celu jest niezbędnym przewodnikiem wyboru odpowiednich lub dobrych.
whuber

Odpowiedzi:

11

Algorytm K-średnich i algorytm EM będą bardzo podobne dla klastrowania 1D.

W K-średnich zaczynasz od zgadywania, gdzie są średnie i przypisujesz każdy punkt do klastra najbliższą średnią, a następnie ponownie obliczasz średnie (i wariancje) na podstawie bieżących przypisań punktów, następnie aktualizujesz przypisanie punktów, a następnie aktualizujesz środki ...

W EM zaczynasz od zgadywania, gdzie są średnie, a następnie obliczasz oczekiwaną wartość przypisań (zasadniczo prawdopodobieństwo, że każdy punkt znajduje się w każdym klastrze), a następnie aktualizujesz oszacowane średnie (i wariancje) przy użyciu oczekiwanych wartości jako wagi, a następnie oblicz nowe oczekiwane wartości, a następnie oblicz nowe środki ...

Podstawowa różnica polega na tym, że przypisanie punktów do klastrów w środkach K jest wszystkim lub niczym, gdzie EM daje proporcje / prawdopodobieństwo członkostwa w grupie (jeden punkt może być postrzegany jako mający 80% prawdopodobieństwa bycia w grupie A, 18% prawdopodobieństwa bycia w grupie B i 2% prawdopodobieństwa bycia w grupie C). Jeśli między grupami występuje duża separacja, wówczas 2 metody dadzą całkiem podobne wyniki. Ale jeśli zachodzi spore nakładanie się, wówczas EM prawdopodobnie da bardziej znaczące wyniki (nawet więcej, jeśli interesująca jest wariancja / odchylenie standardowe). Ale jeśli zależy ci tylko na przypisaniu członkostwa do grupy bez dbania o parametry, oznacza to, że K-znaczy jest prawdopodobnie prostsze.

Dlaczego nie zrobić obu i zobaczyć, jak różne są odpowiedzi? jeśli są podobne, wybierz prostszy, jeśli są różne, zdecyduj się na porównanie grupowania z danymi i wiedzą zewnętrzną.

Greg Snow
źródło
Dzięki gregowi twój post pomógł, zastosowałem oba i wydaje się, że EM wygenerował lepsze klastry niż k-mean. (Myślę, że dzieje się tak głównie dlatego, że dane, które posiadam, są ciągłe i nie ma żadnych luk). Nie jestem trochę zdezorientowany, ponieważ mam tylko dane 1D, prawdopodobnie powinienem wykonać binowanie, aby skategoryzować dane. Co myślisz? Co dokładnie rozumiesz przez parametry? Czy odnosi się do atrybutów instancji? Dzięki Ali
Ali
Sam Hm EM wydaje się niewystarczający. Potrzebujesz założenia dotyczącego rozkładu podstawowych rozkładów mieszaniny.
tomka
2

EM jest lepszy niż k-średnie pod względem wyników.

Środki K mają jednak szybszy czas działania.

Dadzą podobne wyniki, jeśli macierze odchylenia standardowego / kowariancji będą w przybliżeniu równe. Jeśli podejrzewasz, że to prawda, użyj k-średnich.

DBSCAN jest używany, gdy dane nie są gaussowskie. Jeśli używasz danych 1-wymiarowych, nie ma to na ogół zastosowania, ponieważ przybliżenie gaussowskie jest zwykle ważne w 1 wymiarze.

użytkownik52516
źródło
0

Innym prostym sposobem jest w zasadzie użycie sortowania tablicy 1D: tzn. Iteracja po każdym punkcie i uzyskanie wartości, które znajdują się w minimalnej odległości zarówno w kierunku dodatnim, jak i ujemnym. Na przykład:

data = [1,2,3,4,5,6,7,8,9,10,12]
k = 5
for a in data:
   print {'group': sorted(k, key=lambda n: abs(n-a))[0:k], 'point': a}

wyda:

{'group': [1, 2, 3, 4, 5], 'point': 1}
{'group': [2, 1, 3, 4, 5], 'point': 2}
{'group': [3, 2, 4, 1, 5], 'point': 3}
{'group': [4, 3, 5, 2, 6], 'point': 4}
{'group': [5, 4, 6, 3, 7], 'point': 5}
{'group': [6, 5, 7, 4, 8], 'point': 6}
{'group': [7, 6, 8, 5, 9], 'point': 7}
{'group': [8, 7, 9, 6, 10], 'point': 8}
{'group': [9, 8, 10, 7, 6], 'point': 9}
{'group': [10, 9, 8, 12, 7], 'point': 10}
{'group': [12, 10, 9, 8, 7], 'point': 12}

Które wskazują, że przedmioty znajdujące się w pobliżu określonego punktu znajdują się zasadniczo w jego grupie. Jedyną rzeczą do rozważenia w tej technice jest zmienna k, która jest stałym rozmiarem klastra :-).

chan
źródło
-2

Jeśli jest tylko jedna zmienna, nie ma potrzeby grupowania. Możesz łatwo grupować swoje obserwacje na podstawie rozkładu zmiennej.

A może brakuje mi tutaj kilku punktów?

FMZ
źródło
5
Czy możesz podać konkretny przykład grupowania obserwacji na podstawie rozkładu zmiennej?
Ali
@ kompozytor314: z histogramem?
nico
1
Przepraszam, ale nadal nie śledzę. Jak mogę użyć histogramu do grupowania obserwacji powiązanych? (Wydaje mi się, że pytanie, które mogę zadać, brzmi: w jaki sposób można znaleźć skupiska w histogramie? Czy byłoby to podobne do wybierania widmowego piku?)
Ali
5
@composer Użycie histogramu lub nawet wygładzenia jądra danych zwykle nie jest „łatwym” sposobem klastrowania. Jeśli chcesz iść tą drogą, musisz dopasować skończony model mieszanki . Jeśli chcesz tylko tego, co może sugerować przypadkowy widok histogramu, użyj K-średnich (znanych również jako metoda Jenksa , popularna wśród kartografów).
whuber