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.
(Años más tarde) este kmeans.py bajo is-it-possible-to-specify-your-own-distance-function-using-scikits-learn-k-means -es is-it-possible-to-specify-your-own-distance-function-using-scikits-learn-k-means es directo y razonablemente rápido; utiliza cualquiera de las métricas de 20 impares en scipy.spatial.distance.
De wikipedia , puede usar scipy, k-means
O bien, podría usar un envoltorio de Python para OpenCV, ctypes-opencv .
O podría abrir la nueva interfaz Python de OpenCV y su implementación kmeans .
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
Python''s Pycluster y pyplot se pueden usar para agrupar k-means y para visualizar datos en 2D. Una publicación reciente del blog Stock Stock / Volume Analysis usando Python y PyCluster da un ejemplo de agrupamiento usando PyCluster en los datos de stock.
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.