階層的クラスタリングとは
クラスタリングアルゴリズム一つで, 名前の通りデータを階層的にクラスタ分割していきます. 階層的クラスタリングだけでも, 様々な設定が設定があるようなので, 試してみたいと思います.
距離計算手法
クラスタリングはデータ同士の距離に基づいて, データをグループ分けします. その距離の計算方法についても色々とあるようです.
method | 説明 |
---|---|
average | 重みのない平均距離 |
centroid | 重みのない重心までの距離 |
complete | 最大距離 |
median | 重みのある重心までの距離 |
single | 最小距離 |
ward | 内部平方距離 |
weighted | 重みのある平均距離 |
実践
今回は, 1次元のデータをランダムに20個生成し, 上記の距離計算アルゴリズムそれぞれでクラスタリングをしていきます. 結果はデンドログラムで表示します.
average
centroid
complete
median
single
ward
weighted
距離の計算手法によって, 異なる結果が得られることが分かりました.
コード
以下のコードを実行すれば, 各距離計算手法でのデンドログラムが表示されます.
# -*- coding: utf-8 -*-
import pandas as pd
from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt
import random
# methodのリスト
method_list = ("average", "centroid", "complete", "median", "single", "ward", "weighted")
data = [] # dataを格納するリスト
label = [] # labelを格納するリスト
# dataを20個生成
for i in range(20):
num = random.randint(0, 99)
data.append(num)
label.append(str(num))
# DataFrameオブジェクト生成
df = pd.DataFrame(data)
# クラスタリング
for method in method_list:
Z = linkage(df, method=method, metric="euclidean")
dendrogram(Z, labels=label)
plt.title(method)
plt.show()