【R】階層的クラスタリングのやり方と結果の見方

今回はRで階層的クラスタリングのやり方とその結果の見方について解説してきます。

階層的クラスタリングとは似ているデータをまとめて、小さなクラスタを作っていきます。次に作成したクラスター同士と似ているデータをさらにまとめていくという処理を繰り返して、データをクラスタにまとめていくというアプローチになります。

 

階層的クラスタリングのやり方

階層的クラスタリングを実行するにあたって、それぞれパッケージをインストールしておきましょう。

すでにインストールされている場合は、下記は不要です。

install.packages("dplyr", quiet = TRUE)
install.packages("ggplot2", quiet = TRUE)
install.packages("cluster", quiet = TRUE)
install.packages("fastcluster", quiet = TRUE)
install.packages("microbenchmark", quiet = TRUE)
install.packages("gplots", quiet = TRUE)
install.packages("dendextend", quiet = TRUE)

階層的クラスタリングの実行例

それではサンプルデータとして標準で搭載されているcarsのデータを使って階層的クラスタリングを実行してみましょう。

ここではstatsパッケージのhclust関数を使ってクラスタリングし、プロットします。

# carsのデータ読み込み
data(cars)
# データ間の距離を算出
dist.cars <- dist(cars)
# 階層的クラスタリングの実行
hclust.cars <- hclust(dist.cars)
# クラスタリングの結果をプロット
plot(hclust.cars)

グラフを見ると50このデータがクラスタリングされていることがわかります。

指定したクラスタ数に分割

先ほどのクラスタリングの結果から、データをいくつかのクラスタに分けてみます。

クラスタを分割するにはstatsパッケージのcutree関数を使って、指定した個数のクラスタに分割することができます。

library(dplyr)
library(ggplot2)

# クラスタの分割(今回はクラスタ数を3つに分割)
ct.cars <- cutree(hclust.cars, k = 3)
# クラスタ番号の結合
cars.hc <- cars %>%
mutate(cluster = factor(ct.cars, levels = 1:3))
# プロット
p <- ggplot(data = cars.hc, aes(x = speed, y = dist, color = cluster, shape = cluster)) +
geom_point(aes(shape = cluster))
plot(p)

クラスタを3つに分割してプロットしてみました。点の形・色をクラスタ番号で分けつつプロットしたグラフを見ると、確かに近い点同士が同じクラスタに分割されていることが確認できるかと思います。

距離の定量化とデータの併合

先ほどのクラスタリングの実行にはデータ間の距離を定量化するにはdist関数を使用し、データの併合にはhclust関数を使用しました。

それぞれの関数に引数を渡すことで手法を変えることができますので少し解説しておきます。

データ間の距離を定量化するdist関数

データ間の距離を定量化するにはdist関数のmethod引数に下記のような距離計算方法を指定します。

method引数 説明
euclidean ユークリッド距離
maximum 最大距離(チェビシェフ距離)
manhattan マンハッタン距離
canberra キャンベラ距離
binary バイナリ距離
minkowski ミンコフスキー距離

methodのして方法は下記のようにやります。デフォルトはユークリッド距離(euclidean)となります。

dist.cars <- dist(cars, method = "euclidean")

階層的クラスタリングを実行するhclust関数

hclust関数は階層的クラスタリングを実行する関数となります。

dist関数でデータ間の距離の計算後に、hclustでデータを併合してクラスタを形成することができます。hclust関数にもいくつかのmethod引数があり、下記となります。

method引数 説明
ward.D ウォード法
ward.D2 ウォード法(距離は二乗したものを使用)
single 最短距離法
complete 最長距離法
average 群平均法
mcquitty MxQuitty法
median メディアン法
centroid 重心法

 

参考

関連記事

【R】階層的クラスタリングのクラスタ数決定方法