Vraag:
Waar een dendrogram knippen?
Eduardas
2010-10-18 02:57:55 UTC
view on stackexchange narkive permalink

Hiërarchische clustering kan worden weergegeven door een dendrogram. Het knippen van een dendrogram op een bepaald niveau levert een reeks clusters op. Snijden op een ander niveau geeft een andere set clusters. Hoe zou je kiezen waar je het dendrogram wilt knippen? Is er iets dat we als een optimaal punt zouden kunnen beschouwen? Als ik naar een dendrogram kijk terwijl het verandert, moet ik dan op hetzelfde punt knippen?

Ik heb me ook afgevraagd over dit probleem, maar heb (helaas) nog geen overtuigende antwoorden gevonden. Ik denk dat er geen oplossing is. Er zijn R / BioC-pakketten zoals `hopack` (en andere) die het aantal clusters kunnen schatten, maar dat geeft geen antwoord op uw vraag.
Het `pvclust` pakket voor` R` heeft functies die bootstrapped p-waarden geven voor dendrogram clusters, waardoor je groepen kunt identificeren: http://www.is.titech.ac.jp/~shimo/prog/pvclust/
Een handige site met enkele voorbeelden hoe je het in de praktijk moet doen: https://towardsdatascience.com/10-tips-for-choosing-the-optimal-number-of-clusters-277e93d72d92
Een overzicht van interne clustergeldigheidsindices: https://stats.stackexchange.com/q/21807/3277
Zeven antwoorden:
#1
+51
chl
2010-10-18 10:56:44 UTC
view on stackexchange narkive permalink

Er is geen definitief antwoord, aangezien clusteranalyse in wezen een verkennende benadering is; de interpretatie van de resulterende hiërarchische structuur is contextafhankelijk en vaak zijn verschillende oplossingen even goed vanuit theoretisch oogpunt.

Er werden verschillende aanwijzingen gegeven in een gerelateerde vraag, Welke stopcriteria voor agglomeratieve hiërarchische clustering wordt in de praktijk gebruikt? Ik gebruik meestal visuele criteria, bijv silhouetplots en een soort numerieke criteria, zoals de geldigheidsindex van Dunn, het gamma van Hubert, de G2 / G3-coëfficiënt of de gecorrigeerde Rand-index. In wezen willen we weten hoe goed de oorspronkelijke afstandsmatrix wordt benaderd in de clusterruimte, dus een maat voor de cofenetische correlatie is ook nuttig. Ik gebruik ook k-gemiddelden, met verschillende startwaarden, en de gap-statistiek ( spiegel) om het aantal clusters te bepalen dat de inside-SS minimaliseert. De overeenstemming met Ward-hiërarchische clustering geeft een idee van de stabiliteit van de clusteroplossing (daarvoor kunt u matchClasses () in het e1071 -pakket gebruiken).

U vindt nuttige bronnen in de CRAN-taakweergave Cluster, waaronder pvclust, fpc, clv, onder andere anderen. Ook het proberen waard is het clValid -pakket ( beschreven in het Journal of Statistical Software ).

Nu, als uw clusters in de loop van de tijd veranderen, is dit een beetje lastiger; waarom kiezen voor de eerste clusteroplossing in plaats van een andere? Verwacht je dat sommige individuen van het ene cluster naar het andere gaan als gevolg van een onderliggend proces dat zich in de loop van de tijd ontwikkelt?

Er zijn maatregelen die proberen clusters te matchen die een maximale absolute of relatieve overlap hebben, zoals dat ook het geval was voorgesteld in uw vorige vraag. Kijk naar Clusterings vergelijken - een overzicht van Wagner en Wagner.

#2
+11
Neil McGuigan
2010-10-18 09:49:46 UTC
view on stackexchange narkive permalink

Er is niet echt een antwoord. Het is ergens tussen 1 en N.

U kunt er echter vanuit een winstoogpunt over nadenken.

In marketing gebruikt men bijvoorbeeld segmentatie, wat veel lijkt op clustering.

Een bericht (bijvoorbeeld een advertentie of brief) dat is afgestemd op elk individu, heeft het hoogste responspercentage. Een generiek bericht dat is afgestemd op het gemiddelde, heeft de laagste respons. Zeggen dat drie berichten zijn afgestemd op drie segmenten, zullen ergens tussenin liggen. Dit is de inkomstenkant.

Een bericht dat op elk individu is afgestemd, heeft de hoogste kosten. Een generiek bericht dat is afgestemd op het gemiddelde, heeft de laagste kosten. Drie berichten die zijn afgestemd op drie segmenten zullen ergens tussenin zitten.

Stel dat het betalen van een schrijver om een ​​aangepast bericht te schrijven 1000 kost, twee kosten 2000 enzovoort.

Stel dat u door één bericht te gebruiken 5000 inkomsten genereert. Als u uw klanten in twee segmenten heeft gesegmenteerd en voor elk segment op maat gemaakte berichten heeft geschreven, zal uw responspercentage hoger zijn. Stel dat de inkomsten nu 7500 zijn. Met drie segmenten, een iets hoger responspercentage en uw inkomsten zijn 9000. Nog een segment en u bent 9500.

Om de winst te maximaliseren, blijft u segmenteren tot de marginale inkomsten van segmentering is gelijk aan de marginale kosten van segmentering. In dit voorbeeld zou u drie segmenten gebruiken om de winst te maximaliseren.

  Segmenten Omzet Kosten Winst1 5000 1000 40002 7500 2000 55003 9000 3000 60004 9500 4000 5500  
Dit is een interessant perspectief!
#3
+6
Manuel Ramón
2010-10-18 03:30:45 UTC
view on stackexchange narkive permalink

Misschien is een van de eenvoudigste methoden een grafische weergave waarin de x-as het aantal groepen is en de y-as een evaluatiestatistiek als afstand of gelijkenis. In die plot kun je meestal twee gedifferentieerde regio's waarnemen, zijnde de x-aswaarde op de 'knie' van de lijn het 'optimale' aantal clusters.

Er zijn ook enkele statistieken die van belang kunnen zijn voor deze taak: onder meer Hubert 'gamma, pseudo-t², pseudo-F of kubieke clusteringcriteria (CCC).

Ik ben het eens met chl. Clusteranalyses zijn verkennende benaderingen en de interpretatie van resultaten, voor dit specifieke geval het optimale aantal clusters, hangt af van uw context. In mijn werk is het bijvoorbeeld gebruikelijk om clusteranalyses te gebruiken om individuen te classificeren op basis van verschillende kenmerken en soms is het aantal clusters vooraf ingesteld. In dit geval is ons doel om de set classificerende variabelen te vinden die het beste onderscheid maken tussen de individuen die tot verschillende clusters behoren.
#4
+4
Tal Galili
2011-12-25 20:15:49 UTC
view on stackexchange narkive permalink

Er is ook "Clustergram: visualisatie en diagnostiek voor clusteranalyse" (met R-code)

Niet echt een antwoord, maar een ander interessant idee voor de toolbox.

#5
+3
Ravi Kiran
2013-05-19 19:48:27 UTC
view on stackexchange narkive permalink

Bij hiërarchische clustering is het aantal outputpartities niet alleen de horizontale verlagingen, maar ook de niet-horizontale verlagingen die de uiteindelijke clustering bepalen. Dit kan dus worden gezien als een derde criterium naast de 1. afstandsstatistiek en 2. Koppelingscriterium . http://en.wikipedia.org/wiki/Hierarchical_clustering

Het criterium dat je hebt genoemd is een derde soort, een soort optimalisatiebeperking voor de set partities in de hiërarchie. Dit wordt formeel gepresenteerd in dit artikel en er worden voorbeelden van segmentatie gegeven!

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

#6
+1
O.rka
2016-07-04 02:24:14 UTC
view on stackexchange narkive permalink

Zoals de andere antwoorden zeiden, is het absoluut subjectief en afhankelijk van het soort granulariteit dat u probeert te bestuderen. Voor een algemene benadering heb ik deze geknipt om me 2 clusters en 1 uitbijter te geven. Ik zou me dan concentreren op de twee clusters om te zien of er iets belangrijks tussen hen was.

  # Initimport panda's als pdimport numpy als npimport matplotlib.pyplot as pltimport seaborn als sns; sns.set () # Load datafrom sklearn.datasets import load_diabetes # Clusteringfrom scipy.cluster.hierarchy import dendrogram, fcluster, leaves_listfrom scipy.spatial import distance from fastcluster import linkage # Je kunt ook SciPy een gebruiken% matplotlib inlinedata # DatasetA_abetes # DatasetA_abetes .dataDF_diabetes = pd.DataFrame (A_data, columns = ["attr_% d"% j for j in range (A_data.shape [1])]) # Absolute waarde van correlatiematrix, trek vervolgens af van 1 voor disimilarityDF_dism = 1 - np .abs (DF_diabetes.corr ()) # Bereken gemiddelde koppelingA_dist = afstand.squareform (DF_dism.as_matrix ()) Z = koppeling (A_dist, methode = "gemiddelde") # DendrogramD = dendrogram (Z = Z, labels = DF_dism.index , color_threshold = 0.7, leaf_font_size = 12, leaf_rotation = 45)  

enter image description here

#7
+1
mic
2020-03-28 12:00:29 UTC
view on stackexchange narkive permalink

Sommige academische artikelen geven een precies antwoord op dat probleem, onder bepaalde scheidingsaannames (stabiliteit / geluidsbestendigheid) op de clusters van de platte scheidingswand.

Het grove idee van de papieren oplossing is om de vlakke scheidingswand eruit te halen door op verschillende niveaus in het dendrogram te snijden. Stel dat u intra-clustervariantie wilt minimaliseren (dat is uw optimalisatiedoel), dan kunt u het probleem formuleren als een dynamisch programmeerprobleem: moet ik hier knippen om de doelfunctie te minimaliseren? of niet? en je doorkruist de boom recursief op zoek naar de beste sneden waardoor je k clusters krijgt met de kleinste objectieve functiewaarde (intra-variantie of iets anders).

De paper (voor meer details):

Awasthi P., Blum A., Sheffet O., 2012. Center-based Clustering under Perturbation Stability gepubliceerd in Information Processing Letters, Elsevier.

Ik heb zijn aanpak (in wezen dynamisch programmeren) in mijn blog geïmplementeerd en de stappen gedetailleerd, als het kan helpen:

http://marti.ai/ml/2017/05/12/cut-a-dendrogram.html

recursive_split



Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 2.0-licentie waaronder het wordt gedistribueerd.
Loading...