4.3 Hierarchisches Clustering€¦ · Data Science / Kapitel 4: Clustering. 33 Dendrogramm §...

Post on 16-Jun-2020

1 views 0 download

Transcript of 4.3 Hierarchisches Clustering€¦ · Data Science / Kapitel 4: Clustering. 33 Dendrogramm §...

32

4.3 Hierarchisches Clustering§ k-Means teilt Daten in disjunkte flache Cluster auf,

die in keiner Beziehung zueinander stehen

§ Hierarchische Clusteranalyse erzeugt eine Folge

von Clusterings, die die Daten zunehmend feiner aufteilen

§ enthält alle Daten in einem Cluster

§ enthält einen Cluster pro Datenpunkt

§ Clustering ist in Clustering enthalten, d.h.

C1, . . . , Cn

C1 = {D}

Cn = {{xi} : xi œ D}

Ci Ci≠1

’ Cj œ Ci : ÷ Cl œ Ci≠1 : Cj ™ Cl

Data Science / Kapitel 4: Clustering

33

Dendrogramm§ Dendrogramm veranschaulicht Folge von Clusterings

19 24 1 23 11 14 18 5 8 20 21 17 6 15 4 9 10 22 3 12 16 13 25 2 70.0

0.5

1.0

1.5

2.0

hclust (*, "single")

Cn

C1

Data Science / Kapitel 4: Clustering

34

Agglomerative vs. divisive Verfahren§ Verfahren zur hierarchischen Clusteranalyse einteilbar in

§ agglomerative, welche die Daten zunehmend gruppieren,d.h. in jedem Schritt werden zwei Cluster miteinander verschmolzen; sie heißen auch „bottom up“-Verfahren,da Dendrogramm von unten nach oben aufgebaut wird

§ divisive, welche die Daten zunehmend aufteilen, d.h. in jedem Schritt wird ein Cluster in zwei aufgeteilt; sie heißen auch „top down“-Verfahren, da Dendrogramm von oben nach unten aufgebaut wird

Data Science / Kapitel 4: Clustering

35

Hierarchisches agglomeratives Clustering (HAC)§ Agglomerative Verfahren beginnen mit jedem Datenpunkt

in einem eigenen Cluster und verschmelzen in jedemSchritt zwei Cluster miteinander

§ Es werden die beiden Cluster verschmolzen, die am nächsten zueinander sind, d.h. man benötigt einDistanzmaß für Cluster

Data Science / Kapitel 4: Clustering

36

Cluster-Distanzmaße§ Distanzmaße für Cluster lassen sich aus den Distanzen

der darin enthaltenen Datenpunkte ableiten

§ Single-Link

§ Complete-Link

§ Average-Link

”(Ci, Cj) = min{d(x, y) | x œ Ci, y œ Cj}

”(Ci, Cj) = max{d(x, y) | x œ Ci, y œ Cj}

”(Ci, Cj) = 1|Ci||Cj |

ÿ

xœCi

ÿ

yœCj

d(x, y)

Data Science / Kapitel 4: Clustering

37

Hierarchisches agglomeratives Clustering (HAC)

1 // Beginne mit jedem Datenpunkt in eigenem Cluster2 Cn = {{xi} : xi œ D};3

4 for(int t = n; t > 1; t--) {5 // Bestimme Paar der na chsten Cluster6 Cú

i , Cúj = arg min

Ci,CjœCt : Ci ”=Cj

”(Ci, Cj);

7

8 // Verschmelze die beiden Cluster9 Ct≠1 =

!Ct \

)Cú

i , Cúj

*"fi

)Cú

i fi Cúj

*;

10 }

Data Science / Kapitel 4: Clustering

38

Beispiel HAC§ Betrachte die folgenden Datenpunkte im

mit Distanzmatrix d

R2

x1 = (1, 0)x2 = (2, 1)x3 = (8, 0)

x4 = (12, 1)x5 = (15, 1)

d =

S

WWWWU

0.00 1.41 7.00 11.05 14.040.00 6.08 10.00 13.04

0.00 4.12 7.070.00 3.00

0.00

T

XXXXV

Data Science / Kapitel 4: Clustering

39

Beispiel HAC§ HAC mit Single-Link basierend auf Distanzmatrix d

C5 = {{x1}, {x2}, {x3}, {x4}, {x5}}

C1 = {{x1, x2, x3, x4, x5}}

C3 = {{x1, x2}, {x3}, {x4, x5}}

C2 = {{x1, x2}, {x3, x4, x5}}

C4 = {{x1, x2}, {x3}, {x4}, {x5}}

1 23

4 5

12

34

56

d =

S

WWWWU

0.00 1.41 7.00 11.05 14.040.00 6.08 10.00 13.04

0.00 4.12 7.070.00 3.00

0.00

T

XXXXV

Data Science / Kapitel 4: Clustering

40

Beispiel HAC§ HAC mit Complete-Link basierend auf Distanzmatrix d

C5 = {{x1}, {x2}, {x3}, {x4}, {x5}}

C1 = {{x1, x2, x3, x4, x5}}

C3 = {{x1, x2}, {x3}, {x4, x5}}

C4 = {{x1, x2}, {x3}, {x4}, {x5}}

C2 = {{x1, x2, x3}, {x4, x5}}

4 53

1 2

02

46

810

1214

d =

S

WWWWU

0.00 1.41 7.00 11.05 14.040.00 6.08 10.00 13.04

0.00 4.12 7.070.00 3.00

0.00

T

XXXXV

Data Science / Kapitel 4: Clustering

41

HAC in Python

Data Science / Kapitel 4: Clustering

import numpy as npimport pandas as pdfrom sklearn.preprocessing import MinMaxScalerfrom scipy.cluster.hierarchy import linkagefrom scipy.cluster.hierarchy import dendrogramimport matplotlib.pyplot as plt

# Autodaten einlesencars = pd.read_csv('../data/auto-mpg/auto-mpg.data', header=None, sep='\s+')

# Leistung, Verbrauch und Herkunft extrahierenX = cars.iloc[:, [3,4]].values

# Herkunft extrahiereny = cars.iloc[:, 7].values

# Daten normalisierenmin_max_scaler = MinMaxScaler()min_max_scaler.fit(X)X_normalized = min_max_scaler.transform(X)

# Bezeichnungen der Autos extrahierenlabels = cars.iloc[:,8].values

42

HAC in Python

§ Vollständiges Jupyter-Notebook unter:http://swl.htwsaar.de/.../2017-vl-ds-kap4-clustering.htmlhttp://swl.htwsaar.de/.../2017-vl-ds-kap4-clustering.ipynb

Data Science / Kapitel 4: Clustering

# Hierarchisches agglomeraties Clustering mit Complete-Linkageclusters = linkage(X_normalized, method='complete', metric='euclidean')

# Dendrogramm ausgebendendrogram = dendrogram(clusters, labels=labels)plt.tight_layout()plt.ylabel('Euclidean distance')plt.show()

43

HAC in Python

Data Science / Kapitel 4: Clustering

44

Hierarchisches divisives Clustering (HDC)§ Divisive Verfahren beginnen mit allen Datenpunkten in

einem einzelnen Cluster und teilen in jedem Schritteinen Cluster in zwei Cluster auf

§ Welcher Cluster soll aufgeteilt werden?

§ Wie verteilt man die Datenpunkte darin auf zwei Cluster?

§ Auswahl z.B. des Clusters mit dem größten Durchmesser

diam(Ci) = max{d(x, y) | x œ Ci, y œ Ci}

Data Science / Kapitel 4: Clustering

45

Hierarchisches divisives Clustering (HDC)§ Aufteilung der Datenpunkte im ausgewählten Cluster

§ wähle Datenpunkt mit größter Distanz

zu den anderen Datenpunkten im Cluster

§ Datenpunkte werden in zwei Cluster und aufgeteilt

§ initialisiere und

§ betrachte jeden Datenpunkt in , falls

verschiebe den Datenpunkt nach

qyœCi

d(x, y)

Ci

x

Cj Cl

Cj = {x} Cl = Ci \ {x}Cly

1|Cj |

ÿ

zœCj

d(y, z) <1

|Cl|ÿ

zœCl

d(y, z)

Cj

Data Science / Kapitel 4: Clustering

46

Hierarchisches divisives Clustering (HDC)§ Alternativ kann k-Means als Komponente in einem

hierarchischen divisiven Verfahren dienen

§ teile Cluster durch Anwendung von k-Means (k=2) auf

§ fahre rekursiv mit den entstandenen Clustern fort

Data Science / Kapitel 4: Clustering

47

4.4 Dichtebasiertes Clustering§ Verfahren zur Clusteranalyse mit Repräsentanten

(z.B. k-Means) finden nur konvexe Cluster;zudem wird jeder Datenpunkt eingeordnet

§ Dichtebasierte Verfahren identifizieren Punktmengen,die zusammenhängen undeine durchgängig hoheDichte haben, alsCluster

§ Density-Based SpatialClustering of Applicationswith Noise (DBSCAN)

Quelle: Zaki and Meira [4]

Data Science / Kapitel 4: Clustering

48

DBSCAN§ Epsilon-Nachbarschaft eines Datenpunktes

beinhaltet alle Punkte mit Distanz kleiner gleich ε

§ Datenpunkt heißt Kern (core), wenn es mindestensminpts Punkte in seiner Epsilon-Nachbarschaft gibt

§ Datenpunkt heißt Grenze (border), wenn er kein Kern ist,aber in der Epsilon-Nachbarschaft eines Kerns liegt

§ Sonstige Datenpunkte sind Rauschen (noise)

x

N‘(x) = {y | d(x, y) Æ ‘}

Data Science / Kapitel 4: Clustering

49

Kern, Grenze und Rauschen

§ Datenpunkt ist ein Kern

§ Datenpunkt ist eine Grenze

§ Datenpunkt ist Rauschen

Quelle: Zaki and Meira [4]

minpts = 6

x

y

z

Data Science / Kapitel 4: Clustering

50

Erreichbarkeit§ Ein Datenpunkt ist direkt erreichbar von , wenn

ein Kern ist und gilt

§ Ein Datenpunkt ist erreichbar von , wenn es eineFolge von Datenpunkten gibt, so dass

und gilt und für alledirekt erreichbar von ist

§ Erreichbarkeit ist nicht symmetrisch, da ein Kern seinmuss, aber kein Kern sein könnte

x yx œ N‘(y)

x yx0, . . . , xl

x0 = x xl = y 1 Æ i Æ l

xi xi≠1

y

yx

Data Science / Kapitel 4: Clustering

51

Verbundenheit und Dichtebasierter Cluster§ Zwei Datenpunkte und heißen verbunden, wenn es

einen Kern gibt, so dass sowohl als auch von erreichbar sind

§ Dichtebasierter Cluster ist eine maximale Menge von verbundenen Datenpunkten, d.h. es können gibt keine weiteren Punkte, die hinzugefügt werden können

yxx yz

z

Data Science / Kapitel 4: Clustering

52

DBSCAN§ Idee:

§ Berechne Epsilon-Nachbarschaft für alle Datenpunkte§ Bestimme alle Kerne§ Bestimme Rauschen§ Lasse von jedem Kern, der noch nicht Teil eines Clusters ist,

einen neuen Cluster wachsen

§ Achtung: Wenn Datenpunkte nur Teil eines Clusters sein können, dann ist DBSCAN nicht deterministisch, dadie Zuweisung von Datenpunkten zu Clustern vonder Reihenfolge deren Betrachtung abhängt

Data Science / Kapitel 4: Clustering

53

DBSCAN

1 dbScan (D, ‘, minpts) {2 // Kerne3 Cores = ÿ;4

5 for(x œ D) {6 // Epsilon - Nachbarschaft berechnen7 N‘(x) = computeNeighborhood (x, ‘);8

9 // Cluster -ID des Knotens initialisieren10 id(x) = ÿ;11

12 // Ist der Datenpunkt ein Kern?13 if (N‘(x) Ø minpts) Cores = Cores fi {x};14 }15

16 // Cluster von jedem Kern aus wachsen lassen17 k = 0;18 for(x œ Cores) {19 k++;20 id(x) = k;21 densityConnected (x,k);22 }23

24 // Clustering , Grenze und Rauschen bestimmen25 C = ÿ;26 for(i = 1 . . . k) C = C fi {{x œ D : id(x) = k}};27

28 Noise = {x œ D : id(x) = ÿ};29 Border = D \ {Cores fi Noise};30 return C, Cores, Border , Noise;31 }

1 densityConnected (x, k) {2 for(y œ N‘(x)) {3 id(y) = k;4 if (y œ Cores) densityConnected (y, k);5 }6 }

Data Science / Kapitel 4: Clustering

54

DBSCAN

Quelle: Zaki and Meira [4]

Data Science / Kapitel 4: Clustering

55

DBSCAN in Python

Data Science / Kapitel 4: Clustering

import numpy as npimport pandas as pdfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import MinMaxScalerfrom sklearn.cluster import DBSCANfrom matplotlib.backends.backend_pdf import PdfPagesimport matplotlibimport matplotlib.pyplot as plt

# Autodaten einlesencars = pd.read_csv('../data/auto-mpg/auto-mpg.data', header=None, sep='\s+')

# Leistung, Verbrauch und Herkunft extrahierenX = cars.iloc[:, [3,4]].values

# Herkunft extrahiereny = cars.iloc[:, 7].values

# Daten normalisierenmin_max_scaler = MinMaxScaler()min_max_scaler.fit(X)X_normalized = min_max_scaler.transform(X)

# DBScan (epsilon=0.05, minpts=5) anwendendb = DBSCAN(eps=0.05, min_samples=5, metric='euclidean')db.fit_predict(X_normalized)

56

DBSCAN in Python

§ Vollständiges Jupyter-Notebook unter:http://swl.htwsaar.de/.../2017-vl-ds-kap4-clustering.htmlhttp://swl.htwsaar.de/.../2017-vl-ds-kap4-clustering.ipynb

Data Science / Kapitel 4: Clustering

# Herkunft# U.S. : o / Europe: x / Japan : +m = ['o' if o==1 else 'x' if o==2 else '+' for o in y]

# Verfügbare Farbenc = ['red', 'blue', 'green', 'yellow', 'violet']

# Cluster Labelsl = db.labels_

# Autos plottenfor i in range(0,len(X)):plt.scatter(X[i,0], X[i,1], color=('black' if l[i] == -1 else c[l[i]]), marker=m[i])

plt.xlabel('Leistung [hp]')plt.ylabel('Gewicht [lbs]')plt.show()

57

DBSCAN in Python

Data Science / Kapitel 4: Clustering

58

Zusammenfassung§ Hierarchisches Clustering bestimmt eine Folge von

Clusterings, die als Dendrogramm darstellbar ist

§ agglomerative Verfahren verschmelzen wiederholtdie zueinander nächsten Cluster

§ divisive Verfahren beruhen auf einer wiederholtenAufteilung von Clustern

§ DBSCAN als dichtebasiertes Verfahren zur Clusteranalysefindet auch nicht-konvexe Cluster

Data Science / Kapitel 4: Clustering

59

Literatur[1] S. Raschka: Machine Learning in Python,

mitp, 2017 (Kapitel 3)

[2] M. J. Zaki und W. Meira: Data Mining and Analysis,Cambridge University Press, 2014 (Kapitel 13 & 14)

Data Science / Kapitel 4: Clustering