Inicializando centros K-means por meio de subamostras aleatórias do conjunto de dados?

13

Se eu tiver um determinado conjunto de dados, quão inteligente seria inicializar os centros de cluster usando meios de amostras aleatórias desse conjunto de dados?

Por exemplo, suponha que eu queira 5 clusters. Tomo 5 random samples, digamos, size=20%o conjunto de dados original. Eu poderia então tomar a média de cada uma dessas 5 amostras aleatórias e usá-las como meus 5 centros iniciais de cluster? Não sei onde li isso, mas queria saber o que vocês acham da ideia.


ATUALIZAÇÃO: Consulte este tópico Inicializando o clustering K-means: quais são os métodos existentes? para a discussão geral sobre os vários métodos de inicialização.

JEquihua
fonte
11
Se você dividir a amostra aleatoriamente em 5 subamostras, suas 5 médias quase coincidirão. Qual é o sentido de fazer desses pontos de fechamento os centros iniciais do cluster? Na maioria das implementações de meios K, a seleção padrão dos centros de cluster iniciais é baseada na ideia oposta: encontrar os 5 pontos mais distantes e torná-los os centros iniciais.
precisa saber é
2
@ttnphns Esta seria uma boa resposta.
2
Eu acho que seria muito melhor escolher a média geral como um ponto e escolher outros que estão longe desse centro em várias direções.
Michael R. Chernick
1
Faz sentido. Como eu iria encontrar esses 5 pontos que estão distantes? Obrigado!
JEquihua
@JEquihua, publiquei meu comentário como resposta e adicionei detalhes que você está solicitando.
ttnphns

Respostas:

16

Se você dividir a amostra aleatoriamente em 5 subamostras, suas 5 médias quase coincidirão. Qual é o sentido de fazer desses pontos de fechamento os centros iniciais do cluster?

Em muitas implementações K-means, a seleção padrão dos centros de cluster iniciais é baseada na idéia oposta: encontrar os 5 pontos mais distantes e torná-los os centros iniciais. Você pode perguntar qual pode ser o caminho para encontrar esses pontos distantes? Aqui está o que o K-means do SPSS está fazendo para isso:

Tome todos os k casos (pontos) do conjunto de dados como os centros iniciais. Todos os demais casos estão sendo verificados quanto à capacidade de substituí-los como centros iniciais, pelas seguintes condições:

  • a) Se o estojo estiver mais distante do centro mais próximo dele do que a distância entre os dois centros mais próximos um do outro, o estojo substituirá o centro dos dois últimos últimos ao qual está mais próximo.
  • b) Se o estojo estiver mais distante do centro 2º mais próximo do que a distância entre o centro mais próximo e o centro mais próximo deste último, o estojo substituirá o centro mais próximo.

Se a condição (a) não for satisfeita, a condição (b) é verificada; se não estiver satisfeito, o caso não se tornará um centro. Como resultado de tais casos, obtemos k casos máximos na nuvem que se tornam os centros iniciais. O resultado desse algo, embora robusto o suficiente, não é totalmente insensível à escolha inicial de "qualquer k casos" e à ordem de classificação dos casos no conjunto de dados; portanto, várias tentativas aleatórias de inicialização ainda são bem-vindas, como é sempre o caso com K-means.

Veja minha resposta com uma lista de métodos populares de inicialização para k-means. O método de divisão em subamostras aleatórias (criticadas por mim e por outras pessoas), bem como o método descrito usado pelo SPSS - também estão na lista.

ttnphns
fonte
1
Depois de fazer o que você descreve, que estatística eu poderia usar para determinar qual ponto de inicialização leva a uma partição melhor? Obrigado por tudo.
JEquihua
Usar pontos máximos como centros iniciais uma vez não garante a melhor partição no final, embora eles (em comparação com os centros iniciais aleatórios) diminuam a chance de ficarem presos em um "local ideal" e aceleram o processo de convergência . Ordem variável de casos, faça a partição k-means inteira 2-5 vezes, salve os centros finais obtidos, calcule a média e insira como os iniciais para uma clusterização final. Esta partição é certamente a melhor. Na verdade, você não precisa de nenhuma estatística especial para verificá-la, a menos que compare comparações de diferentes k.
ttnphns
1
Eu quero comparar partições de diferentes k. O que eu poderia usar? O que é uma boa ideia? obrigado por me ajudar muito. @ttnphns.
precisa saber é o seguinte
Existe um grande número de critérios de agrupamento "internos" . Um dos mais apropriados para k-means é Calinski-Harabasz (F multivariado de Fisher). Google para ele ou para outros.
usar o seguinte comando
7

Os meios serão muito semelhantes. Você também pode encontrar a média do conjunto de dados e, em seguida, colocar os centróides iniciais em um pequeno círculo / esfera em torno dessa média.

Se você quiser ver mais algum esquema de inicialização de som para k-means, dê uma olhada em k-means ++. Eles criaram um método bastante inteligente para semear k-means.

  • Arthur, D. e Vassilvitskii, S. (2007).
    k-means ++: as vantagens de uma semeadura cuidadosa ".
    Anais do décimo oitavo simpósio anual do ACM-SIAM sobre algoritmos discretos

Slides do autor: http://www.ima.umn.edu/~iwen/REU/BATS-Means.pdf

Possui QUIT - Anony-Mousse
fonte
Eu li isso, parece bastante intuitivamente vantajoso, mas acho que ainda está para ser comprovado que funciona melhor do que simplesmente pegar muitos pontos de inicialização aleatórios. Encontrei este código simples caso você queira experimentá-lo: kmpp <- função (X, k) {n <- nrow (X) C <- numérico (k) C [1] <- amostra (1: n, 1) para (i em 2: k) {dm <- distmat (X, X [C,]) pr <- aplicar (dm, 1, min); pr [C] <- 0 C [i] <- amostra (1: n, 1, prob = pr)} kmeans (X, X [C,])} #
#
É conhecido por reduzir significativamente o número de iterações até a convergência e produzir, em média, melhores resultados. Posso confirmar que, em minhas próprias experiências, kmeans ++ é o caminho a percorrer. Estou usando a implementação ELKI.
Quit - Anony-Mousse
O que é a implementação ELKI? onde posso procurar? saudações!
precisa saber é o seguinte
pt.wikipedia.org/wiki/ELKI
Desistiu - Anony-Mousse
4

Usar os meios de amostras aleatórias dará o oposto do que você precisa, como ttnphns apontou em seu comentário. O que precisamos é de uma maneira de encontrar pontos de dados bastante distantes um do outro.

Idealmente, você pode percorrer todos os pontos, encontrar as distâncias entre eles, determinar onde as distâncias são maiores ...

Não contornar a intenção do OP, mas acho que a "solução" está embutida no algoritmo k-means. Realizamos várias iterações e recalculamos os centróides do cluster com base nas iterações anteriores. Também geralmente executamos o algoritmo kmeans várias vezes (com valores iniciais aleatórios) e comparamos os resultados.

Se alguém tiver conhecimento a priori , conhecimento de domínio, isso poderá levar a um método superior de identificar onde os centros de cluster iniciais devem estar. Caso contrário, provavelmente é uma questão de selecionar pontos de dados aleatórios como valores iniciais e, em seguida, utilizar várias execuções e várias iterações por execução.

Um homem
fonte
Depois de fazer o que você descreve, que estatística eu poderia usar para determinar qual ponto de inicialização leva a uma partição melhor? Obrigado por tudo.
JEquihua
2

k

gregmacfarlane
fonte
Faz muito sentido. Posso perguntar o mesmo que perguntei a Aman. Suponha que eu tome um zilhão de pontos iniciais aleatórios. O que eu poderia usar para determinar qual das partições resultantes é a melhor? Saudações! @gmacfarlane
JEquihua
k
k