はじめに

『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)
logo.png

まずは[math]k[/math]平均法を試して見ます.

km = kmeans(logo, 2)
plot(logo, col=km$cluster, pch=km$cluster)
logo_kmeans.png

やはり[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)
logo_specc.png

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

サンプル・データのspiralsでも試してみます.

data(spirals)
plot(spirals)
spirals.png

まず,[math]k[/math]平均法を試します.

km = kmeans(spirals, 2)
plot(spirals, col=km$cluster, pch=km$cluster)
spirals_kmeans.png

次に,スペクトラル・クラスタリングを用います.

sc = specc(spirals, center=2)
plot(spirals, col=sc, pch=sc)
spirals_specc.png

まとめ

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

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

参考文献

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