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