はじめに

『Rによるバイオインフォマティクスデータ解析』の7.8節「階層クラスタリング」を参考にして,回帰分析をします.

準備

Rのインストールについては,次のページを見てください.

ここでは,標準パッケージのstatsUSArrestsデータセットを使います. USArrestsデータセットは,アメリカ合衆国の州ごとの殺人の発生件数,暴行の発生件数,都市部の人口割合,強姦の発生件数を格納したデータです. 犯罪の発生件数については人口10万人当たりの件数で,1973年のデータです.

> data(iris)

クラスタリング

クラスタリングは,分類対象のデータ集合をいくつかのグループに分割するものです. 分割された部分データ集合をクラスターといいます.

クラスタリングの手法には,主に階層的アプローチ分割最適化アプローチがあります. ここでは,前者の階層的アプローチをやります.

階層クラスタリング

階層クラスタリングには,トップ・ダウンに階層化する分岐型とボトム・アップに階層化する凝集型があります. ここでは,後者の凝集型をやります.

階層クラスタリングでは,まず,1つのデータだけを含むクラスターをデータと同じ数だけ作ります. それから,最も近い(似ている)クラスター同士を結合してより大きい新しいクラスターを作ります. これを全てのクラスターが一つに結合されるまで繰り返します.

Rで階層型クラスタリングを用いるには,hclust関数を用います. hclust関数への引数には距離行列を与えます. そこで,距離行列をdist関数で計算します.

> iris[sort(sample(1:150,10)),]
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
4            4.6         3.1          1.5         0.2     setosa
22           5.1         3.7          1.5         0.4     setosa
65           5.6         2.9          3.6         1.3 versicolor
97           5.7         2.9          4.2         1.3 versicolor
100          5.7         2.8          4.1         1.3 versicolor
108          7.3         2.9          6.3         1.8  virginica
116          6.4         3.2          5.3         2.3  virginica
122          5.6         2.8          4.9         2.0  virginica
136          7.7         3.0          6.1         2.3  virginica
146          6.7         3.0          5.2         2.3  virginica

#ref(): File not found: "usarrests_hclust_complete_euclidean.png" at page "バイオ・データ・マイニング/Rで階層クラスタリングを使う"

この図を見ると,どのクラスターとどのクラスターが結合したのかがわかります.

距離

上でも説明したように,凝集型階層クラスタリングでは最も近い(似ている)クラスター同士をくっつけますが,この「最も近い(似ている)」クラスターを決めるのに,距離尺度が必要になります.

一般的な距離尺度としては,ユークリッド距離が用いられています. \[ d({\bf x}_1, {\bf x}_2) = \sqrt{ \sum_{i=1}^p \left( x_{2,i} - x_{1,i} \right)^2 } \]

ユークリッド距離の他に,マンハッタン距離(マンハッタンでのタクシーを利用するときのように,一つの軸と並行に移動することしかできないときの移動距離) \[ d({\bf x}_1, {\bf x}_2) =\sum_{i=1}^p \left| x_{2,i} - x_{1,i} \right| \] を使うこともできます. マンハッタン距離を使うには,dist関数にオプションmethod="manhattan"を指定します.

> d <- dist(iris[,1:4])

#ref(): File not found: "usarrests_hclust_complete_manhattan.png" at page "バイオ・データ・マイニング/Rで階層クラスタリングを使う"

この他にも,いくつもの距離尺度が提案されています. 類似度と距離尺度に付いてはこちらにたくさんまとめられています.

結合方式

ユークリッド距離もマンハッタン距離も二つのデータ同士の間の距離を表していますが,どのクラスターとどのクラスターが最も近い(似ている)のかを直接的には表していません.

求めた距離に基づいて,どのクラスターとどのクラスターを結合するのかを決めなくてはなりません. これが結合方式です.

上の二つの例でも用いられた標準の方式は完全連結法(complete linkage method)という方式で,クラスター[math]C_1[/math]に含まれるデータとクラスター[math]C_2[/math]に含まれるデータの間の距離の中で最大のもの(つまり,最も離れているもの)を[math]C_1 C_2[/math]間の距離として,最も近い(似ている)クラスターを結合します. \[ d(C_1, C_2) = \max_{{\bf x}_1 \in C_1, {\bf x}_2 \in C_2} d({\bf x}_1, {\bf x}_2) \]

単連結法(simple linkage method)では,反対に,クラスター[math]C_1[/math]に含まれるデータとクラスター[math]C_2[/math]に含まれるデータの間の距離の中で最小のもの(つまり,最も近いもの)を[math]C_1 C_2[/math]間の距離として,最も近い(似ている)クラスターを結合します. \[ d(C_1, C_2) = \min_{{\bf x}_1 \in C_1, {\bf x}_2 \in C_2} d({\bf x}_1, {\bf x}_2) \] 単連結法を用いるには,hclust関数にオプションmethod="simple"を指定します.

> hc <- hclust(d)

#ref(): File not found: "usarrests_hclust_simple_euclidean.png" at page "バイオ・データ・マイニング/Rで階層クラスタリングを使う"

群平均法(group average method)では,クラスター[math]C_1[/math]に含まれるデータとクラスター[math]C_2[/math]に含まれるデータの間の距離の平均を[math]C_1 C_2[/math]間の距離として最も近い(似ている)クラスターを結合します. \[ d(C_1, C_2) = \frac{1}{|C_1||C_2|} \sum_{{\bf x}_1 \in C_1} \sum_{{\bf x_2} \in C_2} d({\bf x}_1 {\bf x}_2) \] hclust関数にオプションmethod="average"と指定すると,群平均法による結合になります. 参考にしている『Rによるバイオインフォマティクスデータ解析』には,クラスターに含まれるデータの平均同士の距離をクラスター同士の距離としているように書かれていますが,この説明は間違っています.

> plot(hc, labels=iris[,5], xlab="Iris")

#ref(): File not found: "usarrests_hclust_average_euclidean.png" at page "バイオ・データ・マイニング/Rで階層クラスタリングを使う"

メジアン法(median linkage method)では,クラスターAに含まれるデータの中央値とクラスターBに含まれるデータの中央値の間の距離をAB間の距離として,最も近い(似ている)クラスターを結合します. メジアン法を用いるには,hclust関数にオプションmethod="median"を指定します.

> d <- dist(iris[,1:4])
> hc <- hclust(d)
> plot(hc, labels=iris[,5], xlab="Euclidean")

#ref(): File not found: "usarrests_hclust_median_euclidean.png" at page "バイオ・データ・マイニング/Rで階層クラスタリングを使う"

重心法(centroid linkage method)では,クラスターの重心同士の間の距離をクラスター同士の距離として最も近い(似ている)クラスターを結合します. 重心法を用いるには,hclust関数にオプションmethod="centroid"を指定します.

> d <- dist(iris[,1:4], method="manhattan")
> hc <- hclust(d)
> plot(hc, labels=iris[,5], xlab="Manhattan")

#ref(): File not found: "usarrests_hclust_centroid_euclidean.png" at page "バイオ・データ・マイニング/Rで階層クラスタリングを使う"

Ward法では,

参考文献

この記事はまだ書きかけです.

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS