【Rによるデータサイエンス】カーネル法

【定義】
カーネル(kernel)法とは。。。

カーネル関数を使用してデータを表現しなおす方法。

なぜ、表現しなおすかって?
例えば、非線形的なデータ構造を線形構造に変換することができれば、線形的なデータ解析手法(線形マシン)で非線形データを扱う事が可能になる。これは便利だ。

ところで、カーネル関数とは。。。
個体の特徴・属性ベクトル(入力空間)を異なる空間へ変換する関数\Phi(x)=Fと、任意の個体x、zの内積<\Phi(x),\Phi(z)>のような処理を借りて、データ変換と内積のような演算を組み合わせた関数をカーネル関数と呼び、K(x,z)=<\Phi(x),\Phi(z)>と表す。

カーネル法によるデータ解析】
カーネル法を取り入れたデータ解析には、密度関数の推定、カーネル主成分分析、カーネル正準相関分析、カーネルクラスター分析、カーネル判別分析、分類器サポートベクターマシンなどがある。
カーネル主成分分析(非線形主成分分析)
アルゴリズムは次の通り。

1.カーネル関数K(x,z)を決める
2.データから写像行列K_{n\times n}を求める
3.K_{n\times n}固有値固有ベクトルを求める
4.固有値固有ベクトルを正規化する

ケーススタディ
カーネル主成分分析の関数kpcaを使用する。
引数kernelには、rbfdot(ガウシアン)、polydot(多項式),vanilladot(線形)、tanhdot(タンジェント)、laplacedot(ラプラシアン),besseldot(ベッセル)、anovadot(ANOVARBF)、splinedot(スプライン)のカーネル関数が用意されている。
引数featuresでは求める主成分の数を指定する。デフォルトは0。
引数kparにはカーネル関数に用いるパラメータを指定する。
結果として、固有値eig()、主成分ベクトルkpc()、主成分得点rotated()などが返される。

> library(kernlab)
> par(mfrow=c(2,2),mai=c(rep(0.3,4)))
> x<-as.matrix(iris[,1:4])
> iris.kpc1<-kpca(x,kernel="rbfdot",kpar=list(sigma=0.1),features=2)
> plot(rotated(iris.kpc1),col=as.integer(iris[,5]))
> iris.kpc3<-kpca(x,kernel="polydot",kpar=list(degree=1),features=2)
> plot(rotated(iris.kpc3),col=as.integer(iris[,5]))
> iris.kpc3<-kpca(x,kernel="polydot",kpar=list(degree=5),features=2)
> plot(rotated(iris.kpc3),col=as.integer(iris[,5]))
> iris.kpc3<-kpca(x,kernel="polydot",kpar=list(degree=6),features=2)
> plot(rotated(iris.kpc3),col=as.integer(iris[,5]))
> 

正直、本書の内容だけでは理解しきれない。別途学習が必要!