パターン認識と機械学習
なんか後輩がPythonで実際にコードを書いてるらしいので、自分も最小二乗法のコードを書いてみることにした。
最初はRubyで書く予定だったけど、せっかくだからRを使ってみようとか思い、ググりながらRで書いてみた。
# サインカーブを描く x <- seq(0, 1, 0.01) plot(x, sin(2*pi*x), type="l", xlim=c(0, 1), ylim=c(-1.2, 1.2), ann=F, col=2) # サンプルをとる N <- 10 # 点の数 x <- (1:N)/N y <- sin(2*pi*x) + 0.2*rnorm(N) # サンプルを描画する par(new=T) plot(x, y, xlim=c(0, 1), ylim=c(-1.2, 1.2), ann=F, col=4) M <- 3 # フィットする多項式の次元 # 最小二乗法で多項式の係数を求める A <- matrix(nrow=M+1, ncol=M+1) for (i in 0:M) { for (j in 0:M) { A[i+1,j+1] <- sum(x^(i+j)) } } Y <- matrix(nrow=M+1, ncol=1) for (i in 0:M) { Y[i+1] <- sum(x^i * y) } w = solve(A, Y) # できた多項式を描画する x <- seq(0, 1, 0.005) y <- c() for (i in 1:length(x)) { y[i] <- sum(w * x[i]^(0:M)) } par(new=T) plot(x, y, type="l", xlim=c(0, 1), ylim=c(-1.2, 1.2), ann=F, col=3)
Rは初めてなので、これでいいのかすごく不安だけど、とりあえず以下の出力が得られたので満足。