L1 düzenlenmesi, ilgili katsayılardan önceki bir Laplace (çift üstel) ile eşdeğer olduğundan, aşağıdaki gibi yapabilirsiniz. Burada x1, x2 ve x3 olmak üzere üç bağımsız değişkenim var ve y ikili hedef değişkendir. Düzenleme parametresi seçimi burada üzerine bir hiper prior koyarak bu durumda yapılır, bu durumda sadece iyi bir aralıkta tekdüze.λ
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
}
dclone
R'deki paketi kullanarak deneyelim !
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)
Ve sonuçlar, düzenli olmayan bir lojistik regresyona kıyasla:
> 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 >>
Ve üç b
parametrenin gerçekten sıfıra indirildiğini görebiliriz.
Laplace dağılımı / regülasyon parametresinin hiperparametresi için öncelikler hakkında fazla bir şey bilmiyorum, üzgünüm. Tekdüze dağılımları kullanma eğilimindeyim ve makul bir şekilde iyi görünüp görünmediğini görmek için arkaya bakıyorum, örneğin, bir uç noktaya yakın yığılmamış ve orta derecede korkunç çarpıklık problemleri olmadan zirveye çıkıyorum. Şimdiye kadar, tipik olarak durum böyleydi. Bunu bir varyans parametresi olarak ele almak ve Gelman'ın önerilerini kullanmak Hiyerarşik modellerde varyans parametreleri için önceki dağılımlar da benim için çalışıyor.