लसो बनाम अनुकूली लसो


12

LASSO और अनुकूली LASSO दो अलग चीजें हैं, है ना? (मुझे करने के लिए, दंड अलग दिखता है, लेकिन मैं अभी जाँच कर रहा हूँ कि क्या मुझे कुछ याद है।)

जब आप आम तौर पर लोचदार नेट के बारे में बात करते हैं, तो विशेष मामला LASSO या अनुकूली LASSO है?

Glmnet पैकेज कौन सा करता है, बशर्ते आप अल्फा = 1 चुनें?

अनुकूली LASSO सैन्य स्थितियों पर काम करता है, है ना? दोनों के पास उपयुक्त डेटा में ओरेकल संपत्ति है, है ना?

जवाबों:


15

आपके सवालों के संक्षिप्त जवाब:

  • लासो और एडेप्टिव लासो अलग हैं। ( Zou (2006) को देखें कि एडेप्टिव लैस्सो मानक लैस्सो से कैसे भिन्न है।)
  • Lasso इलास्टिक नेट का एक विशेष मामला है। (देखें ज़ू और हस्ती (2005) ।)
    अनुकूली लसो लोचदार जाल का एक विशेष मामला नहीं है।
    इलास्टिक नेट लैस्सो या एडेप्टिव लैस्सो का विशेष मामला नहीं है।
  • समारोह glmnet"glmnet" आर प्रदर्शन में पैकेज में कमंद के लिए (अनुकूली नहीं लैसो) alpha=1
  • क्या लैसो एडेप्टिव लैस्सो की तुलना में माइल्ड परिस्थितियों में काम करता है? मैं इसका उत्तर नहीं दे सकता ( इनसाइट्स के लिए Zou (2006) की जांच करनी चाहिए )।
  • केवल एडाप्टिव लैस्सो (लेकिन लैस्सो या इलास्टिक नेट नहीं) में ओरेकल प्रॉपर्टी है। ( ज़ू (2006) देखें )

संदर्भ:


12

LASSO समाधान ऐसे समाधान होते हैं जो कम से कम होते हैं

क्यू(β|एक्स,y)=12n||y-एक्सβ||2+λΣजे|βजे|

अनुकूली लैस्सो बस इसके लिए वजन जोड़ता है ताकि लैस्सो अनुमानों के ज्ञात मुद्दे को पक्षपाती बनाने की कोशिश की जा सके।

क्यू(β|एक्स,y,w)=12n||y-एक्सβ||2+λΣजेwजे|βजे|

wजे=1/β~जेβ~जेβλ

wजे(λ)=w(β~जे(λ))
glmnetpenalty.factorglmnet

आप दंड शर्तों में पूर्ण मान लेना भूल गए।
रिचर्ड हार्डी

|β|γγβ

तो मूल रूप से, glmnet डिफ़ॉल्ट रूप से LASSO या लोचदार नेट का प्रदर्शन करता है, लेकिन आप उपयुक्त भार निर्दिष्ट करके इसे अनुकूली LASSO (या EN) में बदल सकते हैं? यदि यह मामला है, एक लाख धन्यवाद!
मिस्टर वैलिडेशन

@ सत्यापन, ध्यान दें कि अनुकूली लासो जैसे नए तरीकों के लेखकों के पास अपनी वेबसाइटों पर विधि के लिए कोड हो सकता है (कभी-कभी वे केवल एक आर पैकेज का संदर्भ देते हैं जो उन्होंने खुद लिखा है)।
रिचर्ड हार्डी

1
मुझे लगता है कि glmnet में वज़न का तर्क टिप्पणियों के लिए वज़न को संदर्भित करता है, और दंड के लिए वज़न नहीं है
jmb

3

अनुकूली LASSO का उपयोग लगातार परिवर्तनशील चयन के लिए किया जाता है। वेरिएबल सेलेक्शन के लिए LASSO का इस्तेमाल करते समय जो समस्याएं आती हैं, वे हैं:

  • भविष्यवाणी की तुलना में चयन के लिए संकोचन पैरामीटर बड़ा होना चाहिए
  • बड़े नॉनजरो पैरामीटर बहुत छोटे होंगे ताकि पूर्वाग्रह बहुत बड़ा हो
  • छोटे नॉनज़रो मापदंडों का लगातार पता नहीं लगाया जा सकता है
  • भविष्यवक्ताओं के बीच उच्च सहसंबंध खराब चयन प्रदर्शन की ओर जाता है

इस प्रकार LASSO केवल सिकुड़न पैरामीटर, मापदंडों (बीटा-मिन स्थिति) और सहसंबंध (अपरिवर्तनीय स्थिति) पर कुछ शर्तों के तहत चर चयन के लिए सुसंगत है। विस्तृत विवरण के लिए मेरे स्वामी निबंध के पृष्ठ १०१-१०६ देखें ।

LASSO अक्सर भविष्यवाणी के लिए ट्यूनिंग पैरामीटर का चयन करते समय बहुत अधिक चर शामिल करता है, लेकिन सही मॉडल बहुत संभव है कि इन चर का एक सबसेट है। यह अनुकूली LASSO जैसे अनुमान के एक द्वितीयक चरण का उपयोग करने का सुझाव देता है जो भविष्यवाणी-इष्टतम ट्यूनिंग पैरामीटर का उपयोग करके LASSO अनुमान के पूर्वाग्रह को नियंत्रित करता है। यह ऊपर वर्णित शर्तों के बिना लगातार चयन (या ओरेकल संपत्ति) की ओर जाता है।

आप अनुकूली LASSO के लिए glmnet का उपयोग कर सकते हैं। पहले आपको वजन की गणना करने के लिए प्रारंभिक अनुमान, कम से कम वर्ग, रिज या यहां तक ​​कि LASSO अनुमान की आवश्यकता होती है। फिर आप एक्स मैट्रिक्स को स्केल करके अनुकूली LASSO को लागू कर सकते हैं। प्रशिक्षण डेटा पर प्रारंभिक अनुमानों का उपयोग करके यहां एक उदाहरण दिया गया है:

# get data
y <- train[, 11]
x <- train[, -11]
x <- as.matrix(x)
n <- nrow(x)

# standardize data
ymean <- mean(y)
y <- y-mean(y)  
xmean <- colMeans(x)
xnorm <- sqrt(n-1)*apply(x,2,sd)
x <- scale(x, center = xmean, scale = xnorm)

# fit ols 
lm.fit <- lm(y ~ x)
beta.init <- coef(lm.fit)[-1] # exclude 0 intercept

# calculate weights
w  <- abs(beta.init)  
x2 <- scale(x, center=FALSE, scale=1/w)  

# fit adaptive lasso
require(glmnet)
lasso.fit <- cv.glmnet(x2, y, family = "gaussian", alpha = 1, standardize = FALSE, nfolds = 10)
beta <- predict(lasso.fit, x2, type="coefficients", s="lambda.min")[-1]

# calculate estimates
beta <- beta * w / xnorm # back to original scale
beta <- matrix(beta, nrow=1)
xmean <- matrix(xmean, nrow=10)
b0 <- apply(beta, 1, function(a) ymean - a %*% xmean) # intercept
coef <- cbind(b0, beta)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.