• 追加された行はこの色です。
  • 削除された行はこの色です。
この記事はまだ書きかけです.

*はじめに [#f4553c33]
『Rによるバイオインフォマティクスデータ解析』の7.10節「スペクトラル・クラスタリング」を参考にして,スペクトラル・クラスタリングを行います.
#html{{
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=tohgoroh-22&o=9&p=8&l=as1&asins=4320057082&ref=tf_til&fc1=444B4C&IS2=1&lt1=_blank&m=amazon&lc1=444B4C&bc1=FFFFFF&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
}}


*準備 [#e03b8e43]

Rのインストールについては,次のページを見てください.
-[[MacでRを使う>機械学習/MacでRを使う]]
-[[WindowsでRを使う>機械学習/WindowsでRを使う]]


[math]k[/math]平均法が苦手なデータとして,二重円のデータを作成します.
-4から4までの一様乱数を1,000個ずつ生成し,半径3から4の範囲にあるデータをc2,半径1から2の範囲にあるデータをc1とします.
[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]とします.
#geshi((rsplus){{
> 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)
}}
#ref(logo.png,nolink,50%)

まずは[math]k[/math]平均法を試して見ます.
#geshi(rsplus){{
> km = kmeans(logo, 2)
> plot(logo, col=km$cluster, pch=km$cluster)
}}
#ref(logo_kmeans.png,nolink,50%)

やはり[math]k[/math]平均法ではうまくクラスタリングできません.


この記事はまだ書きかけです.
スペクトラル・クラスタリングは,''kernlab''パッケージで提供されています.
そこで,kernlabパッケージをインストールします.''install.packages''コマンドを実行すると,パッケージをダウンロードするサーバーを聞かれますので,リストからJapanのどれかを選択します.
#geshi(rsplus){{
> install.packages("kernlab")
> library(kernlab)
}}



*スペクトラル・クラスタリング [#n0aec749]

スペクトラル・クラスタリングは,距離行列(類似度行列)を次元削減してそこで[math]k[/math]平均法などのクラスタリングを行う手法です.

スペクトラル・クラスタリングを行うには,''specc''コマンドを用います.
speccコマンドには,データとクラスター数を引数として与えます.
#geshi(rsplus){{
> sc = specc(logo, center=2)
> plot(logo, col=sc, pch=sc)
}}
#ref(logo_specc.png,nolink,50%)

スペクトラル・クラスタリングではきれいにクラスタリングできました.


サンプル・データの''spirals''でも試してみます.
#geshi(rsplus){{
> data(spirals)
> plot(spirals)
}}
#ref(spirals.png,nolink,50%)

まず,[math]k[/math]平均法を試します.
#geshi(rsplus){{
> km = kmeans(spirals, 2)
> plot(spirals, col=km$cluster, pch=km$cluster)
}}
#ref(spirals_kmeans.png,nolink,50%)

次に,スペクトラル・クラスタリングを用います.
#geshi(rsplus){{
> sc = specc(spirals, center=2)
> plot(spirals, col=sc, pch=sc)
}}
#ref(spirals_specc.png,nolink,50%)



*まとめ [#a640c60a]

スペクトラル・クラスタリングは,距離行列(類似度行列)を次元削減してそこで[math]k[/math]平均法などのクラスタリングを行う手法です.

[math]k[/math]平均法が苦手とするようなデータでもうまくいくことがあります.



*参考文献 [#y0547ce9]

#html{{
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=tohgoroh-22&o=9&p=8&l=as1&asins=4320057082&ref=tf_til&fc1=444B4C&IS2=1&lt1=_blank&m=amazon&lc1=444B4C&bc1=FFFFFF&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
}}

-[[クラスタリングとは(クラスター分析とは):http://www.kamishima.net/jp/clustering/]] - 神嶌敏弘さん
-[[スペクトラルクラスタリングは次元圧縮しながらKmeansする手法:http://d.hatena.ne.jp/mamoruk/20090128/p1]] - 観月橋日記 (続生駒日記)

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