- カーネル・トリックというのがある
- 非線形サポートベクターマシンの説明の一部として出てくることが多い(こちらに書いた多型とサバイバルの解析にもカーネルを使った処理が出てくる)
- 非線形サポートベクターマシンとカーネルトリックの話はこちらとこちらとこちらにまとめてある
- この解説サイトよりさらに短くまとめると以下のような説明になるだろうか
- 空間に複数の点がある。ある規則でこの点を動かす(低次元空間に移したいことが多いだろう)
- 動かした後の複数の点のペアワイズな遠近関係を位置ベクトルの内積で表せば、線形分離の手法に持ち込んで、分離面の最適解が求められる
- 動かした後の複数の点ペアワイズな遠近関係さえ数値化できればよいので、それを動かす前の座標から簡単に計算できれば楽なので、そうすることにする
- その計算方法にはいくつかあって
- 動かす前の2つの位置ベクトルの内積を使う
- 動かす前の2つの点のユークリッド距離を使う
- ,ED=eucrid distance:ガウシアン型カーネル関数
- 結局、動かす前の測度から簡単に計算できるような測度を動かした後の測度として定義すると、計算が楽だ(それに合致した非線形変換しかできないわけだが…)、という話
- Rで、動かす前の測度から動かした後の測度をカーネル関数を使って計算し、動かす前と後とで測度がどういう対応関係になっているかを確かめてみる
k <- 3
n.pt <- 10
X <- matrix(runif(k * n.pt),ncol=k)
ip.1 <- X %*% t(X)
dist.1 <- as.matrix(dist(ip.1,diag=TRUE,upper=TRUE))
p <- 2
ip.2 <- (1+ip.1)^p
plot(c(ip.1),c(ip.2))
d<-2
ip.3 <- exp(-c(dist.1)/(2*d^2))
plot(c(dist.1),c(ip.3))
ct <- 2
theta <- 3
ip.4 <- tanh(ct * ip.1 + theta)
plot(ip.1,ip.4)