Python × AI - 樹形図(デンドログラム)

樹形図(デンドログラム)の表示

前回実行した階層クラスタリングの結果を、樹形図(デンドログラム)に表示します。

[Google Colaboratory]

1
2
3
4
5
from scipy.cluster.hierarchy import dendrogram
import matplotlib.pyplot as plt
fig2, ax2 = plt.subplots(figsize=(20,5))
ax2 = dendrogram(Z)
fig2.show()

[実行結果]

2,3,4,0,1が1つのクラスタにまとまっていたり、10,12,14がまとまっていたり、5,9がまとまっていることなどが分かります。

クラスタ数を指定

fcluster関数を使うと、何番のデータがどのクラスタに所属するのかを確認することができます。

パラメータcriterionに“maxclust”を指定し、クラスタ数が3の場合の、各データの所属データを確認します。

[Google Colaboratory]

1
2
3
4
from scipy.cluster.hierarchy import fcluster
clusters = fcluster(Z, t=3, criterion="maxclust")
for i, c in enumerate(clusters):
print(i, c)

[実行結果]

樹形図の通りに3グループに分かれていることが確認できました。

距離を指定

次は、パラメータcriterionに“distance”を指定し、距離で閾値を指定してみます。

樹形図に横線を引いてその位置で分けるようなイメージになります。

樹形図の縦軸に表示されている数値が各点の距離になります。

距離(縦軸に対応)に1.6を指定して実行してみます。

[Google Colaboratory]

1
2
3
clusters1 = fcluster(Z, 1.6, criterion="distance")
for i, c in enumerate(clusters1):
print(i, c)

[実行結果]

今度はクラスタ数4に分かれることが確認できました。

樹形図をみると、縦軸の8から横線を引くとクラスタ数が2に、縦軸の3から横線を引くとクラスタ数が3に、縦軸の1.6から横線を引くとクラスタ数が4になることが一目瞭然に確認できますね。