- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- バイオ・データ・マイニング/Rで独立成分分析する へ行く。
この記事はまだ書きかけです.
はじめに †
ここでは,Rを使って独立成分分析を行います.
準備 †
Rのインストールについては,次のページを見てください.
独立成分分析は,fastICAパッケージに含まれています. そこで,fastICAパッケージをインストールします. install.packagesコマンドを実行すると,パッケージをダウンロードするサーバーを聞かれますので,リストからJapanのどれかを選択します.
> install.packages("fastICA") > library(fastICA)
独立成分分析 †
独立成分分析 (Independent Component Analysis, ICA) は,多変量解析の一手法で,高次元の数値データを(独立に生起している)複数の成分に分解する手法です.
[math]n[/math] 個の信号源から発生した [math]n[/math] 個の [math]p[/math] 次元データ [math]s_1, \dots, s_n[/math] があり,観測した [math]m[/math] 個のデータ [math] x_1, \dots, x_m[/math] が次のような線形和で表されるとします. \[ \begin{array}{c@{}c@{}c} x_1 &=& a_{1,1} s_{1} + a_{1,2} s_{2} + \dots + a_{1,n} s_{n} \\ x_2 &=& a_{2,1} s_{1} + a_{2,2} s_{2} + \dots + a_{2,n} s_{n} \\ \vdots & & \\ x_m &=& a_{m,1} s_{1} + a_{m,2} s_{2} + \dots + a_{m,n} s_{n} \end{array} \]
これを [math]\mathbf{x} = A \mathbf{s}[/math] と表すと,[math]A[/math] の逆変換 [math]A^{-1}[/math] を使って [math]\mathbf{s} = A^{-1} \mathbf{x}[/math] と表すことができます. しかし,[math]A[/math] がわからないと [math]A^{-1}[/math] もわかりません. そこで,これを [math]W[/math] として,次のように表します. \[ \begin{array}{c@{}c@{}c} s_1 &=& w_{1,1} x_{1} + w_{1,2} x_{2} + \dots + w_{1,m} x_{m} \\ s_2 &=& w_{2,1} x_{1} + w_{2,2} x_{2} + \dots + w_{2,m} x_{m} \\ \vdots & & \\ s_n &=& w_{n,1} x_{1} + w_{n,2} x_{2} + \dots + w_{n,m} x_{m} \end{array} \]
独立成分分析は,観測した [math]m[/math] 個のデータ [math] x_1, \dots, x_m[/math] から [math]n[/math] 個の(独立な)信号源から発生した [math]n[/math] 個のデータ [math]s_1, \dots, s_n[/math] に復元する係数を求めます.
独立成分分析を行う †
標準で使えるirisデータセットに対して,主成分分析を行ってみましょう.
> data(iris)
このデータセットは,アヤメの種類(Species)を花びらの長さ(Sepal.Length),幅(Lepal.Width),がくの長さ(Petal.Length),幅(Petal.Width)によって分類する問題です. 長さと幅は連続値,種類はsetosa, versicolor, virginicaのいずれかをとる離散値です.
このデータセットには,setosa, versicolor, virginicaという3種類のアヤメについて,それぞれ50個ずつ,合計150個のデータが含まれています. ランダムに10個のデータを選択して,見てみましょう.
> iris[sort(sample(1:150,10)),] Sepal.Length Sepal.Width Petal.Length Petal.Width Species 4 4.6 3.1 1.5 0.2 setosa 22 5.1 3.7 1.5 0.4 setosa 65 5.6 2.9 3.6 1.3 versicolor 97 5.7 2.9 4.2 1.3 versicolor 100 5.7 2.8 4.1 1.3 versicolor 108 7.3 2.9 6.3 1.8 virginica 116 6.4 3.2 5.3 2.3 virginica 122 5.6 2.8 4.9 2.0 virginica 136 7.7 3.0 6.1 2.3 virginica 146 6.7 3.0 5.2 2.3 virginica
> iris.ic <- fastICA(iris[1:4], 4)
> pairs(iris.ic$S, pch=as.integer(iris$Species))