k-medias en python: determina qué datos están asociados con cada centroide

He estado usando scipy.cluster.vq.kmeans para hacer algunos scipy.cluster.vq.kmeans de k-means, pero me preguntaba si hay una manera de determinar con qué centroide está asociado (putativamente) cada uno de sus puntos de datos.

Claramente, puedes hacer esto manualmente, pero, por lo que puedo decir, la función kmeans no devuelve esto.

Hay una función kmeans2 en scipy.cluster.vq que también devuelve las tags.

 In [8]: X = scipy.randn(100, 2) In [9]: centroids, labels = kmeans2(X, 3) In [10]: labels Out[10]: array([2, 1, 2, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 2, 2, 1, 2, 1, 2, 1, 2, 0, 1, 0, 2, 0, 1, 2, 0, 1, 0, 1, 1, 2, 2, 2, 2, 1, 2, 1, 1, 1, 2, 0, 0, 2, 2, 0, 1, 0, 0, 0, 2, 2, 2, 0, 0, 1, 2, 1, 0, 0, 0, 2, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 2, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 2, 0, 2, 2, 0, 1, 1, 0, 1, 0, 0, 0, 2]) 

De lo contrario, si debe usar kmeans , también puede usar vq para obtener tags:

 In [17]: from scipy.cluster.vq import kmeans, vq In [18]: codebook, distortion = kmeans(X, 3) In [21]: code, dist = vq(X, codebook) In [22]: code Out[22]: array([1, 0, 1, 0, 2, 2, 2, 0, 1, 1, 0, 2, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 2, 2, 1, 2, 0, 1, 1, 0, 2, 2, 0, 1, 0, 1, 0, 2, 1, 2, 0, 2, 1, 1, 1, 0, 1, 2, 0, 1, 2, 2, 1, 1, 1, 2, 2, 0, 0, 2, 2, 2, 2, 1, 0, 2, 2, 2, 0, 1, 1, 2, 1, 0, 0, 0, 0, 1, 2, 1, 2, 0, 2, 0, 2, 2, 1, 1, 1, 1, 1, 2, 0, 2, 0, 2, 1, 1, 1]) 

Documentación: scipy.cluster.vq