R Language
hclustによる階層的クラスタリング
サーチ…
前書き
stats
パッケージはhclust
関数を提供し、階層的クラスタリングを実行します。
備考
hclust以外にも、他の方法もあります。「 クラスタリングのCRANパッケージの表示」を参照してください。
例1 - hclustの基本的な使い方、デンドログラムの表示、プロットクラスタ
クラスタライブラリにはruspiniデータが含まれています。これはクラスタ分析を説明するための標準データセットです。
library(cluster) ## to get the ruspini data
plot(ruspini, asp=1, pch=20) ## take a look at the data
hclustは元のデータではなく、距離行列を求めます。デフォルトのパラメータを使用してツリーを計算して表示します。ハングパラメータは、ベースラインに沿ってツリーのすべての葉を並べます。
ruspini_hc_defaults <- hclust(dist(ruspini))
dend <- as.dendrogram(ruspini_hc_defaults)
if(!require(dendextend)) install.packages("dendextend"); library(dendextend)
dend <- color_branches(dend, k = 4)
plot(dend)
ツリーをカットして4つのクラスターを与え、クラスターごとに点を塗りつぶすデータを置き換えます。 kは所望のクラスタ数である。
rhc_def_4 = cutree(ruspini_hc_defaults,k=4)
plot(ruspini, pch=20, asp=1, col=rhc_def_4)
このクラスタリングはちょっと奇妙です。データを先にスケーリングすることで、より良いクラスタリングを得ることができます。
scaled_ruspini_hc_defaults = hclust(dist(scale(ruspini)))
srhc_def_4 = cutree(scaled_ruspini_hc_defaults,4)
plot(ruspini, pch=20, asp=1, col=srhc_def_4)
クラスタを比較するためのデフォルトの相違度の尺度は「完全」です。 methodパラメータで別のメジャーを指定できます。
ruspini_hc_single = hclust(dist(ruspini), method="single")
例2 - hclustと外れ値
階層的クラスタリングでは、外れ値は1点クラスターとして表示されることがよくあります。
異常値の影響を説明するために、3つのガウス分布を生成します。
set.seed(656)
x = c(rnorm(150, 0, 1), rnorm(150,9,1), rnorm(150,4.5,1))
y = c(rnorm(150, 0, 1), rnorm(150,0,1), rnorm(150,5,1))
XYdf = data.frame(x,y)
plot(XYdf, pch=20)
クラスタ構造を構築し、3つのクラスタに分割します。
XY_sing = hclust(dist(XYdf), method="single")
XYs3 = cutree(XY_sing,k=3)
table(XYs3)
XYs3
1 2 3
448 1 1
hclustは2つの異常値を見つけ出し、すべてを他の大きなクラスターに入れました。 「本当の」クラスターを得るには、kを高く設定する必要があります。
XYs6 = cutree(XY_sing,k=6)
table(XYs6)
XYs6
1 2 3 4 5 6
148 150 1 149 1 1
plot(XYdf, pch=20, col=XYs6)
このStackOverflowポストには、クラスタの数を選択する方法についてのガイダンスがありますが、階層的クラスタリングではこの動作に注意してください。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow