Karena regularisasi L1 setara dengan Laplace (eksponensial ganda) sebelum koefisien yang relevan, Anda dapat melakukannya sebagai berikut. Di sini saya memiliki tiga variabel independen x1, x2, dan x3, dan y adalah variabel target biner. Pemilihan parameter regularisasi λ dilakukan di sini dengan meletakkan hyperprior di atasnya, dalam hal ini hanya seragam pada rentang ukuran yang baik.
model {
# Likelihood
for (i in 1:N) {
y[i] ~ dbern(p[i])
logit(p[i]) <- b0 + b[1]*x1[i] + b[2]*x2[i] + b[3]*x3[i]
}
# Prior on constant term
b0 ~ dnorm(0,0.1)
# L1 regularization == a Laplace (double exponential) prior
for (j in 1:3) {
b[j] ~ ddexp(0, lambda)
}
lambda ~ dunif(0.001,10)
# Alternatively, specify lambda via lambda <- 1 or some such
}
Mari kita coba menggunakan dclone
paket di R!
library(dclone)
x1 <- rnorm(100)
x2 <- rnorm(100)
x3 <- rnorm(100)
prob <- exp(x1+x2+x3) / (1+exp(x1+x2+x3))
y <- rbinom(100, 1, prob)
data.list <- list(
y = y,
x1 = x1, x2 = x2, x3 = x3,
N = length(y)
)
params = c("b0", "b", "lambda")
temp <- jags.fit(data.list,
params=params,
model="modela.jags",
n.chains=3,
n.adapt=1000,
n.update=1000,
thin=10,
n.iter=10000)
Dan inilah hasilnya, dibandingkan dengan regresi logistik yang tidak diregulasi:
> summary(temp)
<< blah, blah, blah >>
1. Empirical mean and standard deviation for each variable,
plus standard error of the mean:
Mean SD Naive SE Time-series SE
b[1] 1.21064 0.3279 0.005987 0.005641
b[2] 0.64730 0.3192 0.005827 0.006014
b[3] 1.25340 0.3217 0.005873 0.006357
b0 0.03313 0.2497 0.004558 0.005580
lambda 1.34334 0.7851 0.014333 0.014999
2. Quantiles for each variable: << deleted to save space >>
> summary(glm(y~x1+x2+x3, family="binomial"))
<< blah, blah, blah >>
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.02784 0.25832 0.108 0.9142
x1 1.34955 0.32845 4.109 3.98e-05 ***
x2 0.78031 0.32191 2.424 0.0154 *
x3 1.39065 0.32863 4.232 2.32e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
<< more stuff deleted to save space >>
Dan kita dapat melihat bahwa ketiga b
parameter memang telah menyusut ke nol.
Saya tidak tahu banyak tentang prior untuk hyperparameter dari distribusi Laplace / parameter regularisasi, saya minta maaf untuk mengatakan. Saya cenderung menggunakan distribusi seragam dan melihat posterior untuk melihat apakah itu terlihat cukup baik, misalnya, tidak menumpuk di dekat titik akhir dan cukup memuncak di tengah tanpa masalah kemiringan yang mengerikan. Sejauh ini, itulah yang biasanya terjadi. Memperlakukannya sebagai parameter varians dan menggunakan rekomendasi (s) oleh distribusi Gelman Prior untuk parameter varians dalam model hierarkis juga berfungsi untuk saya.