ガウス型基底関数(正則化項付きGIC)
library(dplyr)
data=data.frame(y=c(0.20, 0.10, 0.49, 0.26, 0.92, 0.95, 0.18, 0.19, 0.44, 0.79, 0.61, 0.41, 0.49, 0.34, 0.62, 0.99, 0.38, 0.22,0.71,0.40),x1=c(84,87,86,85,82,87,92,94,88,84.9,78,90,88,87,82,84,86,83,85.2,82),x2=c(61,55.5,57,57,50,50,66.5,65,60.5,49.5,49.5,61,59.5,58.4,53.5,54,60,58.8,54,56),x3=c(24.5,24,23,22.5,22,24,25,26,25,24,23,21,26,25.5,24,23,24,24,24,22))
data[,colnames(data) %in% c("x1","x2")]=data[,colnames(data) %in% c("x1","x2")]/10
clusters=3;X=as.matrix(data[,colnames(data) %in% c("x1","x2")]);Y=data$y
data=data%>%mutate(clusters=kmeans(data,clusters)$cluster)
params=data%>%group_by(clusters)%>%summarise(x1=mean(x1),x2=mean(x2))
hs=data%>%group_by(clusters)%>%summarise(x1=sum((x1-mean(x1))^2),x2=sum((x2-mean(x2))^2),n=n())
hs=hs%>%mutate(h=(x1+x2)/n)
n=nrow(data)
B=array(0,dim=c(nrow(X),clusters))
for(j in 1:clusters){
vec=params%>%filter(clusters==j)%>%select(-clusters)
vec=as.numeric(vec)
pthi_vec=exp(-apply((t(X)-vec)^2,2,sum)/(2*hs$h[hs$clusters==j]))
B[,j]=pthi_vec
}
B=cbind(rep(1,nrow(B)),B)
GIC=function(ws,sig,lam){
K=diag(1,ncol(B));lam_mat=diag(c(Y-B%*%ws));sig=sig^2
R=cbind(t(B)%*%B+n*lam*sig*K,t(B)%*%lam_mat%*%rep(1,nrow(B)))
R=rbind(R,cbind((t(rep(1,nrow(B)))%*%lam_mat%*%B/sig),n/(2*sig)))
Q11=t(B)%*%(lam_mat^2)%*%B/sig-lam*K%*%ws%*%t(rep(1,nrow(B)))%*%lam_mat%*%B
Q12=t(B)%*%(lam_mat^3)%*%rep(1,nrow(B))/(2*sig^2)-t(B)%*%lam_mat%*%rep(1,nrow(B))/(2*sig)
Q21=t(rep(1,nrow(B)))%*%(lam_mat^3)%*%B/(2*sig^2)-t(rep(1,nrow(B)))%*%lam_mat%*%B/(2*sig^2)
Q22=t(rep(1,nrow(B)))%*%(lam_mat^4)%*%rep(1,nrow(B))/(4*sig^3)-n/(4*sig)
Q=rbind(cbind(Q11,Q12),cbind(Q21,Q22))
value=n*(log(2*pi)+1)+n*log(sig)+2*sum(diag(solve(R)%*%Q))
return(value)
}
w=rep(1,ncol(B))
lambda=1;sigma=1
ite=10^9
h=0.01;eta=10^(-4)
for(l in 1:ite){
vec=w
for(j in 1:length(w)){
vec_sub=vec;vec_sub[j]=vec_sub[j]+h
w[j]=w[j]-eta*(GIC(vec_sub,sigma,lambda)-GIC(vec,sigma,lambda))/h
}
lambda=lambda-eta*(GIC(w,sigma,lambda+h)-GIC(w,sigma,lambda))/h
sigma=sigma-eta*(GIC(w,sigma+h,lambda)-GIC(w,sigma,lambda))/h
#print(GIC(w,sigma,lambda))
}
plot(c(1:length(Y)),Y,xlab="index",ylab="values",xlim=c(1,length(Y)),ylim=c(min(c(Y,B%*%w)),max(c(Y,B%*%w))),col=2,type="o")
par(new=T)
plot(c(1:length(Y)),B%*%w,xlab="index",ylab="values",xlim=c(1,length(Y)),ylim=c(min(c(Y,B%*%w)),max(c(Y,B%*%w))),col=3,type="o")
Author And Source
この問題について(ガウス型基底関数(正則化項付きGIC)), 我々は、より多くの情報をここで見つけました https://qiita.com/kozakai-ryouta/items/49dc8bd3697eb6dbfe5b著者帰属:元の著者の情報は、元の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 .