tutorial pseudocodigo means example ejemplo clustering python algorithm cluster-analysis k-means

pseudocodigo - k-means python ejemplo



Python k-medias algoritmo (8)

Estoy buscando la implementación de Python del algoritmo k-means con ejemplos para agrupar y almacenar en caché mi base de datos de coordenadas.




El k-means SciPy tiene algunos problemas numéricos: otros han reported mensajes de error como "La matriz no es positiva definida. La descomposición de Cholesky no se puede calcular" en la versión 0.6.0, y acabo de encontrar la misma versión 0.7.1.

Por ahora, recomendaría usar PyCluster en PyCluster lugar. Ejemplo de uso:

>>> import numpy >>> import Pycluster >>> points = numpy.vstack([numpy.random.multivariate_normal(mean, 0.03 * numpy.diag([1,1]), 20) for mean in [(1, 1), (2, 4), (3, 2)]]) >>> labels, error, nfound = Pycluster.kcluster(points, 3) >>> labels # Cluster number for each point array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], dtype=int32) >>> error # The within-cluster sum of distances for the solution 1.7721661785401261 >>> nfound # Number of times this solution was found 1


El KMeans() SciKit Learn es la forma más sencilla de aplicar el clustering de k-means en Python. Ajustar los clusters es simple como: kmeans = KMeans(n_clusters=2, random_state=0).fit(X) .

Este fragmento de código muestra cómo almacenar las coordenadas del centroide y predecir los grupos para una matriz de coordenadas.

>>> from sklearn.cluster import KMeans >>> import numpy as np >>> X = np.array([[1, 2], [1, 4], [1, 0], ... [4, 2], [4, 4], [4, 0]]) >>> kmeans = KMeans(n_clusters=2, random_state=0).fit(X) >>> kmeans.labels_ array([0, 0, 0, 1, 1, 1], dtype=int32) >>> kmeans.predict([[0, 0], [4, 4]]) array([0, 1], dtype=int32) >>> kmeans.cluster_centers_ array([[ 1., 2.], [ 4., 2.]])

(cortesía de la documentación de SciKit Learn, enlazada arriba)


Para datos continuos, k-means es muy fácil.

Necesita una lista de sus medios, y para cada punto de datos, encuentre la media más cercana a la media y el promedio de los nuevos datos. sus medios representarán los grupos de puntos salientes recientes en los datos de entrada.

Hago el promedio continuamente, por lo que no es necesario tener los datos antiguos para obtener el nuevo promedio. Dado el promedio antiguo k , el siguiente punto de datos x una constante n que es el número de puntos de datos pasados ​​para mantener el promedio de, el nuevo promedio es

k*(1-(1/n)) + n*(1/n)

Aquí está el código completo en Python

from __future__ import division from random import random # init means and data to random values # use real data in your code means = [random() for i in range(10)] data = [random() for i in range(1000)] param = 0.01 # bigger numbers make the means change faster # must be between 0 and 1 for x in data: closest_k = 0; smallest_error = 9999; # this should really be positive infinity for k in enumerate(means): error = abs(x-k[1]) if error < smallest_error: smallest_error = error closest_k = k[0] means[closest_k] = means[closest_k]*(1-param) + x*(param)

simplemente puede imprimir los medios cuando todos los datos hayan pasado, pero es mucho más divertido verlos cambiar en tiempo real. Utilicé esto en envolventes de frecuencia de 20ms de bits de sonido y después de hablar con él durante uno o dos minutos, tenía categorías consistentes para la vocal corta ''a'', la vocal larga ''o'' y la consonante ''s''. extraño



También puede usar GDAL, que tiene muchas funciones para trabajar con datos espaciales.


Las implementaciones de agrupación en clúster de Scipy funcionan bien, e incluyen una implementación de k-means .

También hay scipy-cluster , que hace el agrupamiento aglomerado; Esto tiene la ventaja de que no es necesario decidir el número de clusters antes de tiempo.