顔妻です。
階層クラスター分析についてご紹介です。とりあえずデータはたくさんあるといったときオススメです。内容は似ているデータをクラスターとしてまとめていき、主観に基づいて探索的に調査を進めながら分析するときに活用できます
前準備
実施するための下準備です。irisを使います。Rにも標準でinstallされています
# irisの数値だけを抽出
d2 <- iris[1:4]
# ユークリッド距離を抽出
d2_dist <- dist(iris)
ユークリッド距離は以下の式で計算されます。
階層クラスターで利用する手法
階層クラスターは様々な手法を活用することができます。
方法名 | 方法の内容 | hclustの設定 |
最短距離法(単連結法) | 2つのクラスターから1個ずつ個体を選び、個体間の距離を求め、最も近い個体間の距離をクラスター間の距離とする。外れ値に弱く、細長いグループになりやすい | hclust(<ユークリッド距離>, “single”) |
最長距離法(完全連結法) | 2つのクラスターから1個ずつ個体を選び、個体間の距離を求め、最も遠い個体間の距離をクラスター間の距離とする.外れ値に弱く球状のグループになりやすい。 | hclust(<ユークリッド距離>, “euclidean”) |
群平均法 | 最近隣法と最遠隣法のハイブリッド的な手法. 全個体間の距離の平均をクラスター間の距離とする。外れ値に強い。 | hclust(<ユークリッド距離>, “average”) |
ウォード法(最小分散法) | 併合することによる情報の損失量の増加分をクラスター間の距離とする. すべてのクラスター内の偏差平方和の和が小さくなるように併合する.外れ値に強く球状のグループになりやすい。 | hclust(<ユークリッド距離>, “ward.D2”) |
重心法 | クラスター間の重心間距離をクラスター間の距離とする. 重心を求める際に、個体数を重みとして用いる.直感的にわかりやすいことが多い | hclust(<ユークリッド距離>, “centroid”) |
メディアン法 | 重心法と似た方法。重みを等しくし求めたクラスター間の重心間距離をクラスター間の距離とする. | hclust(<ユークリッド距離>, “median”) |
階層クラスター分析の実施と可視化
階層クラスター分析はhclust関数で行います。また、階層クラスター分析を可視化するときはデンドログラムで階層構造がわかりやすいように可視化します。
# 階層クラスター分析の実施
d2_hc <- hclust(dist(d2))
# 樹形図をプロット
plot(d2_hc)
枝切りと精度検証
先ほどの樹形図の結果をみてどのくらいのグループ数に分けたいかを指定してフラグを立てていきます。クラスター分析に精度概念はないのですが、元々の分類を正解として比較してみましょう。
#3分類に枝切りを実施
result <- cutree(d2_hc , k = 3)
# 枝切りの結果比較
d <- data.frame(iris, result)
# 精度検証
table(d$Species, d$result)
1 | 2 | 3 | |
setosa | 50 | 0 | 0 |
versicolor | 0 | 23 | 27 |
virginica | 0 | 49 | 1 |
大まかな分類はしっかりとできているようです。グループを作りたいときには十分な役割をこなしてくれそうです。
まとめ
階層クラスター分析で分析を進めていくと列毎の関連が強いもので分類をしていくれるので、複数の変量でグルーピングを行うのにとても役立つと思います。一方でデータを使って作り出すものではありますが、定量的な根拠を出すものではありませんのでこちらも念頭に入れて活用してみてください。