- サポートベクターマシンではカーネル関数を使って、高次元空間に投げ上げて、そこでの内積を利用する
- 観測変数を組み合わせて新たな次元軸を作って、その増やした次元での内積を計算するときに、地道に計算してもよいけれど、うまい方法があるといいな、と。
- そのうまい方法を用いるのが「カーネル・トリック」を使う、という話
- この記事は解りやすい
- 手作業で新たな変数を作り出し、それに対する「トリック」を紹介してくれて、最終的に、ガウシアンカーネルを紹介し、それが「無限の変数」を作り出してその内積を計算してくれていることを紹介している
- 残念なのは、そのガウシアンカーネルが分解されて、無限次元に飛んでいるところの説明式の符号が間違っていること…。正しい式はこちらにあるように、以下の式
- これを展開すると
- 指数関数を使わず、ある程度の項数で近似するなら、内積だけ計算しておけばよいこともわかる
- 念のため、この展開の収束をRでやっておくと:
d <- 5
x1 <- rnorm(d)
x2 <- rnorm(d)
V <- exp(-sum((x1-x2)^2)/2)
C <- exp(-sum(x1^2)/2) * exp(-sum(x2^2)/2)
n <- 0:10
v <- rep(0,length(n))
v[1] <- C
for(i in 2:length(n)){
v[i] <- v[i-1] +C * sum(x1*x2)^n[i]/factorial(n[i])
}
plot(n,v)
abline(h=V)