バイオ・データ・マイニング/Rで階層クラスタリングを使う
をテンプレートにして作成
開始行:
*はじめに [#w8050692]
『Rによるバイオインフォマティクスデータ解析』の7.8節「階...
#html{{
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=tohgoroh-2...
}}
*準備 [#i005634f]
Rのインストールについては、次のページを見てください。
-[[MacでRを使う>機械学習/MacでRを使う]]
-[[WindowsでRを使う>機械学習/WindowsでRを使う]]
ここでは、標準で使用できる''irisデータセット''を使います。
#geshi(rsplus){{
> data(iris)
}}
このデータセットは、アヤメの種類(Species)をがく片の長さ...
長さと幅は連続値、種類はsetosa, versicolor, virginicaのい...
このデータセットには、setosa, versicolor, virginicaという...
ランダムに10個のデータを選択して、見てみましょう。
#geshi(rsplus){{
> iris[sort(sample(1:150,10)),]
Sepal.Length Sepal.Width Petal.Length Petal.Width ...
4 4.6 3.1 1.5 0.2 ...
22 5.1 3.7 1.5 0.4 ...
65 5.6 2.9 3.6 1.3 ver...
97 5.7 2.9 4.2 1.3 ver...
100 5.7 2.8 4.1 1.3 ver...
108 7.3 2.9 6.3 1.8 vi...
116 6.4 3.2 5.3 2.3 vi...
122 5.6 2.8 4.9 2.0 vi...
136 7.7 3.0 6.1 2.3 vi...
146 6.7 3.0 5.2 2.3 vi...
}}
*クラスタリング [#j0ec994d]
クラスタリングは、分類対象のデータ集合をいくつかのグルー...
分割された部分データ集合を''クラスター''といいます。
クラスタリングの手法には、主に''階層的アプローチ''と''分...
ここでは、前者の階層的アプローチを行います。
*階層クラスタリング [#wbf466ca]
階層クラスタリングには、トップ・ダウンに階層化する''分岐...
ここでは、後者の凝集型をやります。
''凝集型階層クラスタリング''では、まず、1つのデータだけを...
それから、最も近い(似ている)クラスター同士を結合してよ...
これを全てのクラスターが一つに結合されるまで繰り返します。
Rで階層クラスタリングを用いるには、''hclust''関数を用いま...
hclust関数の引数には距離行列を与えます。
距離行列は、''dist''関数で求めることができます。
そこで、まず、irisデータのSepal.Length, Sepal.Width, Peta...
#geshi(rsplus){{
> d <- dist(iris[,1:4])
}}
この距離行列を用いて、階層クラスタリングを行います。
#geshi(rsplus){{
> hc <- hclust(d)
}}
結果を''plot''関数を用いてプロットすると''デンドログラム'...
#geshi(rsplus){{
> plot(hc, labels=iris[,5], xlab="Iris")
}}
#ref(hc.png,nolink,33%)
デンドログラムを見ると、どのクラスターが結合したのかがわ...
*距離 [#ge6d4b61]
上でも説明したように、凝集型階層クラスタリングでは最も近...
一般的な距離尺度としては、''ユークリッド距離''が用いられ...
\[ d({\bf x}_1, {\bf x}_2) = \sqrt{ \sum_{i=1}^p \left( x...
距離行列を求めるときにmethodオプションを指定しなければ、...
#geshi(rsplus){{
> d <- dist(iris[,1:4])
> hc <- hclust(d)
> plot(hc, labels=iris[,5], xlab="Euclidean")
}}
#ref(hc_euclidean_complete.png,nolink,33%)
ユークリッド距離の他に、''マンハッタン距離''(マンハッタ...
\[ d({\bf x}_1, {\bf x}_2) =\sum_{i=1}^p \left| x_{2,i} -...
を使うこともできます。
マンハッタン距離を使うには、dist関数にオプション''method=...
#geshi(rsplus){{
> d <- dist(iris[,1:4], method="manhattan")
> hc <- hclust(d)
> plot(hc, labels=iris[,5], xlab="Manhattan")
}}
#ref(hc_manhattan_complete.png,nolink,33%)
この他にも、いくつもの距離尺度が提案されています。
類似度と距離尺度に付いてはこちらにたくさんまとめられてい...
-[[類似度と距離:http://wikiwiki.jp/cattail/?%CE%E0%BB%F7%...
*結合方式 [#f30f8931]
ユークリッド距離もマンハッタン距離も二つのデータ同士の間...
求めた距離に基づいて、どのクラスターとどのクラスターを結...
これが結合方式です。
上の二つの例でも用いられた標準の方式は''完全連結法'' (''c...
\[ d(C_1, C_2) = \max_{{\bf x}_1 \in C_1, {\bf x}_2 \in C...
''単連結法'' (''single'' linkage method) では、反対に、ク...
\[ d(C_1, C_2) = \min_{{\bf x}_1 \in C_1, {\bf x}_2 \in C...
単連結法を用いるには、hclust関数にオプション''method="sin...
#geshi(rsplus){{
> d <- dist(iris[,1:4])
> hc <- hclust(d, method="single")
> plot(hc, labels=iris[,5], xlab="Euclidean")
}}
#ref(hc_euclidean_single.png,nolink,33%)
''群平均法'' (group ''average'' method) では、クラスター[...
\[ d(C_1, C_2) = \frac{1}{|C_1||C_2|} \sum_{{\bf x}_1 \in...
hclust関数にオプション''method="average"''と指定すると、...
参考にしている『Rによるバイオインフォマティクスデータ解析...
#geshi(rsplus){{
> d <- dist(iris[,1:4])
> hc <- hclust(d, method="average")
> plot(hc, labels=iris[,5], xlab="Euclidean")
}}
#ref(hc_euclidean_average.png,nolink,33%)
''メジアン法'' (''median'' linkage method) では、クラスタ...
メジアン法を用いるには、hclust関数にオプション''method="m...
#geshi(rsplus){{
> d <- dist(iris[,1:4])
> hc <- hclust(d, method="median")
> plot(hc, labels=iris[,5], xlab="Euclidean")
}}
#ref(hc_euclidean_median.png,nolink,33%)
''重心法'' (''centroid'' linkage method) では、クラスター...
\[ d(C_1, C_2) = d({\bf c}_1, {\bf c}_2) \]
\[ {\bf c}_{i} = \frac{ \sum_{x \in C_i} x}{|C_i|} \]
重心法を用いるには、hclust関数にオプション''method="centr...
#geshi(rsplus){{
> d <- dist(iris[,1:4])
> hc <- hclust(d, method="centroid")
> plot(hc, labels=iris[,5], xlab="Euclidean")
}}
#ref(hc_euclidean_centroid.png,nolink,33%)
''Ward''法では、クラスター[math]C_1, C_2[/math]を結合して...
\[ d(C_1, C_2) = {\mathrm E}(C_1 \cup C_2) - {\mathrm E}(...
\[ {\mathrm E}(C_i) = \sum_{{\bf x} \in C_i} (d({\bf x}, ...
Ward法を用いるには、hclust関数にオプション''method="ward....
#geshi(rsplus){{
> d <- dist(iris[,1:4])
> hc <- hclust(d, method="ward.D")
> plot(hc, labels=iris[,5], xlab="Euclidean")
}}
#ref(hc_euclidean_ward.png,nolink,33%)
*距離行列 [#qc646c23]
''hclust''では、距離行列を自分で作成して階層クラスタリン...
距離行列は、(対角要素を除いた)下三角行列から''as.dist''...
ここでは、例として、A, B, C, Dという4つのデータを含む距離...
まず、名前のベクトルを作成します。
#geshi(rsplus){{
> names = c("A", "B", "C", "D")
}}
つぎに、4次の正方行列を作成します。
#geshi(rsplus){{
> d = matrix(, 4, 4, dimnames=list(names, names))
> d
A B C D
A NA NA NA NA
B NA NA NA NA
C NA NA NA NA
D NA NA NA NA
}}
対角要素以外の下三角行列の要素に、各データ間の距離を代入...
#geshi(rsplus){{
> d[2,1] = 1
> d[3,1] = 5
> d[4,1] = 6
> d[3,2] = 4
> d[4,2] = 5
> d[4,3] = 3
> d
A B C D
A NA NA NA NA
B 1 NA NA NA
C 5 4 NA NA
D 6 5 3 NA
}}
''as.dist''を用いてこの正方行列を距離行列に変換できること...
#geshi(sh){{
> as.dist(d)
A B C
B 1
C 5 4
D 6 5 3
}}
この距離行列を''hclust''に引数として与えることで、階層ク...
#geshi(sh){{
> hc <- hclust(as.dist(d))
> plot(hc)
}}
#ref(hc_dist.png,nolink,33%)
*クラスター番号 [#c2378c88]
階層クラスタリングによってつけられたクラスター番号を調べ...
cutree関数には、hclust関数によって出力された結果とクラス...
#geshi(rsplus){{
> d <- dist(iris[,1:4])
> hc <- hclust(d, method="ward.D")
> cutree(hc, 3)
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[26] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[51] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[76] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[101] 3 2 3 3 3 3 2 3 3 3 3 3 3 2 2 3 3 3 3 2 3 2 3 2 3
[126] 3 2 2 3 3 3 3 3 2 3 3 3 3 2 3 3 3 2 3 3 3 2 3 3 2
}}
これは、Ward法による階層クラスタリングの結果を、クラスタ...
*まとめ [#xba66b81]
凝集型階層クラスタリングでは、最も近いクラスターを結合し...
このとき、最も近い2つのクラスターを選び出すために、クラス...
クラスター間の距離を測る方法を結合法といい、完全結合法、...
また、クラスター間の距離尺度はデータ間の距離尺度に基づい...
データ間の距離尺度には、ユークリッド距離、マンハッタン距...
したがって、凝集型階層クラスタリングでは、データ間の距離...
*演習 [#icb3dcfe]
irisデータに対して、自分で階層クラスタリングをやってみよ...
*参考文献 [#ubdf2be8]
#html{{
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=tohgoroh-2...
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=tohgoroh-2...
}}
-[[クラスタリングとは(クラスター分析とは):http://www.ka...
-[[類似度と距離:http://wikiwiki.jp/cattail/?%CE%E0%BB%F7%...
終了行:
*はじめに [#w8050692]
『Rによるバイオインフォマティクスデータ解析』の7.8節「階...
#html{{
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=tohgoroh-2...
}}
*準備 [#i005634f]
Rのインストールについては、次のページを見てください。
-[[MacでRを使う>機械学習/MacでRを使う]]
-[[WindowsでRを使う>機械学習/WindowsでRを使う]]
ここでは、標準で使用できる''irisデータセット''を使います。
#geshi(rsplus){{
> data(iris)
}}
このデータセットは、アヤメの種類(Species)をがく片の長さ...
長さと幅は連続値、種類はsetosa, versicolor, virginicaのい...
このデータセットには、setosa, versicolor, virginicaという...
ランダムに10個のデータを選択して、見てみましょう。
#geshi(rsplus){{
> iris[sort(sample(1:150,10)),]
Sepal.Length Sepal.Width Petal.Length Petal.Width ...
4 4.6 3.1 1.5 0.2 ...
22 5.1 3.7 1.5 0.4 ...
65 5.6 2.9 3.6 1.3 ver...
97 5.7 2.9 4.2 1.3 ver...
100 5.7 2.8 4.1 1.3 ver...
108 7.3 2.9 6.3 1.8 vi...
116 6.4 3.2 5.3 2.3 vi...
122 5.6 2.8 4.9 2.0 vi...
136 7.7 3.0 6.1 2.3 vi...
146 6.7 3.0 5.2 2.3 vi...
}}
*クラスタリング [#j0ec994d]
クラスタリングは、分類対象のデータ集合をいくつかのグルー...
分割された部分データ集合を''クラスター''といいます。
クラスタリングの手法には、主に''階層的アプローチ''と''分...
ここでは、前者の階層的アプローチを行います。
*階層クラスタリング [#wbf466ca]
階層クラスタリングには、トップ・ダウンに階層化する''分岐...
ここでは、後者の凝集型をやります。
''凝集型階層クラスタリング''では、まず、1つのデータだけを...
それから、最も近い(似ている)クラスター同士を結合してよ...
これを全てのクラスターが一つに結合されるまで繰り返します。
Rで階層クラスタリングを用いるには、''hclust''関数を用いま...
hclust関数の引数には距離行列を与えます。
距離行列は、''dist''関数で求めることができます。
そこで、まず、irisデータのSepal.Length, Sepal.Width, Peta...
#geshi(rsplus){{
> d <- dist(iris[,1:4])
}}
この距離行列を用いて、階層クラスタリングを行います。
#geshi(rsplus){{
> hc <- hclust(d)
}}
結果を''plot''関数を用いてプロットすると''デンドログラム'...
#geshi(rsplus){{
> plot(hc, labels=iris[,5], xlab="Iris")
}}
#ref(hc.png,nolink,33%)
デンドログラムを見ると、どのクラスターが結合したのかがわ...
*距離 [#ge6d4b61]
上でも説明したように、凝集型階層クラスタリングでは最も近...
一般的な距離尺度としては、''ユークリッド距離''が用いられ...
\[ d({\bf x}_1, {\bf x}_2) = \sqrt{ \sum_{i=1}^p \left( x...
距離行列を求めるときにmethodオプションを指定しなければ、...
#geshi(rsplus){{
> d <- dist(iris[,1:4])
> hc <- hclust(d)
> plot(hc, labels=iris[,5], xlab="Euclidean")
}}
#ref(hc_euclidean_complete.png,nolink,33%)
ユークリッド距離の他に、''マンハッタン距離''(マンハッタ...
\[ d({\bf x}_1, {\bf x}_2) =\sum_{i=1}^p \left| x_{2,i} -...
を使うこともできます。
マンハッタン距離を使うには、dist関数にオプション''method=...
#geshi(rsplus){{
> d <- dist(iris[,1:4], method="manhattan")
> hc <- hclust(d)
> plot(hc, labels=iris[,5], xlab="Manhattan")
}}
#ref(hc_manhattan_complete.png,nolink,33%)
この他にも、いくつもの距離尺度が提案されています。
類似度と距離尺度に付いてはこちらにたくさんまとめられてい...
-[[類似度と距離:http://wikiwiki.jp/cattail/?%CE%E0%BB%F7%...
*結合方式 [#f30f8931]
ユークリッド距離もマンハッタン距離も二つのデータ同士の間...
求めた距離に基づいて、どのクラスターとどのクラスターを結...
これが結合方式です。
上の二つの例でも用いられた標準の方式は''完全連結法'' (''c...
\[ d(C_1, C_2) = \max_{{\bf x}_1 \in C_1, {\bf x}_2 \in C...
''単連結法'' (''single'' linkage method) では、反対に、ク...
\[ d(C_1, C_2) = \min_{{\bf x}_1 \in C_1, {\bf x}_2 \in C...
単連結法を用いるには、hclust関数にオプション''method="sin...
#geshi(rsplus){{
> d <- dist(iris[,1:4])
> hc <- hclust(d, method="single")
> plot(hc, labels=iris[,5], xlab="Euclidean")
}}
#ref(hc_euclidean_single.png,nolink,33%)
''群平均法'' (group ''average'' method) では、クラスター[...
\[ d(C_1, C_2) = \frac{1}{|C_1||C_2|} \sum_{{\bf x}_1 \in...
hclust関数にオプション''method="average"''と指定すると、...
参考にしている『Rによるバイオインフォマティクスデータ解析...
#geshi(rsplus){{
> d <- dist(iris[,1:4])
> hc <- hclust(d, method="average")
> plot(hc, labels=iris[,5], xlab="Euclidean")
}}
#ref(hc_euclidean_average.png,nolink,33%)
''メジアン法'' (''median'' linkage method) では、クラスタ...
メジアン法を用いるには、hclust関数にオプション''method="m...
#geshi(rsplus){{
> d <- dist(iris[,1:4])
> hc <- hclust(d, method="median")
> plot(hc, labels=iris[,5], xlab="Euclidean")
}}
#ref(hc_euclidean_median.png,nolink,33%)
''重心法'' (''centroid'' linkage method) では、クラスター...
\[ d(C_1, C_2) = d({\bf c}_1, {\bf c}_2) \]
\[ {\bf c}_{i} = \frac{ \sum_{x \in C_i} x}{|C_i|} \]
重心法を用いるには、hclust関数にオプション''method="centr...
#geshi(rsplus){{
> d <- dist(iris[,1:4])
> hc <- hclust(d, method="centroid")
> plot(hc, labels=iris[,5], xlab="Euclidean")
}}
#ref(hc_euclidean_centroid.png,nolink,33%)
''Ward''法では、クラスター[math]C_1, C_2[/math]を結合して...
\[ d(C_1, C_2) = {\mathrm E}(C_1 \cup C_2) - {\mathrm E}(...
\[ {\mathrm E}(C_i) = \sum_{{\bf x} \in C_i} (d({\bf x}, ...
Ward法を用いるには、hclust関数にオプション''method="ward....
#geshi(rsplus){{
> d <- dist(iris[,1:4])
> hc <- hclust(d, method="ward.D")
> plot(hc, labels=iris[,5], xlab="Euclidean")
}}
#ref(hc_euclidean_ward.png,nolink,33%)
*距離行列 [#qc646c23]
''hclust''では、距離行列を自分で作成して階層クラスタリン...
距離行列は、(対角要素を除いた)下三角行列から''as.dist''...
ここでは、例として、A, B, C, Dという4つのデータを含む距離...
まず、名前のベクトルを作成します。
#geshi(rsplus){{
> names = c("A", "B", "C", "D")
}}
つぎに、4次の正方行列を作成します。
#geshi(rsplus){{
> d = matrix(, 4, 4, dimnames=list(names, names))
> d
A B C D
A NA NA NA NA
B NA NA NA NA
C NA NA NA NA
D NA NA NA NA
}}
対角要素以外の下三角行列の要素に、各データ間の距離を代入...
#geshi(rsplus){{
> d[2,1] = 1
> d[3,1] = 5
> d[4,1] = 6
> d[3,2] = 4
> d[4,2] = 5
> d[4,3] = 3
> d
A B C D
A NA NA NA NA
B 1 NA NA NA
C 5 4 NA NA
D 6 5 3 NA
}}
''as.dist''を用いてこの正方行列を距離行列に変換できること...
#geshi(sh){{
> as.dist(d)
A B C
B 1
C 5 4
D 6 5 3
}}
この距離行列を''hclust''に引数として与えることで、階層ク...
#geshi(sh){{
> hc <- hclust(as.dist(d))
> plot(hc)
}}
#ref(hc_dist.png,nolink,33%)
*クラスター番号 [#c2378c88]
階層クラスタリングによってつけられたクラスター番号を調べ...
cutree関数には、hclust関数によって出力された結果とクラス...
#geshi(rsplus){{
> d <- dist(iris[,1:4])
> hc <- hclust(d, method="ward.D")
> cutree(hc, 3)
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[26] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[51] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[76] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[101] 3 2 3 3 3 3 2 3 3 3 3 3 3 2 2 3 3 3 3 2 3 2 3 2 3
[126] 3 2 2 3 3 3 3 3 2 3 3 3 3 2 3 3 3 2 3 3 3 2 3 3 2
}}
これは、Ward法による階層クラスタリングの結果を、クラスタ...
*まとめ [#xba66b81]
凝集型階層クラスタリングでは、最も近いクラスターを結合し...
このとき、最も近い2つのクラスターを選び出すために、クラス...
クラスター間の距離を測る方法を結合法といい、完全結合法、...
また、クラスター間の距離尺度はデータ間の距離尺度に基づい...
データ間の距離尺度には、ユークリッド距離、マンハッタン距...
したがって、凝集型階層クラスタリングでは、データ間の距離...
*演習 [#icb3dcfe]
irisデータに対して、自分で階層クラスタリングをやってみよ...
*参考文献 [#ubdf2be8]
#html{{
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=tohgoroh-2...
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=tohgoroh-2...
}}
-[[クラスタリングとは(クラスター分析とは):http://www.ka...
-[[類似度と距離:http://wikiwiki.jp/cattail/?%CE%E0%BB%F7%...
ページ名: