next up previous
Seguinte: Validação via despacho Acima: Agrupamento e distribuição de Anterior: Algoritmo PAM

Algoritmo DBSCAN

O algoritmo DBSCAN é um exemplo de algoritmo por densidade. Esses métodos são adequados para descobrirmos agrupamentos de formas arbitrárias. Carlantonio [#!carlantonio01:cluster!#] esclarece que a idéia chave dos métodos baseados em densidade é que para cada objeto de um cluster, sua vizinhança, para algum dado raio (Eps), tem que conter ao menos um número mínimo de objetos (MinPts). Eps e MinPts são parâmetros de entrada destes métodos. Abaixo, um código resumido do algoritmo (implementado em Python).


   def dbscan(objects, Eps, MinPts):

id = 1
for o in objects:
if o.unclassified():
o.expandCluster(objects, Eps, MinPts, id)
id += 1

O algoritmo supõe que, inicialmente, todos os objetos de objects estão não-classificados. Abaixo, segue a função expandCluster() utilizada em dbscan().


   def expandCluster(self, objects, Eps, MinPts, id):

N1 = self.epsNeighbourhood(Eps)
if len(N1) $<$ MinPts:
self.isNoise()
return
else:
setID(N1,id)
N1.remove(self)
for o in N1:
N2 = o.epsNeighbourhood(Eps)
if len(N2) $\geq$ MinPts:
# Selecionamos todos os objetos ainda
# não classificados ou ruidos;
# adicionamos os não classificados em N1;
# marcamos todos com o cluster-id atual
return

A função epsNeighbourhood(Eps) retorna uma lista com todos os objetos da vizinhança Eps de um obejto. A função isNoise() marca um objeto como sendo um ruído. A função setID(N,id) atribui a todos o objetos da lista $N$ um certo $id$. A figura [*] mostra uma comparação entre o resultado de um clustering por particionamento e um por densidade, para uma mesma base de dados.

Figura: Agrupamento por Densidade (a) X Agrupamento por Partição (b)
Image densidade


next up previous
Seguinte: Validação via despacho Acima: Agrupamento e distribuição de Anterior: Algoritmo PAM
Raul Henriques Cardoso Loopes 2005-02-25