R 정규화 최소 2승법
set.seed(0)
x<-seq(0.05,1,0.1)
t<-sin(2*pi*x)+rnorm(10,0,0.5)
t<-matrix(t,nrow=length(t))
M<-10
base<-function(m,x) {
r<-x^m #多項式基底の場合
# r<-exp(-(x-(m-1)/(M-2))^2/(2*0.2^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
}
xrange<-c(-0.5,1.5)
yrange<-c(-2,2)
plot(x,t,xlim=xrange,ylim=yrange)
phi<-makePhi(M)
lambdabase<-10:0
for (ll in lambdabase) {
lambda<-10^(-ll*2)
w<-solve(lambda * diag(M) + t(phi) %*% phi) %*% t(phi) %*% t
print(w)
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)...)
}
par(new=T)
curve(estimate,type="l",xlim=xrange,ylim=yrange,col=ll+1)
}
legend("topleft",legend=10^(-lambdabase*2),col=lambdabase+1,lty=1,cex=0.6)
Reference
이 문제에 관하여(R 정규화 최소 2승법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/data9824/items/d5de54deac73568112d0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)