## 2014年 6月20日(金) #Sigmoid関数を定義 f <- function(x){1/(1+exp(-x))} #関数値の評価は f(+10.0) #でできる。ほぼ1.0(0.9999546)になる。 #-10から+10まのの範囲で、0.1刻みで増える配列をseq関数で作る xseq <- seq(from=-10, to=10, by=0.1); #plotは、(x,y)の値の組をプロットする。 #f(xseq)で、xseqの値を関数fに順次適応した値が戻る。 plot(xseq,f(xseq),col="green") #垂直と水平な線を引く abline(v=0,col="blue") abline(h=0.5,col="blue") ##オマケ。y=a*x+bの直線を引く abline(a=1,b=0.5,col="red") ##h:身長とJ:ジャンプ力を考慮した「バスケットボール選手」認識関数 g <- function(h,j) { 1.2*h+0.8*j-2.9 } ##身長が170cm、ジャンプ力が60cmの人は、、 g(1.7,0.6) ##[1] -0.38で、残念。 hseq <- seq(1.5, 2.3, 0.1) #身長の配列。150cm〜230cm。 hseq ##[1] 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 ##ジャンプ60cmだったら、200cm以上の身長が必要 plot(hseq, g(hseq,0.6),type="b") abline(h=0,col="red"); abline(v=2,col="blue") title("When jump is 0.6[m]") ##ジャンプ85cmだったら、185cmの身長でもOK plot(hseq, g(hseq,0.85),type="b") abline(h=0,col="red"); abline(v=1.85,col="blue") title("When jump is 0.85[m]") ##ジャンプ力をセコセコ変えるのが面倒。 par(mfrow=c(1,1)) jseq <- seq(0.3, 1.0, 0.01) #ジャンプ力の配列。30cm〜100cm z <- outer(hseq, jseq, g) ##contour(hseq, jseq, z) image(hseq, jseq, z, col = terrain.colors(200), xlab="height", ylab="jump") contour(hseq, jseq, z, add = TRUE, col = "black") ##contour(hseq, jseq, z persp(hseq, jseq, z, theta = 30, phi = 30) #3Dのグラフを書く #W1=0.2, W2=0.8, θ=0.2の時、X1が0.5、X2が-0.7の出力は、、、 #fにSigmoid関数。 f <- function(x){1/(1+exp(-x))} #関数gは、(x1,x2)の入力に対して、出力を計算する。 g <- function(x1,x2) { f(0.2*x1+0.8*x2+0.2) } g(0.5, 0.7) ##0.7026607となる。 ##でと、もっと別の組ではどうなるのだろうか??? par(mfrow=c(1,2)) x1 <- seq(-5, 5, by=0.1) #x1に「数字の並び」を保存。割り当て。付値。 x2 <- x1 #x2にx1(「数字の並び」)をコピー。 z <- outer(x1, x2, g) #x1とx2の組に対して、関数gを適用。zはニューロンの出力 persp(x1, x2, z, theta = 30, phi = 30) #3Dのグラフを書く ##contour(x1, x2, z) #等高線図 image(x1, x2, z, col = terrain.colors(10)) contour(x1, x2, z, add = TRUE, col = "black") ##4本の直線に囲い込まれた領域 x <- seq(-30, 30) ##例によって、-30〜+30の配列を作る y <- x f <- function(x){ 1/(1+exp(-x))}##Sigmoid関数 g1 <- function(x1,x2) { f(0.8*x1-0.5*x2+10) } g2 <- function(x1,x2) { f(x2+10) } g3 <- function(x1,x2) { f(-x1+10) } g4 <- function(x1,x2) { f(-x2+10) } g <- function(x1,x2) { f(5*(g1(x1,x2)+g2(x1,x2) +g3(x1,x2)+g4(x1,x2)-3.5))} z <- outer(x, y, g) par(mfrow=c(1,2)) persp(x, y, z, theta = 30, phi = 30) contour(x, y, z) abline(a=20,b=1.6,col=5) ## y=a+b*x abline(v=+10,col=4) abline(h=-10,col=2) abline(h=+10,col=3) #W1=0.2, W2=0.8, θ=0.2の時の出力の様子をグラフ化してみよう。 x <- seq(-5, 5, by=0.2) y <- x f <- function(x){ 1/(1+exp(-x))} g <- function(x1,x2) { f(0.2*x1+0.8*x2+0.2) } z <- outer(x, y, g) persp(x, y, z, theta = 30, phi = 30) contour(x, y, z)