R 실측 선형 기함수 모델의 편도수
frame()
set.seed(0)
N<-25
M<-25
ATTEMPT=200
xrange<-c(-0.0,1.0)
yrange<-c(-1.5,1.5)
x<-seq(1/(N*2), 1, 1/N)
base<-function(m,x) {
# r<-x^m #多項式基底の場合
r<-exp(-(x-(m-1)/(M-2))^2/(2*0.05^2)) #ガウス基底の場合
r[m == 0]<-1 # w0をバイアス項とするためφ0=1
r
}
makePhi<-function(M) {
A <- matrix(nrow=length(x),ncol=M)
for (i in 1:length(x)) {
for (j in 0:(M-1)) {
A[i,1+j] <- base(j,x[i])
}
}
A
}
biassquared<-numeric(5)
variance<-numeric(5)
is<-1:7
lambdabase<-is-5
lambda<-exp(lambdabase)
par(mfrow=c(2,4))
for (i in is) {
h<-function(x){sin(2*pi*x)}
curve(h,type="l",xlim=xrange,ylim=yrange,col=2,ylab="t")
title(paste0("ln(lambda)=", lambdabase[i]), cex.main=1)
y=matrix(nrow=length(x),ncol=ATTEMPT)
for (attempt in 1:ATTEMPT) {
t<-sin(2*pi*x)+rnorm(N, 0, 0.5^2)
t<-matrix(t,nrow=length(t))
phi<-makePhi(M)
w<-solve(lambda[i] * diag(M) + t(phi) %*% phi) %*% t(phi) %*% t
estimate<-function(x){
i <- 0:(M-1)
(sapply(x,function(xn){ (sum(w * base(i, xn))) } )) # (w[1]+w[2]*base(1,x)+w[3]*base(2,x)...)
}
y[,attempt]<-estimate(x)
if (attempt <= 20) {
par(new=T)
curve(estimate,type="l",xlim=xrange,ylim=yrange,col=1,ylab="")
}
}
meany<-apply(y, 1, mean)
par(new=T)
curve(h,type="l",xlim=xrange,ylim=yrange,col=2,ylab="t")
par(new=T)
plot(x, meany, xlim=xrange,ylim=yrange,col=3,ylab="")
biassquared[i]<-mean((meany - h(x))^2)
variance[i]<-mean((y - meany)^2)
}
d<-data.frame(biassquared,variance,biassquared+variance)
rownames(d)<-lambdabase
matplot(d,type="l",axes=F,lty=1)
axis(1,1:length(lambdabase),lambdabase)
axis(2)
legend("topleft",legend=colnames(d),col=1:ncol(d),lty=1,cex=0.6)
Reference
이 문제에 관하여(R 실측 선형 기함수 모델의 편도수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/data9824/items/4ba5f4446e85ad0e426b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)