データ学習アルゴリズム(データサイエンス・シリーズ:渡辺澄夫先生)
#データ学習アルゴリズム p.52
#三層パーセプトロン
library(dplyr)
data("anscombe")
data=anscombe
X=as.matrix(data[,colnames(data) %in% c("x1","x2","x4")])
Y=as.matrix(data[,colnames(data) %in% c("y1","y2")])
Y[,1]=Y[,1]/max(Y[,1]);Y[,2]=Y[,2]/max(Y[,2])
N=ncol(Y);H=2;M=ncol(X);n=nrow(data)
wij=array(sample(1:9,N*H,replace=T),dim=c(N,H))/100
wjk=array(sample(1:9,H*M,replace=T),dim=c(H,M))/100
ite=10^5
eta=0.01
act_f=function(z){
return(1/(1+exp(-z)))
}
for(l in 1:ite){
os=act_f(t(wjk%*%t(X)))
fs=act_f(t(wij%*%t(os)))
delta_i=(fs-Y)*fs*(1-fs)
delta_j=as.matrix(delta_i)%*%as.matrix(wij)*os*(1-os)
dwij=t(delta_i)%*%os
dwjk=t(delta_j)%*%X
wij=wij-eta*dwij
wjk=wjk-eta*dwjk
#print(sum(abs(fs-Y)^2))
}
f_mat=fs
plot(c(1:length(c(Y))),c(f_mat),xlab="index",ylab="predict",xlim=c(1,length(c(Y))),ylim=c(min(c(c(f_mat),c(Y))),max(c(c(f_mat),c(Y)))),col=2,type="o")
par(new=T)
plot(c(1:length(c(Y))),c(Y),xlab="index",ylab="predict",xlim=c(1,length(c(Y))),ylim=c(min(c(c(f_mat),c(Y))),max(c(c(f_mat),c(Y)))),col=3,type="o")
#データ学習アルゴリズム p.67
library(dplyr)
data("anscombe")
data=anscombe
X=as.matrix(data[,colnames(data) %in% c("x1","x2","x4")])
Y=as.matrix(data[,colnames(data) %in% c("y1","y2")])
N=ncol(Y);H=3;M=ncol(X);n=nrow(data)
w=matrix(sample(unique(abs(c(Y))),N*H,replace=T),nrow=N,ncol=H)
guzai=matrix(sample(unique(c(X)),M*H,replace=T),nrow=H,ncol=M)
sig=rep(10,H)
o=function(z,sigma){
return(exp(-apply((X-z)^2,1,sum)/(2*sigma^2)))
}
o_guzai=function(z,sigma){
return((X-z)/(sigma^2))
}
o_sigma=function(z,sigma){
return(apply((X-z)^2,1,sum)/(sigma^3))
}
o_mat=function(z,sigma){
o_mat=array(0,dim=c(n,H))
for(j in 1:H){
o_mat[,j]=o(c(z[j,]),sigma[j])
}
return(o_mat)
}
o_sigma_mat=function(z,sigma){
o_mat=array(0,dim=c(n,H))
for(j in 1:H){
o_mat[,j]=o_sigma(c(z[j,]),sigma[j])
}
return(o_mat)
}
ite=10^5
eta=0.001
epsilon=5*10^(-12)
calc_stop=epsilon+1
for(l in 1:ite){
if(calc_stop>epsilon ){
f_mat=t(o_mat(guzai,sig)%*%t(w))
dw=(f_mat-t(Y))%*%o_mat(guzai,sig)
term=(o_sigma_mat(guzai,sig))*o_mat(guzai,sig)
dsigma=apply((f_mat-t(Y))%*%term*w,2,sum)
dguzai=array(0,dim=c(H,M))
for(i in 1:H){
mat=(t(f_mat-t(Y))%*%w)*o_guzai(guzai[i,],sig[i])
dguzai[i,]=c(t(mat)%*%o_mat(guzai,sig)[,i])
}
w=w-eta*dw
guzai=guzai-eta*dguzai
sig=sig-eta*dsigma
print(sum((f_mat-t(Y))^2))
if(l>1){
calc_stop=sum(((f_mat-f_pre_mat)^2)/(f_pre_mat^2))
}
f_pre_mat=f_mat
}
}
Y=t(Y)
plot(c(1:length(c(Y))),c(f_mat),xlab="index",ylab="predict",xlim=c(1,length(c(Y))),ylim=c(min(c(c(f_mat),c(Y))),max(c(c(f_mat),c(Y)))),col=2,type="o")
par(new=T)
plot(c(1:length(c(Y))),c(Y),xlab="index",ylab="predict",xlim=c(1,length(c(Y))),ylim=c(min(c(c(f_mat),c(Y))),max(c(c(f_mat),c(Y)))),col=3,type="o")
Author And Source
この問題について(データ学習アルゴリズム(データサイエンス・シリーズ:渡辺澄夫先生)), 我々は、より多くの情報をここで見つけました https://qiita.com/kozakai-ryouta/items/5353c77d847e19e39268著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .