21
15

More than 5 years have passed since last update.

pythonで階層的クラスタリング

Last updated at Posted at 2019-06-09

階層的クラスタリングとは

クラスタリングアルゴリズム一つで, 名前の通りデータを階層的にクラスタ分割していきます. 階層的クラスタリングだけでも, 様々な設定が設定があるようなので, 試してみたいと思います.

距離計算手法

クラスタリングはデータ同士の距離に基づいて, データをグループ分けします. その距離の計算方法についても色々とあるようです.

method 説明
average 重みのない平均距離
centroid 重みのない重心までの距離
complete 最大距離
median 重みのある重心までの距離
single 最小距離
ward 内部平方距離
weighted 重みのある平均距離

実践

今回は, 1次元のデータをランダムに20個生成し, 上記の距離計算アルゴリズムそれぞれでクラスタリングをしていきます. 結果はデンドログラムで表示します.

average

average.png

centroid

centroid.png

complete

complete.png

median

median.png

single

single.png

ward

ward.png

weighted

weighted.png

距離の計算手法によって, 異なる結果が得られることが分かりました.

コード

以下のコードを実行すれば, 各距離計算手法でのデンドログラムが表示されます.

# -*- 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()
21
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
15