クラスタリング
どこかででた問題。 折角なのでpythonでてきとーに実装してみた。 ソースコードは以下に。 hcluster.py · GitHub
k-means
1次元ベクトルのデータ集合 {(2),(3),(4),(10),(11),(12),(20),(25),(30)} をk-means法でクラスタリングする。 その際(a)-(c)の場合において、収束するまでのクラスタとセントロイドを示せ。
(a) k=2, 初期値(2,20)
1回目 data : [ 2. 3. 4. 10. 11. 12. 20. 25. 30.] prof : [ 0. 0. 0. 0. 0. 1. 1. 1. 1.] cluster: [ 6. 21.75] 2回目 data : [ 2. 3. 4. 10. 11. 12. 20. 25. 30.] prof : [ 0. 0. 0. 0. 0. 0. 1. 1. 1.] cluster: [ 7. 25.] 3回目 data : [ 2. 3. 4. 10. 11. 12. 20. 25. 30.] prof : [ 0. 0. 0. 0. 0. 0. 1. 1. 1.] cluster: [ 7. 25.] result data : [ 2. 3. 4. 10. 11. 12. 20. 25. 30.] prof : [ 0. 0. 0. 0. 0. 0. 1. 1. 1.] cluster: [ 7. 25.]
(注) 1回目のとき、11はクラスタ0の初期値2からもクラスタ1の初期値20からも共に等しい。 この場合、どっちのクラスにアサインされるかはアルゴリズムに依存する(最終結果はほぼ変わらないはず)。
(b) k=3, 初期値(2,3,10)
1回目 data : [ 2. 3. 4. 10. 11. 12. 20. 25. 30.] prof : [ 0. 1. 1. 2. 2. 2. 2. 2. 2.] cluster: [ 2. 3.5 18. ] 2回目 data : [ 2. 3. 4. 10. 11. 12. 20. 25. 30.] prof : [ 0. 1. 1. 1. 2. 2. 2. 2. 2.] cluster: [ 2. 5.66666667 19.6 ] 3回目 data : [ 2. 3. 4. 10. 11. 12. 20. 25. 30.] prof : [ 0. 0. 1. 1. 1. 1. 2. 2. 2.] cluster: [ 2.5 9.25 25. ] 4回目 data : [ 2. 3. 4. 10. 11. 12. 20. 25. 30.] prof : [ 0. 0. 0. 1. 1. 1. 2. 2. 2.] cluster: [ 3. 11. 25.] 5回目 data : [ 2. 3. 4. 10. 11. 12. 20. 25. 30.] prof : [ 0. 0. 0. 1. 1. 1. 2. 2. 2.] cluster: [ 3. 11. 25.] result data : [ 2. 3. 4. 10. 11. 12. 20. 25. 30.] prof : [ 0. 0. 0. 1. 1. 1. 2. 2. 2.] cluster: [ 3. 11. 25.]
(c) k=3, 初期値(12,25,30)
1回目 data : [ 2. 3. 4. 10. 11. 12. 20. 25. 30.] prof : [ 0. 0. 0. 0. 0. 0. 1. 1. 2.] cluster: [ 7. 22.5 30. ] 2回目 data : [ 2. 3. 4. 10. 11. 12. 20. 25. 30.] prof : [ 0. 0. 0. 0. 0. 0. 1. 1. 2.] cluster: [ 7. 22.5 30. ] result data : [ 2. 3. 4. 10. 11. 12. 20. 25. 30.] prof : [ 0. 0. 0. 0. 0. 0. 1. 1. 2.] cluster: [ 7. 22.5 30. ]
参考
k-means clustering - Wikipedia, the free encyclopedia
階層的クラスタリング(デンドログラム)
データ集合{a,b,c,d,e}に含まれる要素間の距離集合は次の通りである。
a | b | c | d | e | |
---|---|---|---|---|---|
a | 1 | 2 | 2 | 3 | |
b | 1 | 2 | 4 | 3 | |
c | 2 | 2 | 1 | 5 | |
d | 2 | 4 | 1 | 3 | |
e | 3 | 3 | 5 | 3 |
(a)単一連結、(b)完全連結, (c)平均連結による階層的クラスタリングをデンドログラムで示せ。
(a) 単一連結
(b) 完全連結
(c)平均連結
参考
Scipyで階層的クラスタリング - Kenichiro Nishioka(西岡 賢一郎) | OpenBook
scipy.spatial.distance.pdist — SciPy v0.16.0 Reference Guide
scipy.cluster.hierarchy.linkage — SciPy v0.14.0 Reference Guide