カーネル多変量解析の中の数値例の図を作るために, カーネル法のソフトウェアとして R 上の kernlab, matlab 上の spider, 多様体あてはめの mani を参考にしています.
ここでは数値例を出力したプログラムやそれぞれのソフトウェアの利用法 などを順次紹介していきたいと思います.
rbf <- rbfdot(sigma=1) k <- kernelMatrix(rbf, x)
テストサンプルなどに関しては &mimetex(k(x_i, x^{test}_j)); というカーネル行列を作る必要がありますが、それも
k <- kernelMatrix(rbf, x, xtest)
でOK.
kernlab が使えない場合、自分で作る必要がありますが、最近は R もだいぶ速いので 以下のような関数で比較的速く計算できます。 なお、簡単のため x は 1 次元実数値データで、固定した RBF カーネルを仮定します。
gmat <- function(x, y) { nx <- length(x) # 行列なら nx <- nrow(as.matrix(x)) などと変更 ny <- length(y) m <- matrix(0, nrow=nx, ncol=ny) for (i in 1:nx) { m[i, ] <- exp(-(x[i]-y)^2) # ここでカーネル関数を計算 } return(m) }
このほか dist 関数を使う方法も考えられるのですが少し試したところループを使った上のプログラムの方が若干速いようです。
実際には、すごく大規模な場合などスパース行列にしたり、グラム行列を全部保持しないやり方(枝刈りや低ランク因子近似など)を工夫することが多いです。