R によるテキストの図1.3と図1.4の確認
以下のページを参考にした。
http://d.hatena.ne.jp/sesejun/20090402/p1
上記のページの 2〜18 の17個の点でやってみる。
x1 <-
c(-1.69,-1.5,-1.3,-1.1,-0.9,-0.7,-0.48,-0.42,-0.05,0.09,0.39,0.48,0.59,1.0,1.08,1.29,1.5)
y <-
c(-0.15,-0.25,-0.2,-0.14,-0.21,0,0.34,0.35,0.8,0.75,0.4,0.2,0.15,-0.05,-0.1,-0.35,-0.39)
plot(x1,y)

> m0 <- lm(y ~ -1 + x1)
> abline(m0,col="red")

> rbf <- rbfdot(sigma=1)
> k <- kernelMatrix(rbf, x1)
> alpha <- solve(k) %*% y
> gauss <- function(x1,x2) exp(-1.0 * (x1-x2)^2)
> f1 <- function(x) sapply(x, function(y) gauss(x1, y) %*% alpha)
> curve(f1, col="blue", add=TRUE)
難しいのは f1 の作成。普通なら、
f1 <- function(y) gauss(x1,y) %*% alpha
でよいはず、計算結果だけ得るのなら、これでOK
だけど、この形では、curve で曲線を描けない。
いろいろ悩んで上記のサイトをカンニング。
sapply や lapply を被せればよい、、、知らなかった。

正則化の部分
> lambda <- 0.01
> k2 <- k + lambda * diag(17)
> alpha <- solve(k2) %*% y
> plot(x1,y)
> curve(f1,col="red",add=T)

SVM でやってみると・・
> svm0 <- ksvm(x1,y,epsilon=0.01)
Using automatic sigma estimation (sigest) for RBF or laplace kernel
> svm0pre <- predict(svm0,x1)
> plot(x1,y)
> lines(x1,svm0pre,col="red")
