バイオ・データ・マイニング/Rでk平均法を使う
をテンプレートにして作成
開始行:
*はじめに [#ye1804ba]
『Rによるバイオインフォマティクスデータ解析』の7.9.1節「[...
#html{{
<iframe style="width:120px;height:240px;" marginwidth="0"...
}}
*準備 [#zf92ac9d]
Rのインストールについては,次のページを見てください.
-[[MacでRを使う>機械学習/MacでRを使う]]
-[[WindowsでRを使う>機械学習/WindowsでRを使う]]
まず,[math](1, 1)[/math] を中心として,[math]x[/math]座...
次に,[math](-1 -1)[/math] を中心として,同じように分散0....
c1とc2をまとめて,dataとし,これをプロットします.
#geshi(rsplus){{
set.seed(123)
x1 = rnorm(100, mean=1, sd=0.3)
y1 = rnorm(100, mean=1, sd=0.3)
c1 <- cbind(x1, y1)
x2 = rnorm(100, mean=-1, sd=0.3)
y2 = rnorm(100, mean=-1, sd=0.3)
c2 <- cbind(x2, y2)
data1 <- rbind(c1, c2)
colnames(data1) <- c("x", "y")
plot(data1)
}}
#ref(kmeans_data1.png,nolink,50%)
*クラスタリング [#j0ec994d]
クラスタリングは,分類対象のデータ集合をいくつかのグルー...
分割された部分データ集合を''クラスター''といいます.
クラスタリングの手法には,主に''階層的アプローチ''と''分...
ここでは,後者の分割最適化アプローチの一つである''[math]k...
*k平均法 [#fbb389e4]
[math]k[/math]平均法([math]k[/math]-means)は,データの...
クラスター数 [math]k[/math] を最初に決めておかなければな...
[math]k[/math]平均法は,次の手順で行います.
+各データ [math]\bf{x}_1, \dots, \bf{x}_n[/math] に対して...
+クラスター [math]c_1, \dots, c_k[/math] ごとに,クラスタ...
+各データ [math]\bf{x}_1, \dots, \bf{x}_n[/math] に対して...
+全てのデータについてクラスターの割り当てが変更されなかっ...
Rで[math]k[/math]平均法を用いるには,''kmeans''関数を用い...
kmeans関数の引数には,分割するデータとクラスター数 [math]...
#geshi(rsplus){{
data1.kmeans <- kmeans(data1, 2)
}}
作成されたオブジェクトの''cluster''変数には割り当てられた...
#geshi(rsplus){{
data1.kmeans$cluster
}}
#geshi(rsplus)){{
[1] 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
[26] 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
[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] 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
[126] 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
[151] 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
[176] 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
}}
#geshi(rsplus){{
data1.kmeans$center
}}
#geshi(rsplus){{
x y
1 -0.9638605 -1.010867
2 1.0271218 0.967736
}}
結果をプロットすると次のようになります.
#geshi(rsplus){{
plot(data1, col=data1.kmeans$cluster, pch=data1.kmeans$cl...
points(data1.kmeans$centers, col=1:2, pch=8, cex=2)
}}
#ref(kmeans1.png,nolink,50%)
[math]k[/math]平均法の結果は,最初に行われるランダムな割...
''nstartオプション''の値(デフォルトは1)を2以上にすると...
#geshi(rsplus){{
> data1.kmeans <- kmeans(data1, 2, nstart=10)
}}
また,[math]k[/math]平均法を実行するたびに結果が変わるの...
#geshi(rsplus){{
set.seed(0)
data1.kmeans <- kmeans(data1, 2)
}}
*k平均法が苦手な問題 [#a4275b11]
今度は,もう少し分散を大きくし,かつ,データの個数を同じ...
#geshi(rsplus){{
set.seed(123)
x1 = rnorm(100, mean=1, sd=1)
y1 = rnorm(100, mean=1, sd=1)
c1 <- cbind(x1, y1)
x2 = rnorm(10, mean=-1, sd=1)
y2 = rnorm(10, mean=-1, sd=1)
c2 <- cbind(x2, y2)
data2 <- rbind(c1, c2)
plot(data2)
}}
#ref(kmeans_data2.png,nolink,50%)
#geshi(rsplus){{
data2.kmeans <- kmeans(data2, 2)
plot(data2, col=data2.kmeans$cluster, pch=data2.kmeans$cl...
points(data2.kmeans$centers, col=1:2, pch=8, cex=2)
}}
#ref(kmeans2.png,nolink,50%)
すると,データを生成するときに使用した中心 [math](1, 1), ...
[math]k[/math]平均法はこういう問題はうまくクラスタリング...
*irisデータセット [#ubb56800]
''irisデータセット''でもやってみましょう.
#geshi(rsplus){{
data(iris)
}}
このデータセットは,アヤメの種類(Species)をがく片の長さ...
長さと幅は連続値,種類はsetosa, versicolor, virginicaのい...
このデータセットには,setosa, versicolor, virginicaという...
ランダムに10個のデータを選択して,見てみましょう.
#geshi(rsplus){{
iris[sort(sample(1:150,10)),]
}}
#geshi(rsplus){{
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...
}}
ここでは,Speciesを除いた1列目から4列目だけを取り出して使...
#geshi(rsplus){{
iris.nolabel <- iris[1:4]
}}
4次元データですが,このうちのSepal.LengthとPetal.Lengthだ...
データを表示するときの色''col''と形''pch''にはirisのSpeci...
#geshi(rsplus){{
plot(iris.nolabel$Sepal.Length, iris.nolabel$Petal.Length,
col=as.numeric(iris$Species), pch=as.numeric(iris$Spe...
}}
#ref(iris.png,nolink,40%)
カテゴリーの数は3だとわかっていますので,[math]k=3[/math]...
#geshi(rsplus){{
iris.nolabel.kmeans <- kmeans(iris.nolabel, 3)
}}
今度は色と形をクラスタリングによって得られたクラスター番...
#geshi(rsplus){{
plot(iris.nolabel$Sepal.Length, iris.nolabel$Petal.Length,
col=iris.nolabel.kmeans$cluster, pch=iris.nolabel.kme...
}}
#ref(iris_kmeans.png,nolink,40%)
*まとめ [#k4ec4f3a]
[math]k[/math]平均法は,[math]k[/math] 個のクラスターへの...
[math]k[/math]平均法では,クラスターの数 [math]k[/math] ...
したがって,いくつかの [math]k[/math] を試して最もうまく...
[math]k[/math]平均法の結果は,最初に行われるランダムな割...
nstartオプションで複数回実行して最も良い結果を採用するか...
また,[math]k[/math]平均法ではうまくいかない問題があるこ...
そのようなときは,スペクトラル・クラスタリングを用いると...
*参考文献 [#q4967b57]
#html{{
<iframe style="width:120px;height:240px;" marginwidth="0"...
}}
-[[クラスタリングとは(クラスター分析とは):http://www.ka...
-[[Rでスペクトラル・クラスタリングを使う>バイオ・データ・...
終了行:
*はじめに [#ye1804ba]
『Rによるバイオインフォマティクスデータ解析』の7.9.1節「[...
#html{{
<iframe style="width:120px;height:240px;" marginwidth="0"...
}}
*準備 [#zf92ac9d]
Rのインストールについては,次のページを見てください.
-[[MacでRを使う>機械学習/MacでRを使う]]
-[[WindowsでRを使う>機械学習/WindowsでRを使う]]
まず,[math](1, 1)[/math] を中心として,[math]x[/math]座...
次に,[math](-1 -1)[/math] を中心として,同じように分散0....
c1とc2をまとめて,dataとし,これをプロットします.
#geshi(rsplus){{
set.seed(123)
x1 = rnorm(100, mean=1, sd=0.3)
y1 = rnorm(100, mean=1, sd=0.3)
c1 <- cbind(x1, y1)
x2 = rnorm(100, mean=-1, sd=0.3)
y2 = rnorm(100, mean=-1, sd=0.3)
c2 <- cbind(x2, y2)
data1 <- rbind(c1, c2)
colnames(data1) <- c("x", "y")
plot(data1)
}}
#ref(kmeans_data1.png,nolink,50%)
*クラスタリング [#j0ec994d]
クラスタリングは,分類対象のデータ集合をいくつかのグルー...
分割された部分データ集合を''クラスター''といいます.
クラスタリングの手法には,主に''階層的アプローチ''と''分...
ここでは,後者の分割最適化アプローチの一つである''[math]k...
*k平均法 [#fbb389e4]
[math]k[/math]平均法([math]k[/math]-means)は,データの...
クラスター数 [math]k[/math] を最初に決めておかなければな...
[math]k[/math]平均法は,次の手順で行います.
+各データ [math]\bf{x}_1, \dots, \bf{x}_n[/math] に対して...
+クラスター [math]c_1, \dots, c_k[/math] ごとに,クラスタ...
+各データ [math]\bf{x}_1, \dots, \bf{x}_n[/math] に対して...
+全てのデータについてクラスターの割り当てが変更されなかっ...
Rで[math]k[/math]平均法を用いるには,''kmeans''関数を用い...
kmeans関数の引数には,分割するデータとクラスター数 [math]...
#geshi(rsplus){{
data1.kmeans <- kmeans(data1, 2)
}}
作成されたオブジェクトの''cluster''変数には割り当てられた...
#geshi(rsplus){{
data1.kmeans$cluster
}}
#geshi(rsplus)){{
[1] 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
[26] 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
[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] 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
[126] 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
[151] 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
[176] 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
}}
#geshi(rsplus){{
data1.kmeans$center
}}
#geshi(rsplus){{
x y
1 -0.9638605 -1.010867
2 1.0271218 0.967736
}}
結果をプロットすると次のようになります.
#geshi(rsplus){{
plot(data1, col=data1.kmeans$cluster, pch=data1.kmeans$cl...
points(data1.kmeans$centers, col=1:2, pch=8, cex=2)
}}
#ref(kmeans1.png,nolink,50%)
[math]k[/math]平均法の結果は,最初に行われるランダムな割...
''nstartオプション''の値(デフォルトは1)を2以上にすると...
#geshi(rsplus){{
> data1.kmeans <- kmeans(data1, 2, nstart=10)
}}
また,[math]k[/math]平均法を実行するたびに結果が変わるの...
#geshi(rsplus){{
set.seed(0)
data1.kmeans <- kmeans(data1, 2)
}}
*k平均法が苦手な問題 [#a4275b11]
今度は,もう少し分散を大きくし,かつ,データの個数を同じ...
#geshi(rsplus){{
set.seed(123)
x1 = rnorm(100, mean=1, sd=1)
y1 = rnorm(100, mean=1, sd=1)
c1 <- cbind(x1, y1)
x2 = rnorm(10, mean=-1, sd=1)
y2 = rnorm(10, mean=-1, sd=1)
c2 <- cbind(x2, y2)
data2 <- rbind(c1, c2)
plot(data2)
}}
#ref(kmeans_data2.png,nolink,50%)
#geshi(rsplus){{
data2.kmeans <- kmeans(data2, 2)
plot(data2, col=data2.kmeans$cluster, pch=data2.kmeans$cl...
points(data2.kmeans$centers, col=1:2, pch=8, cex=2)
}}
#ref(kmeans2.png,nolink,50%)
すると,データを生成するときに使用した中心 [math](1, 1), ...
[math]k[/math]平均法はこういう問題はうまくクラスタリング...
*irisデータセット [#ubb56800]
''irisデータセット''でもやってみましょう.
#geshi(rsplus){{
data(iris)
}}
このデータセットは,アヤメの種類(Species)をがく片の長さ...
長さと幅は連続値,種類はsetosa, versicolor, virginicaのい...
このデータセットには,setosa, versicolor, virginicaという...
ランダムに10個のデータを選択して,見てみましょう.
#geshi(rsplus){{
iris[sort(sample(1:150,10)),]
}}
#geshi(rsplus){{
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...
}}
ここでは,Speciesを除いた1列目から4列目だけを取り出して使...
#geshi(rsplus){{
iris.nolabel <- iris[1:4]
}}
4次元データですが,このうちのSepal.LengthとPetal.Lengthだ...
データを表示するときの色''col''と形''pch''にはirisのSpeci...
#geshi(rsplus){{
plot(iris.nolabel$Sepal.Length, iris.nolabel$Petal.Length,
col=as.numeric(iris$Species), pch=as.numeric(iris$Spe...
}}
#ref(iris.png,nolink,40%)
カテゴリーの数は3だとわかっていますので,[math]k=3[/math]...
#geshi(rsplus){{
iris.nolabel.kmeans <- kmeans(iris.nolabel, 3)
}}
今度は色と形をクラスタリングによって得られたクラスター番...
#geshi(rsplus){{
plot(iris.nolabel$Sepal.Length, iris.nolabel$Petal.Length,
col=iris.nolabel.kmeans$cluster, pch=iris.nolabel.kme...
}}
#ref(iris_kmeans.png,nolink,40%)
*まとめ [#k4ec4f3a]
[math]k[/math]平均法は,[math]k[/math] 個のクラスターへの...
[math]k[/math]平均法では,クラスターの数 [math]k[/math] ...
したがって,いくつかの [math]k[/math] を試して最もうまく...
[math]k[/math]平均法の結果は,最初に行われるランダムな割...
nstartオプションで複数回実行して最も良い結果を採用するか...
また,[math]k[/math]平均法ではうまくいかない問題があるこ...
そのようなときは,スペクトラル・クラスタリングを用いると...
*参考文献 [#q4967b57]
#html{{
<iframe style="width:120px;height:240px;" marginwidth="0"...
}}
-[[クラスタリングとは(クラスター分析とは):http://www.ka...
-[[Rでスペクトラル・クラスタリングを使う>バイオ・データ・...
ページ名: