चूंकि L1 नियमितीकरण संबंधित गुणांक से पहले एक लाप्लास (डबल घातीय) के बराबर है, आप इसे निम्नानुसार कर सकते हैं। यहां मेरे पास तीन स्वतंत्र चर एक्स 1, एक्स 2, और एक्स 3 हैं, और वाई द्विआधारी लक्ष्य चर है। नियमितीकरण पैरामीटर का चयन यहाँ पर एक हाइपरपीयर लगाकर किया जाता है, इस मामले में एक अच्छे आकार की सीमा पर समान है।λ
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
आर में पैकेज का उपयोग करके इसे आज़माएं !
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)
और यहां परिणाम एक अनियमित लॉजिस्टिक प्रतिगमन की तुलना में हैं:
> 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 >>
और हम देख सकते हैं कि तीन b
पैरामीटर वास्तव में शून्य की ओर सिकुड़ गए हैं।
मुझे लैप्लस वितरण / नियमितीकरण पैरामीटर के हाइपरपरमीटर के बारे में ज्यादा जानकारी नहीं है, मुझे यह कहते हुए खेद है। मैं समान वितरण का उपयोग करता हूं और पीछे देखने के लिए देखता हूं कि क्या यह उचित रूप से अच्छी तरह से व्यवहार किया गया है, उदाहरण के लिए, एक समापन बिंदु के पास ढेर नहीं है और बीच की w / o भयानक तिरछी समस्याओं में बहुत ज्यादा चरम पर है। अब तक, यह आमतौर पर मामला रहा है। इसे विचरण पैरामीटर के रूप में मानना और जेलमैन द्वारा सिफारिश (रों) का उपयोग करना , पदानुक्रमित मॉडल में विचरण मापदंडों के लिए वितरण मेरे लिए भी काम करता है।