Gdzie wyciąć dendrogram?


60

Hierarchiczne grupowanie może być reprezentowane przez dendrogram. Cięcie dendrogramu na pewnym poziomie daje zestaw klastrów. Cięcie na innym poziomie daje kolejny zestaw klastrów. Jak wybrałbyś miejsce cięcia dendrogramu? Czy istnieje coś, co moglibyśmy uznać za optymalny punkt? Jeśli patrzę na zmieniający się dendrogram w czasie, czy powinienem ciąć w tym samym punkcie?


Zastanawiałem się również nad tym problemem, ale (niestety) nie znalazłem jeszcze żadnych przekonujących odpowiedzi. Myślę, że nie ma rozwiązania. Istnieją pakiety R / BioC, takie jak hopack(i inne), które mogą oszacować liczbę klastrów, ale to nie odpowiada na twoje pytanie.
suncoolsu,

pvclustPakiet Rzawiera funkcje, które dają bootstrapped wartości p dla klastrów dendrogramie, co pozwala zidentyfikować grupy: is.titech.ac.jp/~shimo/prog/pvclust
Ben

Odpowiedzi:


45

Nie ma ostatecznej odpowiedzi, ponieważ analiza skupień jest w zasadzie podejściem eksploracyjnym; interpretacja wynikowej struktury hierarchicznej jest zależna od kontekstu i często kilka rozwiązań jest równie dobrych z teoretycznego punktu widzenia.

W pokrewnym pytaniu podano kilka wskazówek: Jakie kryteria zatrzymania dla aglomeracyjnego hierarchicznego grupowania stosuje się w praktyce? Generalnie używam kryteriów wizualnych, np. Wykresów sylwetki i pewnego rodzaju kryteriów numerycznych, takich jak wskaźnik trafności Dunna, gamma Huberta, współczynnik G2 / G3 lub skorygowany wskaźnik Rand. Zasadniczo chcemy wiedzieć, jak dobrze przybliżona jest pierwotna macierz odległości w przestrzeni gromady, więc przydatna jest również miara korelacji kopenetycznej . Używam także k-średnich, z kilkoma wartościami początkowymi, i statystyki odstępu ( lustro ), aby określić liczbę klastrów, które minimalizują wewnątrz-SS. Zgodność z hierarchicznym klastrowaniem Warda daje wyobrażenie o stabilności rozwiązania klastrowego (można użyćmatchClasses()w tym celu pakiet e1071 ).

W klastrze widoku zadań CRAN znajdziesz przydatne zasoby, w tym między innymi pvclust , fpc , clv . Warto również wypróbować pakiet clValid ( opisany w Journal of Statistics Software ).

Teraz, jeśli twoje klastry zmieniają się w czasie, jest to nieco trudniejsze; dlaczego wybrać pierwsze rozwiązanie klastrowe zamiast innego? Czy spodziewasz się, że niektóre osoby przemieszczają się z jednego klastra do drugiego w wyniku ewoluującego z czasem procesu?

Istnieją pewne środki, które próbują dopasować klastry, które mają maksymalne bezwzględne lub względne nakładanie się, jak zasugerowano ci w poprzednim pytaniu. Spójrz na porównanie klastrów - przegląd Wagnera i Wagnera.


12

Naprawdę nie ma odpowiedzi. Jest gdzieś pomiędzy 1 a N.

Możesz jednak myśleć o tym z perspektywy zysku.

Na przykład w marketingu stosuje się segmentację, która przypomina klastrowanie.

Wiadomość (powiedzmy reklama lub list), która jest dostosowana do każdej osoby, będzie miała najwyższy wskaźnik odpowiedzi. Ogólny komunikat dostosowany do średniej będzie miał najniższy wskaźnik odpowiedzi. Powiedzieć, że trzy wiadomości dostosowane do trzech segmentów będą gdzieś pośrodku. To jest strona dochodowa.

Wiadomość dostosowana do każdej osoby będzie miała najwyższy koszt. Ogólny komunikat dostosowany do średniej będzie miał najniższy koszt. Gdzieś pośrodku będą trzy wiadomości dostosowane do trzech segmentów.

Powiedzmy, że zapłacenie pisarzowi za napisanie niestandardowej wiadomości kosztuje 1000, dwa kosztują 2000 itd.

Powiedz, używając jednej wiadomości, Twój przychód wyniesie 5000. Jeśli podzielisz klientów na 2 segmenty i napiszesz dostosowane wiadomości do każdego segmentu, Twój wskaźnik odpowiedzi będzie wyższy. Powiedzmy, że przychody wynoszą teraz 7500. Przy trzech segmentach, nieco wyższym współczynniku odpowiedzi, a twoje przychody wynoszą 9000. Jeszcze jeden segment, a masz 9500.

Aby zmaksymalizować zysk, utrzymuj segmentację, aż krańcowy przychód z segmentacji wyrówna się z krańcowym kosztem segmentacji. W tym przykładzie użyłbyś trzech segmentów, aby zmaksymalizować zysk.

Segments  Revenue  Cost  Profit
1         5000     1000  4000
2         7500     2000  5500
3         9000     3000  6000
4         9500     4000  5500

To ciekawa perspektywa!
AndyF

5

Być może jedną z najprostszych metod byłaby graficzna reprezentacja, w której oś x jest liczbą grup, a oś y dowolną miarą oceny, jak odległość lub podobieństwo. Na tym wykresie zwykle można zaobserwować dwa zróżnicowane regiony, będące wartością osi x na „kolanie” linii „optymalną” liczbą skupień.

Istnieją również statystyki, które mogą pomóc w tym zadaniu: między innymi gamma Huberta, pseudo-t², pseudo-F lub sześcienne kryteria klastrowania (CCC).


Zgadzam się z chl. Analizy skupień są podejściami eksploracyjnymi, a interpretacja wyników, w tym konkretnym przypadku optymalnej liczby skupień, zależy od kontekstu. Na przykład w mojej pracy często stosuje się analizy klastrów do klasyfikowania osób na podstawie kilku cech, a czasem liczba klastrów jest wstępnie ustawiona. W tym przypadku naszym celem jest znalezienie zestawu zmiennych klasyfikacyjnych, które najlepiej rozróżniają jednostki należące do różnych klastrów.
Manuel Ramón


3

W klastrowaniu hierarchicznym liczba partycji wyjściowych to nie tylko cięcia poziome, ale także cięcia poziome, które decydują o ostatecznym zgrupowaniu. Można to zatem postrzegać jako trzecie kryterium oprócz 1. metryki odległości i 2. kryterium powiązania . http://en.wikipedia.org/wiki/Hierarchical_clustering

Wspomniane kryterium jest trzecim rodzajem, który jest rodzajem ograniczenia optymalizacji zestawu partycji w hierarchii. Zostało to formalnie przedstawione w tym artykule i podano przykłady segmentacji!

http://www.esiee.fr/~kiranr/ClimbingECCV2012_Preprint.pdf


1

Jak powiedziano w innych odpowiedziach, jest to zdecydowanie subiektywne i zależy od tego, jaki rodzaj ziarnistości próbujesz zbadać. Dla ogólnego podejścia, wycięłem ten, aby dać mi 2 klastry i 1 wartość odstającą. Następnie skupiłbym się na dwóch klastrach, aby sprawdzić, czy jest między nimi coś znaczącego.

# Init
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()

# Load data
from sklearn.datasets import load_diabetes

# Clustering
from scipy.cluster.hierarchy import dendrogram, fcluster, leaves_list
from scipy.spatial import distance
from fastcluster import linkage # You can use SciPy one too

%matplotlib inline

# Dataset
A_data = load_diabetes().data
DF_diabetes = pd.DataFrame(A_data, columns = ["attr_%d" % j for j in range(A_data.shape[1])])

# Absolute value of correlation matrix, then subtract from 1 for disimilarity
DF_dism = 1 - np.abs(DF_diabetes.corr())

# Compute average linkage
A_dist = distance.squareform(DF_dism.as_matrix())
Z = linkage(A_dist,method="average")

# Dendrogram
D = dendrogram(Z=Z, labels=DF_dism.index, color_threshold=0.7, leaf_font_size=12, leaf_rotation=45)

wprowadź opis zdjęcia tutaj

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.