Python × AI - 階層クラスタリング(最短距離法)

前回までは、ウォード法でクラスタリングを行ってきましたが、今回は最短距離法を使ってクラスタリングをします。

データセットの準備

まずscikit-learnのアヤメのデータセットを読み込みます。

比較しやすくするために、サンプル数を10分の1に減らします。(4行目)

最後に散布図に表示します。(10行目)

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt

X = load_iris().data[::10]
fig = plt.figure(figsize=(6, 3))
ax = fig.add_subplot(1, 1, 1, title="iris")
plt.scatter(X[:, 0], X[:, 1])
for i, element in enumerate(X):
plt.text(element[0]+0.02, element[1] + 0.02, i)
plt.show()

[実行結果]

最短距離法とウォード法の比較

最短距離法とウォード法の両方でクラスタリングを行い、それぞれの樹形図を表示します。

最短距離法ではパラメータmethodに“single”を指定(1行目)し、ウォード法では“ward”を指定(7行目)します。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
Z = linkage(X, method="single", metric="euclidean")
fig2, ax2 = plt.subplots(figsize=(6,3))
ax2 = dendrogram(Z)
fig2.suptitle("single")
fig2.show()

Z = linkage(X, method="ward", metric="euclidean")
fig2, ax2 = plt.subplots(figsize=(6,3))
ax2 = dendrogram(Z)
fig2.suptitle("ward")
fig2.show()

[実行結果]

結果はほとんど変わっていないようですが、5,13,7,11の分類が少し異なっています。

最短距離法のメリットは計算量が少ないことです。

ただ鎖効果(ある1つのクラスタに対象が1つずつ順番に吸収されながらクラスタが形成されること)のために、クラスタが帯状になり分類感度が低いことがデメリットになります。