私はscipy.cluster.vq.kmeans
いくつかのk-meansクラスタリングを行うために使用してきましたが、各データポイントが(推定上)どの重心に関連付けられているかを判断する方法があるかどうか疑問に思いました。
明らかにこれは手動で行うことができますが、私が知る限り、kmeans関数はこれを返しませんか?
私はscipy.cluster.vq.kmeans
いくつかのk-meansクラスタリングを行うために使用してきましたが、各データポイントが(推定上)どの重心に関連付けられているかを判断する方法があるかどうか疑問に思いました。
明らかにこれは手動で行うことができますが、私が知る限り、kmeans関数はこれを返しませんか?
kmeans2
ラベルをscipy.cluster.vq
返す関数もあります。
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])
を使用する必要がある場合は、 を使用してラベルを取得kmeans
することもできます。vq
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])