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.)Respostas:
O K-means começa com a alocação de centros de cluster aleatoriamente e, em seguida, procura soluções "melhores". K-means ++ começa com a alocação de um centro de cluster aleatoriamente e, em seguida, procura por outros centros, dado o primeiro. Assim, ambos os algoritmos usam inicialização aleatória como um ponto de partida, por isso pode dar resultados diferentes em diferentes execuções. Como exemplo, você pode conferir esta palestra: Agrupando como um exemplo de problema de inferência , cerca de 40 minutos há exemplos de execuções k-médias, mas toda a palestra é interessante.
Então, respondendo suas perguntas:
Quanto ao seu problema: o que o k-means ++ escolhe os centros e inicia um k-means "clássico". Portanto, o que você pode fazer é (1) usar a parte do algoritmo que escolhe os centros e, em seguida, (2) usar esses centros nas implementações de k-means da GPU. Dessa forma, pelo menos uma parte do problema é resolvida no software baseado em GPU, portanto, deve ser mais rápido.
fonte
Visualizando os centróides iniciais de K-means e K-means ++
Para adicionar uma visão intuitiva da diferença entre os centróides iniciais dos dois algoritmos, considere o seguinte conjunto de dados de brinquedos, que consiste em três quadrados gerados uniformemente
Aqui estão os histogramas 2D mostrando onde os algoritmos k-means e k-means ++ inicializam seus centróides iniciais (simulações de 2000).
Claramente, o k-médio padrão inicializa os pontos de maneira uniforme, enquanto o k-médio ++ tende a inicializar próximo ao centro dos quadrados
fonte
Muitas vezes, a inicialização aleatória do KMeans leva menos tempo que o KMeans ++, mas fornece resultados ruins. Por causa da inicialização aleatória, muitas vezes obtemos o ideal local, porque nosso conjunto inicial de centros não é distribuído pelo conjunto de dados.
Então, respondendo à sua pergunta:
fonte