Eu tenho tentado entender os diferentes algoritmos de clustering k-means, principalmente implementados no stats
pacote da R
linguagem.
Entendo o algoritmo de Lloyd e o algoritmo on-line de MacQueen. A maneira como eu os entendo é a seguinte:
Algoritmo de Lloyd:
Inicialmente, são escolhidas observações aleatórias 'k' que servirão como centróides dos clusters 'k'. Em seguida, as etapas a seguir ocorrem na iteração até os centróides convergirem.
- A distância euclidiana entre cada observação e os centróides escolhidos é calculada.
- As observações mais próximas de cada centróide são marcadas nos intervalos 'k'.
- A média de todas as observações em cada balde serve como novos centróides.
- Os novos centróides substituem os antigos centróides e a iteração volta à etapa 1 se os antigos e novos centróides não convergirem.
As condições para convergir são as seguintes: os centróides antigos e os novos são exatamente idênticos, a diferença entre os centróides é pequena (da ordem de 10 ^ -3) ou o número máximo de iterações (10 ou 100) é atingido.
Algoritmo de MacQueen:
Esta é uma versão online em que as primeiras instâncias 'k' são escolhidas como centróides.
Em seguida, cada instância é colocada em baldes, dependendo do centróide mais próximo dessa instância. O centróide respectivo é recalculado.
Repita esta etapa até que cada instância seja colocada no balde apropriado.
Esse algoritmo possui apenas uma iteração e o loop continua nas instâncias 'x'
Algoritmo de Hartigan-Wong:
- Atribua todos os pontos / instâncias a intervalos aleatórios e calcule o respectivo centróide.
- A partir da primeira instância, encontre o centróide mais próximo e avalie esse balde. Se o balde for alterado, recalcule os novos centróides, isto é, o centróide do balde recém-atribuído e o centróide da atribuição de balde antigo, pois são dois centróides afetados pela alteração
- Passe por todos os pontos e obtenha novos centróides.
- Faça uma segunda iteração dos pontos 2 e 3, que executa uma espécie de operação de limpeza e reatribui pontos perdidos para corrigir as caçambas.
Portanto, esse algoritmo executa duas iterações antes de vermos o resultado da convergência.
Agora, não tenho certeza se o que penso no ponto 4 do algoritmo Hartigan-Wong é o método correto do algoritmo. Minha pergunta é: se o método a seguir para Hartigan-Wong é o método correto para implementar o k-means? Existem apenas duas iterações para este método? caso contrário, qual é a condição para convergência (quando parar)?
Outra explicação possível da implementação é o que eu entendo.
- Atribua todos os pontos / instâncias a intervalos aleatórios e calcule o respectivo centróide.
- A partir da primeira instância, encontre o centróide mais próximo e atribua esse balde. Se o balde for alterado, recalcule os novos centróides, isto é, o centróide do balde recém-atribuído e o centróide da atribuição antiga do balde, pois são dois centróides afetados pela alteração.
- Quando houver uma alteração no intervalo para qualquer ponto, volte para a primeira instância e repita as etapas novamente.
- A iteração termina quando todas as instâncias são iteradas e nenhum dos pontos altera os buckets.
Dessa forma, existem muitas iterações que começam do início do conjunto de dados repetidamente sempre que uma instância altera os buckets.
Quaisquer explicações seriam úteis e, por favor, deixe-me saber se eu entendi errado algum desses métodos.