Até onde eu sei, o k-means escolhe os centros iniciais aleatoriamente. Como eles são baseados em pura sorte, eles podem ser muito mal selecionados. O algoritmo K-means ++ tenta resolver esse problema, espalhando os centros iniciais uniformemente.
Os dois algoritmos garantem os mesmos resultados? Ou é possível que os centróides iniciais mal escolhidos levem a um resultado ruim, não importa quantas iterações.
Digamos que haja um determinado conjunto de dados e um determinado número de clusters desejados. Nós executamos um algoritmo k-means desde que ele convergisse (sem mais movimento do centro). Existe uma solução exata para esse problema de cluster (dado SSE) ou o k-means produzirá resultados às vezes diferentes ao executar novamente?
Se houver mais de uma solução para um problema de cluster (dado conjunto de dados, número determinado de clusters), o K-means ++ garante um resultado melhor ou apenas mais rápido? Por melhor, quero dizer menor SSE.
A razão pela qual estou fazendo essas perguntas é porque estou procurando um algoritmo k-means para agrupar um grande conjunto de dados. Encontrei alguns k-means ++, mas também existem algumas implementações CUDA. Como você já sabe, o CUDA está usando a GPU e pode executar mais centenas de threads em paralelo. (Para realmente acelerar todo o processo). Mas nenhuma das implementações CUDA - que eu encontrei até agora - tem inicialização k-means ++.
k-means picks the initial centers randomly
. Escolher centros iniciais não faz parte do próprio algoritmo k-means. Os centros poderiam ser escolhidos. Uma boa implementação de k-médias irá oferecer várias opções como definir centros iniciais (, definidos pelo usuário, alíneas k-maior aleatórios, etc.)