आर - लास्सो रिग्रेशन - प्रति रजिस्ट्रार में अलग लैम्ब्डा


11

मैं निम्नलिखित करना चाहता हूं:

1) OLS प्रतिगमन (कोई दण्डनीय ठहराए जाने अवधि) बीटा गुणांक पाने के लिए bj* ; जे मतलब होता है, वैरिएबल का इस्तेमाल होता है। मैं इसके द्वारा करता हूं

lm.model = lm(y~ 0 + x)
betas    = coefficients(lm.model)

2) एक दंड अवधि के साथ लासो प्रतिगमन, चयन मानदंड बायसियन सूचना मानदंड (बीआईसी) द्वारा दिया जाएगा,

λजे=लॉग(टी)टी|जे*|

जहाँ चर / प्रतिगामी संख्या, टिप्पणियों की संख्या के लिए , और चरण 1 में प्राप्त प्रारंभिक दांव के लिए । मैं इस विशिष्ट मान के लिए प्रतिगमन परिणाम प्राप्त करना चाहता हूं , जो कि उपयोग किए गए प्रत्येक लिए अलग है। इसलिए यदि तीन चर हैं, तो तीन अलग-अलग मान ।टी बी * जे λ जे λ jजेटीजे*λजेλजे

OLS-Lasso ऑप्टिमाइज़ेशन समस्या तब दी जाती है

मैंnεआरn={Σटी=1टी(yटी-एक्सटी)2+टीΣजे=1(λटी|जे|)}

मैं आर में लार्स या ग्लमेनेट पैकेज के साथ यह कैसे कर सकता हूं? मुझे मेमना निर्दिष्ट करने का कोई तरीका नहीं मिल रहा है और यदि मैं सही परिणाम प्राप्त करता हूं तो मुझे 100% यकीन नहीं है

lars.model <- lars(x,y,type = "lasso", intercept = FALSE)
predict.lars(lars.model, type="coefficients", mode="lambda")

मैं यहां किसी भी मदद की सराहना करता हूं।


अपडेट करें:

मैंने अब निम्नलिखित कोड का उपयोग किया है:

fits.cv = cv.glmnet(x,y,type="mse",penalty.factor = pnlty)
lmin    = as.numeric(fits.cv[9]) #lambda.min
fits    = glmnet(x,y, alpha=1, intercept=FALSE, penalty.factor = pnlty)
coef    = coef(fits, s = lmin)

पंक्ति 1 में मैं अपने निर्दिष्ट दंड कारक ( λ j = log ( T )) के साथ क्रॉस सत्यापन का उपयोग करता हूं), जो प्रत्येक प्रतिगामी के लिए अलग है। पंक्ति 2 फिट.सै.व्ही के "लैम्ब्डा.मिन" का चयन करती है, जो लैम्बडा है जो न्यूनतम माध्य क्रॉस-वेलिडेशन त्रुटि देता है। लाइन 3डेटा परएक लासो फिट () करता है। फिर से मैंने पेनल्टी फैक्टरλ काइस्तेमाल किया। लाइन 4 फिट से गुणांक निकालता है जोपंक्ति 2 में चुनेगए "इष्टतम"से संबंधित है।λजे=लॉग(टी)टी|जे*|alpha=1λλ

अब मेरे पास रेजिस्टर के बीटा गुणांक हैं जो न्यूनतम समस्या के इष्टतम समाधान को दर्शाते हैं

मैंnεआरn={Σटी=1टी(yटी-एक्सटी)2+टीΣजे=1(λटी|जे|)}

पेनल्टी फैक्टर के साथ । गुणांक का इष्टतम सेट सबसे अधिक संभावना है कि रजिस्टरों का एक सबसेट जो मैंने शुरू में इस्तेमाल किया था, यह लास्सो विधि का एक परिणाम है जो प्रयुक्त रजिस्टरों की संख्या को कम कर देता है।λजे=लॉग(टी)टी|जे*|

क्या मेरी समझ और कोड सही है?


2
आप अपनी पोस्ट में LATEX मार्कअप का उपयोग कर सकते हैं, जो डॉलर के संकेतों में संलग्न है। α$\alpha$ हो जाता है । कृपया इसे बनाएं, क्योंकि यह लोगों को आपके प्रश्न को समझने में और अधिक आसानी से सक्षम बना देगा, और इसलिए इसका उत्तर देना चाहिए। α
साइकोरैक्स का कहना है कि मोनिका

जवाबों:


15

से glmnetप्रलेखन ( ?glmnet), हम देखते हैं कि यह अंतर संकोचन प्रदर्शन करने के लिए संभव है। यह ओपी के सवाल का जवाब देने के लिए हमें कम से कम भाग-दौड़ का मौका देता है।

penalty.factor: प्रत्येक गुणांक के लिए अलग-अलग दंड कारक लागू किए जा सकते हैं। यह एक ऐसी संख्या है जो lambdaअंतर संकोचन की अनुमति देने के लिए गुणा करती है। कुछ चर के लिए 0 हो सकता है, जिसका अर्थ है कि कोई संकोचन नहीं है, और यह चर हमेशा मॉडल में शामिल होता है। सभी चर के लिए डिफ़ॉल्ट 1 है (और सूचीबद्ध में चर के लिए अंतर्निहित अनन्तता exclude)। नोट: जुर्माने के कारकों को योग करने के लिए आंतरिक रूप से बढ़ाया गया है nvars, और lambdaअनुक्रम इस परिवर्तन को दर्शाएगा।

हालांकि, इस सवाल का पूरी तरह से जवाब देने के लिए, मुझे लगता है कि आपके पास दो दृष्टिकोण उपलब्ध हैं, जो इस बात पर निर्भर करता है कि आप क्या हासिल करना चाहते हैं।

  1. आपका प्रश्न यह है कि glmnetएक विशिष्ट मान लिए गुणांक में अंतर सिकुड़ना कैसे लागू किया जाए । आपूर्ति सेंट कुछ मान के किसी भी मूल्य पर नहीं 1 प्राप्त अंतर संकोचन हैं λ । संकोचन सेंट प्राप्त करने के लिए प्रत्येक के लिए संकोचन j है φ j = लोग इन टीλpenalty.factorλजे, हमें अभी कुछ बीजगणित करना है। चलोφजेके लिए दंड कारक होj, क्या करने के लिए आपूर्ति की जा होगा। प्रलेखन से, हम देख सकते हैं कि इन मूल्यों का एक पहलू से फिर से कर दिया जाता हैसीφj=φ ' जे सेंटमीटर=सीΣ मीटर j = 1 लॉगटीφजे=लॉगटीटी|जे*|φजेजेpenalty.factorसीφजे=φजे'। इसका मतलब है किφ ' जे की जगहφजेअनुकूलन नीचे अभिव्यक्ति में। तो के लिए हलसी, मानों की आपूर्तिφ ' जे करने के लिए, और उसके बाद के लिए गुणांक निकालनेλ=1। मैं उपयोग करने की सलाह दूंगा।=सीΣजे=1लॉगटीटी|जे*|φजे'φजेसीφजे'glmnetλ=1coef(model, s=1, exact=T)

  2. दूसरा उपयोग करने के लिए "मानक" रास्ता है glmnet: एक प्रदर्शन दोहराया गुना पार सत्यापन का चयन करने के λ ऐसी है कि आप बाहर के नमूने को कम एमएसई। यह वही है जो मैं नीचे और अधिक विस्तार से वर्णन करता हूं। कारण हम CV का उपयोग करते हैं और आउट-ऑफ-सैंपल MSE की जांच करते हैं , क्योंकि इन-सैंपल MSE को हमेशा λ = 0 के लिए कम से कम किया जाएगा , अर्थात b एक साधारण MLE है। Λ बदलती करते समय CV का उपयोग करना हमें यह अनुमान लगाने की अनुमति देता है कि मॉडल आउट-ऑफ-सैंपल डेटा पर कैसा प्रदर्शन करता है , और एक λ का चयन करें जो इष्टतम है (एक विशिष्ट अर्थ में)।λλ=0λλ

यह glmnetकॉल एक निर्दिष्ट नहीं करता है (न ही इसे करना चाहिए, क्योंकि यह प्रदर्शन कारणों से डिफ़ॉल्ट रूप से पूरे λ प्रक्षेपवक्र की गणना करता है)। λ मान के लिए गुणांक लौटाएगा । लेकिन आपके द्वारा प्रदान किए गए λ की पसंद से कोई फर्क नहीं पड़ता , परिणाम उस अंतर दंड को प्रतिबिंबित करेगा जो आपने मॉडल को फिट करने के लिए कॉल में लागू किया था।λλcoef(fits,s=something)λsomethingλ

इष्टतम मूल्य का चयन करने का मानक तरीका इसके बजाय उपयोग करना है । क्रॉस-मान्यता का उपयोग संकोचन की मात्रा का चयन करने के लिए किया जाता है जो आउट-ऑफ-सैंपल त्रुटि को कम करता है, जबकि आपकी वज़निंग स्कीम के अनुसार विनिर्देश कुछ विशेषताओं को दूसरों की तुलना में कम कर देगा।λcv.glmnetglmnetpenalty.factor

यह प्रक्रिया अनुकूलन करती है

मिनटआरΣटी=1टी(yटी-एक्सटी)2+λΣजे=1(φजे|जे|)

जहां के लिए दंड कारक है जे टी एच सुविधा (क्या आप में आपूर्ति तर्क)। (यह आपका अनुकूलन अभिव्यक्ति से थोड़ा अलग है, सबस्क्रिप्ट से कुछ अलग हैं कृपया ध्यान दें कि।) ध्यान दें कि λ अवधि, सभी सुविधाओं में एक जैसा है तो एक ही रास्ता है कि कुछ सुविधाओं को दूसरों की तुलना में अधिक सिकुड़ रहे हैं के माध्यम से है φ जे । महत्वपूर्ण रूप से, λ और ϕ समान नहीं हैं; λ अदिश है और φ एक वेक्टर है! इस अभिव्यक्ति में, λ निश्चित / ज्ञात माना जाता है; यही है, अनुकूलन इष्टतम बी को ले जाएगा, इष्टतम नहींφजेजेटीpenalty.factorλφजेλφλφλλ

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


+1 यह सही है। मैं यह भी जोड़ूंगा कि प्रतिगमन के नियमितीकरण को एक बायसीयन के रूप में देखा जा सकता है, अर्थात अधिकतम पोस्टीरियर (एमएपी) को अधिकतम संभावना (एमएल) को नियमित किया जाता है। उस ढांचे में काम करने से खुद को नियमित करने में अधिक लचीलापन मिलता है, इसकी आवश्यकता होनी चाहिए।
TLJ

अगर मैं दौड़ता pnlty = log(24)/(24*betas); fits = glmnet(x,y, alpha=1, intercept=FALSE, penalty.factor = pnlty) हूं तो मैं उस प्रतिगामी दांव को निकालता हूं जो कि मेरे द्वारा निर्दिष्ट लैम्ब्डा के अनुरूप है, क्योंकि लैम्बडा हर जोखिम कारक के लिए अलग है?
डोम

1
@ मुझे यह बहुत देर हो गई कि वहाँ एक स्पष्ट तरीका है जो आप का उपयोग करना चाहते हैं पाने के लिए है glmnet। मेरा संशोधित उत्तर देखिए।
साइकोरैक्स का कहना है कि मोनिका

2
प्रत्येक भविष्यवक्ता के लिए अलग से दंड को अनुकूलित करने से सावधान रहें। यह कुछ मामलों में चरणवार चर चयन से अधिक कुछ नहीं होगा। दंडित प्रतिगमन का अर्थ है कि बहुत सीमित संख्या में पेनल्टी पैरामीटर्स मान लेने और पूर्वानुमानकर्ताओं के बीच जानकारी उधार लेने से चुकता त्रुटि।
फ्रैंक हरेल

2
@FrankHarrell टिप्पणी के लिए धन्यवाद! ऐसा लगता है कि प्रत्येक भविष्यवक्ता के लिए एक बायेसियन मॉडल के लिए अलग-अलग दंड का उपयोग करना जो प्रत्येक पैरामीटर के लिए एक अलग पूर्व मानता है। आमतौर पर बायेसियन इंट्रेंस पर एक अनोखा खतरा होने के रूप में मुझे हड़ताल नहीं करता है। इसके अलावा, क्या आप इस बारे में विस्तार से बता सकते हैं कि प्रतिगामी प्रतिगामी कैसे पूर्वानुमानकर्ताओं के बीच जानकारी उधार लेता है? मुझे यकीन नहीं है कि मैं पूरी तरह से समझ सकता हूं कि इस तरह के परिदृश्य में मामला कैसा है।
साइकोरैक्स का कहना है कि मोनिका
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.