K-means es uno de los mejores algoritmos de Clustering particional.
Dado un conjunto de puntos y un número de clusters a identificar, el algoritmo particiona iterativamente el conjunto de puntos. Sea el conjunto de puntos o instancias donde es un vector en un espacio euclidiano y es el número de atributos de la instancia o dimensiones del espacio, tal que . El centroide de un cluster es la media de todos los puntos del cluster.
Una vez que todos los puntos del dataset han sido asignados a un cluster, se recalcula el centroide de cada cluster utilizando los puntos que corresponden a cada cluster. Esto se repite hasta alcanzar un criterio de parada:
- Hasta que ya no hay reasignación de datos en los diferentes clusters.
- Hasta que ya no hay cambios en los centroides.
- Hasta que se alcanzó un mínimo en la suma de errores cuadráticos:
K-means se puede usar siempre que se pueda calcular una media. Siendo el número de puntos en el cluster , la media en el espacio euclidiano es:
La distancia de cada dato al centroide se calcula como:
Algoritmo
La bibliografía recomienda ejecutar el algoritmo con al menos 500 iteraciones.
Existe una variante k-modes (usa modas en lugar de medias) para casos en los que no se pueda usar la media. La media también es sensible a los outliers.
Elegir las semillas o centroides iniciales de manera aleatoria puede distorsionar negativamente los clusters que el modelo creará (similar a encerrarlo en mínimos locales). Una heurística simple consiste en:
- Calcular la media del dataset para que la primera semilla sea el punto más alejado de la media.
- La segunda semilla será el punto más alejado de la primera semilla.
- Los puntos sucesivos serán elegidos de manera que su distancia a los puntos ya seleccionados sea la máxima. Este método es empeora si existen outliers.