Agrupamento Espectral e Hierarquico
Fabrıcio Olivetti de Franca
Universidade Federal do ABC
Topicos
1. Agrupamento Espectral
2. Agrupamento Hierarquico
1
Agrupamento Espectral
Agrupamento Espectral
Nem sempre nossos dados apresentam um agrupamento obvio mensurado
por uma medida de similaridade:
−1.0 −0.5 0.0 0.5 1.0x
−1.0
−0.5
0.0
0.5
1.0
y
2
Agrupamento Espectral
O uso do algoritmo k-Means e insuficiente para encontrar os dois grupos
existentes:
−1.0 −0.5 0.0 0.5 1.0x
−1.0
−0.5
0.0
0.5
1.0y
3
Agrupamento Espectral
Mesmo utilizando um numero maior de clusters o algoritmo apresenta
dificuldades para entender a estrutura da base de dados.
−1.0 −0.5 0.0 0.5 1.0x
−1.0
−0.5
0.0
0.5
1.0
y
4
Agrupamento Espectral
Uma forma alternativa de representar esses objetos e imaginar que eles
formam um grafo em que os k pontos mais proximos de um certo ponto,
forma uma aresta com este.
−1.0 −0.5 0.0 0.5 1.0
−1.0
−0.5
0.0
0.5
1.0
0
1
2
3
4
5
6
7
8
9
10
11
12 13
14
15
16
17
18 19
20
21
22
23
24
25
26
2728
29
30
31
32
33
3435
36
3738
3940
41
42
4344
45
46
47
48
4950
51
52
53
54
55
56
57
58
59
60
61
62
63
6465
66
67
68
69
70
71
72
73
74
75
76
77
7879
80
81 82
8384
85
86
8788
89
90
91
92
93
94
9596
97
98
99
100
101
102
103
104
105
106
107
108
109110
111
112
113
114
115
116
117
118
119
120
121122123
124
125
126
127
128
129
130
131
132
133
134135
136137138
139
140
141
142
143
144
145 146
147
148
149
150
151
152
153
154
155
156
157
158159
160
161
162
163
164
165
166167
168
169
170
171172
173
174175
176
177
178179
180
181
182
183
184185
186
187188
189
190
191 192
193
194195
196
197
198
199
200
201202203
204205
206
207
208209
210 211
212
213
214
215
216
217
218
219
220221
222
223
224
225
226
227
228
229
230
231
232233234
235
236
237
238
239240
241
242
243
244
245246
247248249
250251
252
253254
255
256
257
258
259
260
261
262
263
264
265266
267
268
269
270
271272273274
275
276 277
278
279280
281
282
283284
285
286
287
288
289290
291
292
293
294
295
296
297
298
299300
301
302
303
304
305
306
307
308
309
310
311
312
313
314315
316
317318
319
320
321
322
323
324
325
326
327
328 329
330331
332
333
334
335
336
337
338
339
340341
342
343
344
345
346
347
348
349
350
351352
353354
355
356
357
358
359
360
361
362
363
364
365
366
367 368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388389
390391
392393
394
395
396397
398
399
Uma forma alternativa e definir que dois pontos formam uma aresta se
estao a uma distancia menor que um ε.
5
Agrupamento Espectral
Dessa forma passamos a representar nossos dados atraves da matriz
Laplaciana, que e dada por:
L = G − A,
com A sendo a matriz de adjacencia e G uma matriz diagonal com os
elementos da diagonal igual ao grau do no correspondente.
6
Agrupamento Espectral
Essa matriz Laplaciana tem algumas propriedades interessantes:
• O numero de autovalores iguais a 0 e igual ao numero de
componentes conexos.
• Os autovetores correspondentes aos autovalores iguais a 0
representam um grupo, sendo os nos pertencentes a esse grupo com
valores positivos e todo o restante igual a 0.
• Os autovetores consequentes representam diversas formacoes de
possıveis agrupamentos.
7
Agrupamento Espectral
Com isso podemos calcular a Laplaciana de uma base de dados e utilizar
os k primeiros autovetores dessa matriz (com autovalores diferentes de 0)
e gerar (similar ao PCA) uma matriz n × k contendo a informacao dos
grupos.
8
Agrupamento Espectral
Nesse ponto, temos a projecao dos nossos dados em um espaco de
dimensao reduzida.
Podemos agora aplicar a tecnica k-Means utilizando essa representacao
para obtermos os grupos.
9
Agrupamento Espectral
Com isso e possıvel encontrar os grupos corretos de nosso exemplo:
−1.0 −0.5 0.0 0.5 1.0x
−1.0
−0.5
0.0
0.5
1.0y
10
Agrupamento Espectral - Algoritmo
import numpy as np
A = adjacencia(X, k)
G = grau(A)
L = G - A
w, v = np.linalg.eig(L)
idx = np.argsort(w)
X_espec = L[:, idx]
clusters = kMeans(X_espec, n_clusters)
11
Agrupamento Espectral - Scikit-Learn
from sklearn.cluster import SpectralClustering
model = SpectralClustering(n_clusters=n,
affinity=’euclidean’,
n_neighbors=k
)
model.fit(X)
clusters = model.labels_
12
Agrupamento Hierarquico
Agrupamento Aglomerativo
Dada uma base de dados X a ser agrupada, vamos definir o seguinte
procedimento:
1. Defina cada ponto como um cluster.
2. Encontre os dois clusters com a menor distancia entre si.
3. Crie um novo cluster com a uniao desses dois.
4. Repita o passo 2 ate encontrar um numero n de clusters.
13
Agrupamento Aglomerativo
Para determinar a distancia entre dois clusters podemos calcular:
• A media das distancias entre os pares de pontos (i , j), sendo i
pertencente ao primeiro cluster, e j ao segundo (Average).
• A maior das distancias entre os pares de pontos (i , j), sendo i
pertencente ao primeiro cluster, e j ao segundo (Complete).
• A menor variancia das distancias entre os pares de pontos (i , j),
sendo i pertencente ao primeiro cluster, e j ao segundo (Ward).
14
Exemplo
−1.00 −0.75 −0.50 −0.25 0.00 0.25 0.50 0.75 1.00x
−1.00
−0.75
−0.50
−0.25
0.00
0.25
0.50
0.75
1.00
y
19 clusters
−1.00 −0.75 −0.50 −0.25 0.00 0.25 0.50 0.75 1.00x
−1.00
−0.75
−0.50
−0.25
0.00
0.25
0.50
0.75
1.00
y
18 clusters
−1.00 −0.75 −0.50 −0.25 0.00 0.25 0.50 0.75 1.00x
−1.00
−0.75
−0.50
−0.25
0.00
0.25
0.50
0.75
1.00
y
17 clusters
−1.00 −0.75 −0.50 −0.25 0.00 0.25 0.50 0.75 1.00x
−1.00
−0.75
−0.50
−0.25
0.00
0.25
0.50
0.75
1.00
y
16 clusters
−1.00 −0.75 −0.50 −0.25 0.00 0.25 0.50 0.75 1.00x
−1.00
−0.75
−0.50
−0.25
0.00
0.25
0.50
0.75
1.00
y
15 clusters
−1.00 −0.75 −0.50 −0.25 0.00 0.25 0.50 0.75 1.00x
−1.00
−0.75
−0.50
−0.25
0.00
0.25
0.50
0.75
1.00
y
14 clusters
−1.00 −0.75 −0.50 −0.25 0.00 0.25 0.50 0.75 1.00x
−1.00
−0.75
−0.50
−0.25
0.00
0.25
0.50
0.75
1.00
y
13 clusters
−1.00 −0.75 −0.50 −0.25 0.00 0.25 0.50 0.75 1.00x
−1.00
−0.75
−0.50
−0.25
0.00
0.25
0.50
0.75
1.00
y
12 clusters
−1.00 −0.75 −0.50 −0.25 0.00 0.25 0.50 0.75 1.00x
−1.00
−0.75
−0.50
−0.25
0.00
0.25
0.50
0.75
1.00
y
11 clusters
−1.00 −0.75 −0.50 −0.25 0.00 0.25 0.50 0.75 1.00x
−1.00
−0.75
−0.50
−0.25
0.00
0.25
0.50
0.75
1.00
y
10 clusters
−1.00 −0.75 −0.50 −0.25 0.00 0.25 0.50 0.75 1.00x
−1.00
−0.75
−0.50
−0.25
0.00
0.25
0.50
0.75
1.00
y
9 clusters
−1.00 −0.75 −0.50 −0.25 0.00 0.25 0.50 0.75 1.00x
−1.00
−0.75
−0.50
−0.25
0.00
0.25
0.50
0.75
1.00
y
8 clusters
−1.00 −0.75 −0.50 −0.25 0.00 0.25 0.50 0.75 1.00x
−1.00
−0.75
−0.50
−0.25
0.00
0.25
0.50
0.75
1.00
y
7 clusters
−1.00 −0.75 −0.50 −0.25 0.00 0.25 0.50 0.75 1.00x
−1.00
−0.75
−0.50
−0.25
0.00
0.25
0.50
0.75
1.00
y
6 clusters
−1.00 −0.75 −0.50 −0.25 0.00 0.25 0.50 0.75 1.00x
−1.00
−0.75
−0.50
−0.25
0.00
0.25
0.50
0.75
1.00
y
5 clusters
−1.00 −0.75 −0.50 −0.25 0.00 0.25 0.50 0.75 1.00x
−1.00
−0.75
−0.50
−0.25
0.00
0.25
0.50
0.75
1.00
y
4 clusters
−1.00 −0.75 −0.50 −0.25 0.00 0.25 0.50 0.75 1.00x
−1.00
−0.75
−0.50
−0.25
0.00
0.25
0.50
0.75
1.00
y
3 clusters
−1.00 −0.75 −0.50 −0.25 0.00 0.25 0.50 0.75 1.00x
−1.00
−0.75
−0.50
−0.25
0.00
0.25
0.50
0.75
1.00
y
2 clusters
−1.00 −0.75 −0.50 −0.25 0.00 0.25 0.50 0.75 1.00x
−1.00
−0.75
−0.50
−0.25
0.00
0.25
0.50
0.75
1.00
y
1 clusters
15
Agrupamento Hierarquico
Esse tipo de agrupamento e conhecido como agrupamento Hierarquico,
pois ele induz uma hierarquia dos clusters.
1 10 13 7 15 6 12 19 0 16 2 4 5 14 3 11 8 18 9 17sample index or (cluster size)
0.0
2.5
5.0
7.5
10.0
12.5
15.0
17.5distance
12
10
15
16
11
1
3
6
4
2
5
7
8
9
13
14
17
18
Hierarchical Clustering Dendrogram (truncated)
Esse tipo de representacao e interessante pois permite uma vizualicao da
qualidade dos clusters encontrados.
16
Agrupamento Hierarquico
Isso torna possıvel tomarmos uma decisao mais acertada do verdadeiro
numero de clusters que sao de interesse no projeto:
1 10 13 7 15 6 12 19 0 16 2 4 5 14 3 11 8 18 9 17sample index or (cluster size)
0.0
2.5
5.0
7.5
10.0
12.5
15.0
17.5distance
12
10
15
16
11
1
3
6
4
2
5
7
8
9
13
14
17
18
12
10
15
16
11
1
3
6
4
2
5
7
8
9
13
14
17
18
Hierarchical Clustering Dendrogram (truncated)
17
Agrupamento Hierarquico
Criterios de parada:
• Numero de clusters.
• Distancia maxima.
20
Agrupamento Hierarquico - Algoritmo
n = X.shape[0]
clusters = [[i] for i in range(n)]
n_clusters = len(clusters)
while n_clusters < k:
clusters = merge(clusters)
n_clusters = len(clusters)
21
Agrupamento Hierarquico - Algoritmo
def merge(clusters):
minlink = linkage(clusters[0], clusters[1])
merge_tuple = (0,1)
n_clusters = len(clusters)
for i in range(n_clusters-1):
for j in range(i+1, n_clusters):
if linkage(clusters[i], clusters[j]) < minlink:
merge_tuple = (i,j)
clusters[i] += clusters[j]
del clusters[j]
return clusters
22
Agrupamento Hierarquico - Scikit-Learn
from sklearn.cluster import AgglomerativeClustering
model = AgglomerativeClustering(n_clusters=n,
affinity=’euclidean’,
linkage=’ward’
)
model.fit(X)
clusters = model.labels_
23
Proxima Aula
Na proxima aula aprenderemos sobre reducao de dimensionalidade e
extracao de atributos, mais especificamente os algoritmos:
• PCA
• DCDistance
• CARFRE
24
Atividade 07
Complete os Laboratorios:
Clustering Methods Exercises.ipynb
25
Top Related