遠近関係を簡単に伸び縮みさせる

  • カーネル・トリックというのがある
  • 非線形サポートベクターマシンの説明の一部として出てくることが多い(こちらに書いた多型とサバイバルの解析にもカーネルを使った処理が出てくる)
  • 非線形サポートベクターマシンカーネルトリックの話はこちらこちらこちらにまとめてある
  • この解説サイトよりさらに短くまとめると以下のような説明になるだろうか
    • 空間に複数の点がある。ある規則でこの点を動かす(低次元空間に移したいことが多いだろう)
    • 動かした後の複数の点のペアワイズな遠近関係を位置ベクトルの内積で表せば、線形分離の手法に持ち込んで、分離面の最適解が求められる
    • 動かした後の複数の点ペアワイズな遠近関係さえ数値化できればよいので、それを動かす前の座標から簡単に計算できれば楽なので、そうすることにする
    • その計算方法にはいくつかあって
    • 結局、動かす前の測度から簡単に計算できるような測度を動かした後の測度として定義すると、計算が楽だ(それに合致した非線形変換しかできないわけだが…)、という話
  • Rで、動かす前の測度から動かした後の測度をカーネル関数を使って計算し、動かす前と後とで測度がどういう対応関係になっているかを確かめてみる
# dimension
k <- 3

# number of points
n.pt <- 10
# coordinates
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))
# シグモイド型カーネル関数による処理
# パラメタが2個必要なので与える
ct <- 2
theta <- 3
# シグモイド型カーネル関数による処理後の測度
ip.4 <- tanh(ct * ip.1 + theta)
# 比べる
plot(ip.1,ip.4)