next up previous
Seguinte: Algoritmo PAM Acima: Agrupamento e distribuição de Anterior: Métodos Hierárquicos

Algoritmo k-means

O algoritmo k-means [#!hartigan:clustering!#] é o mais conhecido método por particionamento. Nesse algoritmo, os $k$ centros iniciais são escolhidos aleatoreamente. No final de cada iteração, esses centros passam a ser o centro de gravidade de cada cluster (média dos pontos do grupo). Abaixo, apresenta-se um pseudo-código do algoritmo.


   def kmeans(k, objects):

means = sample(objects, k)
changed = True

while changed:
clusters = group(means,points)
newMeans = reCalcMeans(points)
changed = (means == newMeans)
means = newMeans

return clusters

A função sample() retorna uma lista de $k$ objetos escolhidos aleatoriamente. A função group() inclui cada objeto no cluster cujo centro lhe é mais similar, retornando uma lista com os $k$ clusters e seus respectivos objetos. Por fim, reCalcMeans() servirá para calcular os novos centros de gravidade de cada grupo. O algoritmo termina quando os centros não se modificam mais.

Figura: Um resultado do kmeans
% latex2html id marker 796
\fbox{\includegraphics[scale=0.4]{kmeans.jpg}}

O kmeans é bastante popular por ser fácil de implementar e por ter um bom desempenho em base de dados grandes, já que sua complexidade computacional é $O(n \cdot k \cdot t)$, onde $n$ é o total de objetos da base de dados, $k$ é o número de grupos formados e $t$ é o número de iterações. Segundo Carlantonio [#!carlantonio01:cluster!#], normalmente $n \gg k$ e $n \gg t$.

O fato de o algoritmo kmeans exigir que definamos inicialmente quantos grupos serão formados não foi prejudicial no nosso problema. Isso porque utilizamos $k$ = número de equipes de atendimento que a empresa possui no Estado. Em contrapartida, o algoritmo não permitiu que levássemos em conta o número de consumidores afetados por uma interrupção de energia na formação dos clusters .

Uma variação deste método utilizada foi: ao recalcularmos os novos centros a cada iteração, foi utilizado em cada grupo o objeto mais próximo do seu centro de gravidade, ao invés do próprio centro de gravidade. Essa alteração não representou muita variação no formato dos clusters obtidos em relação ao algoritmo original.

Na figura [*], vemos um resultado do algoritmo kmeans com a adaptação descrita acima. As chaves de mesma cor foram agrupadas em um mesmo cluster. Foram gerados 75 grupos, que é uma média da quantidade de equipes da empresa no Estado.

Vale lembrar que o kmeans é aleatório e, por isso, a qualidade de seus resultados depende muito dos $k$ centros iniciais escolhidos. O ideal é rodarmos o algoritmo várias vezes em busca de um melhor solução.


next up previous
Seguinte: Algoritmo PAM Acima: Agrupamento e distribuição de Anterior: Métodos Hierárquicos
Raul Henriques Cardoso Loopes 2005-02-25