Hatena::ブログ(Diary)

arupaka-_-arupakaの日記

2018-09-10

Rでgroup lasso の実験 一般化線形モデルの正則化

x1<-sample(1:100)
x2<-sample(1:100)
y<-2*x1+0.01*x2+rnorm(100)
p<-data.frame(y,x1,x2)
lm(y~x1+x2,data=p)

f<-function(r){
  sum((y-r[1]*x1-r[2]*x2)^2)
}

optim(c(1,3),f)

##Lasso
f2<-function(r){
  sum((y-r[1]*x1-r[2]*x2)^2)+20000*sum(abs(r))
}

optim(c(1,3),f2)$par

#Ridge
library(dummies)
x<-rbinom(100,size=1,prob=0.5)
y<-100*x+rnorm(100)
xx<-dummy(x)
p<-data.frame(y,x1)
lm(y~.,p)
x1<-xx[,1]
x2<-xx[,2]
f<-function(r){
  sum((y-r[1]*x1-r[2]*x-r[3])^2)+0000*sum(abs(r))
}

optim(c(1,3,1),f)$par

f2<-function(r){
  sum((y-r[1]*x1-r[2]*x2-r[3])^2)+100*sum(abs(r))
}
optim(c(1,3,1),f2)$par

f3<-function(r){
  sum((y-r[1]*x1-r[2]*x2-r[3])^2)+100*sum((r)^2)
}
optim(c(1,3,1),f3)$par

#group lasso
f4<-function(r){
  sum((y-r[1]*x1-r[2]*x2-r[3])^2)+100*((sum((r[1:2])^2))^0.5+(r[3]^2)^0.5)
}
optim(c(1,3,1),f4)$par

一般化線形モデル

正則化

―逸脱度/データ数+λ×正則化項?

によると、

http://bayes.sigmath.es.osaka-u.ac.jp/ftanaka/T/modeling/2016chap12_2.pdf

対数尤度+正則化項でいいっぽい。


逸脱度(二乗誤差みたいなやつ)=-2×対数尤度比?

https://mumu.jpn.ph/forest/computer/2017/08/20/11019/


###GLM check

x<-rbinom(1000,size=1,prob=0.5)
mu<-exp(log(100)*x+log(3))

y<-rgamma(1000,shape=mu,scale =0.5)
xx<-dummy(x)
#p<-data.frame(y,x1)
x1<-xx[,1]
x2<-xx[,2]
#group lasso
f5<-function(r){
    ll<-exp(r[1]*x1+r[2]*x2+r[3])
    l<- -log(dgamma(y,shape=ll,scale=(r[4])))
    l[l==Inf]<-10^8
    mean(l)+0.01*((sum((r[1:2])^2))^0.5+(r[3]^2)^0.5+(r[4]^2)^0.5)
}

ans<-optim(c(1,3,1,1),f5)$par
ans
#optim(c(1,3,1),f5)$par
y_th<-rgamma(1000,shape=exp(ans[1]*x1+ans[2]*x2+ans[3]),scale=ans[4])
qqplot(y_th,y)
plot(density(y))
points(density(y_th),col=2)


###Genraization###