जवाबों:
जब , यहां पाया गया तो मामूली संशोधनों के साथ, बंद फॉर्म लैस्सो समाधान के कार्डिनल व्युत्पन्न के माध्यम से जाने जा रहा हूं ।
मुझे लगता है कि यह सोचते हो जाएगा सभी के लिए । यह उचित है क्योंकि अगर हमारे पास एक तो यह हमें बताता है कि का th कॉलम सभी 0 है, और मुझे लगता है कि इस तरह के मामले को बाहर करना उचित है। मैं दूँगा । ध्यान दें कि इसका मतलब यह भी है कि पूर्ण रैंक है और OLS solution विशिष्ट रूप से परिभाषित है।
मैं आपके नोटेशन को बेहतर मिलान के लिए संशोधित करने जा रहा हूं कि मैं जिस उत्तर का संदर्भ दे रहा हूं। उस अंत तक, मैं
यह आपकी समस्या के समान है, लेकिन यदि आप चाहें तो मैं यहां और विवरण जोड़ सकता हूं।
@ कार्डिनल की व्युत्पत्ति के बाद, हमारे पास यह है कि हमें को हल करना होगा
यह देखते हुए कि OLS समाधान , हमारे पास वह
हम प्रत्येक अलग से अनुकूलन कर रहे हैं , इसलिए हम इस राशि के प्रत्येक शब्द को अलग-अलग हल कर सकते हैं। इसका मतलब है कि हमें को छोटा करने की आवश्यकता है जहां
लिंक किए गए उत्तर के लिए एक पूरी तरह से विनम्र तर्क के बाद, हम पाते हैं कि
इसके अलावा, इसलिए हमारे पास वह
इसलिए यह पता चला है कि एक भविष्यवक्ता बिल्कुल हो जाता है जब यह होगा कि डिजाइन मैट्रिक्स असामान्य था, न कि केवल ऑर्थोगोनल। तो हम देख सकते हैं कि इस मामले में , चर चयन से भिन्न नहीं है , लेकिन वास्तविक गुणांक की भविष्यवाणी अनुसार की जाती है।
अंतिम नोट के रूप में, मैं इस समाधान को एक में बदल दूंगा, जो आपका जैसा दिखता है, जिसका अर्थ है कि हमें को पाने के लिए कुछ करके को गुणा करना होगा । यदि तो हमारे पास
चूँकि ।
यह देखते हुए कि ठीक उसी समय जब
हम देखते हैं कि हम वैकल्पिक रूप से रूप में व्यक्त कर सकते हैं
तो यह आपके पास बहुत करीब है, लेकिन बिल्कुल समान नहीं था।
मैं हमेशा अच्छी तरह से ज्ञात पुस्तकालयों के खिलाफ इस तरह से व्युत्पन्न की जांच करना पसंद करता हूं, इसलिए यहां आर में एक उदाहरण है:
## generating `x`
set.seed(1)
n = 1000
p = 5
sigma2s = 1:p
x = svd(matrix(rnorm(n * p), n, p))$u %*% diag(sqrt(sigma2s))
## check this
# t(x) %*% x
## generating `y`
betas = 1:p
y = x %*% betas + rnorm(nrow(x), 0, .5)
lambda = 2
## using a well-known library to fit lasso
library(penalized)
penalized(y, x, lambda1 = lambda)@penalized
## using closed form solution
betahat = lm(y ~ x - 1)$coef
ifelse(betahat > 0, 1, -1) * sapply(abs(betahat) - lambda / sigma2s, function(v) max(c(0, v)))