- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- バイオ・データ・マイニング/Rでスペクトラル・クラスタリングを使う へ行く。
- 1 (2012-11-27 (火) 14:00:28)
- 2 (2012-11-27 (火) 14:40:02)
- 3 (2012-11-28 (水) 09:42:07)
- 4 (2013-12-23 (月) 09:25:42)
- 5 (2013-12-23 (月) 09:25:42)
はじめに †
『Rによるバイオインフォマティクスデータ解析』の7.10節「スペクトラル・クラスタリング」を参考にして,スペクトラル・クラスタリングを行います.
準備 †
Rのインストールについては,次のページを見てください.
[math]k[/math]平均法が苦手なデータとして,二重円のデータを作成します. [math]-4[/math]から[math]4[/math]までの二次元の一様乱数を1,000個生成し,半径[math]3[/math]から[math]4[/math]の範囲にあるデータを[math]c_2[/math],半径[math]1[/math]から[math]2[/math]の範囲にあるデータを[math]c_1[/math]とします.
x = runif(1000) * 8 - 4 y = runif(1000) * 8 - 4 data = cbind(x, y) c2 = (x^2 + y^2) < 16 & (x^2 + y^2) > 9 c1 = (x^2 + y^2) < 4 & (x^2 + y^2) > 1 logo = data[(c2 | c1),] plot(logo)
まずは[math]k[/math]平均法を試して見ます.
km = kmeans(logo, 2) plot(logo, col=km$cluster, pch=km$cluster)
やはり[math]k[/math]平均法ではうまくクラスタリングできません.
スペクトラル・クラスタリングは,kernlabパッケージで提供されています. そこで,kernlabパッケージをインストールします.install.packagesコマンドを実行すると,パッケージをダウンロードするサーバーを聞かれますので,リストからJapanのどれかを選択します.
install.packages("kernlab") library(kernlab)
スペクトラル・クラスタリング †
スペクトラル・クラスタリングは,距離行列(類似度行列)を次元削減してそこで[math]k[/math]平均法などのクラスタリングを行う手法です.
スペクトラル・クラスタリングを行うには,speccコマンドを用います. speccコマンドには,データとクラスター数を引数として与えます.
sc = specc(logo, center=2) plot(logo, col=sc, pch=sc)
スペクトラル・クラスタリングではきれいにクラスタリングできました.
サンプル・データのspiralsでも試してみます.
data(spirals) plot(spirals)
まず,[math]k[/math]平均法を試します.
km = kmeans(spirals, 2) plot(spirals, col=km$cluster, pch=km$cluster)
次に,スペクトラル・クラスタリングを用います.
sc = specc(spirals, center=2) plot(spirals, col=sc, pch=sc)
speccは内部でランダムな初期化を行っていますので,[math]k[/math]平均法と同様に,乱数のシードによって結果が変わります. 同じ結果を得るためには,seed.setを用いて乱数のシードを指定してからスペクトラル・クラスタリングを行います.
set.seed(0) sc = specc(spirals, center=2)
まとめ †
スペクトラル・クラスタリングは,距離行列(類似度行列)を次元削減してそこで[math]k[/math]平均法などのクラスタリングを行う手法です.
[math]k[/math]平均法が苦手とするようなデータでもうまくいくことがあります.
(内部で行われているクラスタリングが乱数に依存する手法の場合)スペクトラル・クラスタリングの結果は乱数のシードに依存しますので,乱数のシードを変えて実行するとよりよい結果が得られる可能性があります.
参考文献 †
- クラスタリングとは(クラスター分析とは) - 神嶌敏弘さん
- スペクトラルクラスタリングは次元圧縮しながらKmeansする手法 - 観月橋日記 (続生駒日記)
- Rでk平均法を使う - とうごろうぃき