Cv.glmnet (R में LASSO प्रतिगमन) के साथ क्रॉस-सत्यापन कैसे करें?


10

मैं सोच रहा हूँ कि R में glmnet का उपयोग करके एक LASSO मॉडल का ठीक से प्रशिक्षण और परीक्षण कैसे किया जाए?

  • विशेष रूप से, मैं सोच रहा हूं कि अगर मेरे LASSO मॉडल का परीक्षण करने के लिए बाहरी सत्यापन डेटा (या अन्य समान दृष्टिकोण) का उपयोग करने की आवश्यकता होती है, तो बाहरी डेटा की कमी की वजह से मैं ऐसा कैसे कर सकता हूं।

मुझे मेरे परिदृश्य को तोड़ने दें:

मेरे पास अपने glmnet मॉडल को सूचित करने और प्रशिक्षित करने के लिए केवल एक डेटा-सेट है। नतीजतन, मुझे अपने मॉडल के परीक्षण के लिए एक तरीका भी उत्पन्न करने के लिए अपने डेटा को विभाजित करने के लिए क्रॉस-मान्यता का उपयोग करना होगा।

मैं पहले से ही उपयोग कर रहा हूं cv.glmnet, जो पैकेज विवरण के अनुसार है :

क्या glmnet के लिए k- गुना क्रॉस-वैलिडेशन करता है, एक प्लॉट का उत्पादन करता है, और लैम्ब्डा के लिए एक मान लौटाता है।

  • क्या क्रॉस-वेलिडेशन cv.glmnetकेवल सर्वश्रेष्ठ लंबो को चुनने के लिए किया जाता है , या यह एक अधिक सामान्य क्रॉस-सत्यापन प्रक्रिया के रूप में भी सेवा कर रहा है?

    • दूसरे शब्दों में, क्या मुझे अभी भी अपने मॉडल को "परीक्षण" करने के लिए एक और क्रॉस-मान्यता कदम करने की आवश्यकता है?

मैं इस धारणा के साथ काम कर रहा हूं कि, "हां मैं करता हूं।"

यह मामला होने के नाते, मैं अपने cv.glmnetमॉडल को मान्य करने के लिए कैसे पार करूं ?

  • क्या मुझे ऐसा मैन्युअल रूप से करना है, या शायद यह caretफ़ंक्शन glmnet मॉडल के लिए उपयोगी है?

  • मैं दो संकेंद्रित पार सत्यापन के "छोरों" का उपयोग करें? ... मैं के माध्यम से सीवी का एक "आंतरिक लूप" का उपयोग करते हैं cv.glmnetसबसे अच्छा लैम्ब्डा मूल्य निर्धारित करने के लिए अंदर से प्रत्येक कश्मीर के एक "बाहरी पाश 'की परतों कश्मीर गुना पार सत्यापन प्रसंस्करण ?

    • यदि मैं अपने पहले से ही क्रॉस-वैलिडिंग cv.glmnetमॉडल का क्रॉस-सत्यापन करता हूं, तो मैं क्रॉस वैलिडेशन cv.glmnetके प्रत्येक अन्यथा "बाहरी लूप" के भीतर प्रत्येक मॉडल से "सर्वश्रेष्ठ" मॉडल ("सर्वश्रेष्ठ" लैम्ब्डा मूल्य से) को कैसे अलग करूं?

      • नोट: मैं परिभाषित करने कर रहा हूँ "सर्वश्रेष्ठ" एक लैम्ब्डा कि कम से कम 1 एसई के भीतर एक एमएसई का उत्पादन के साथ जुड़े मॉडल के रूप में मॉडल ... यह है $lambda.1seमें cv.glmnetमॉडल।

प्रसंग:

मैं पेड़ के व्यास ("डी"), डी ^ 2, और प्रजातियों ("कारक (विनिर्देश)") के आधार पर पेड़ की उम्र ("उम्र") की भविष्यवाणी करने की कोशिश कर रहा हूं। [परिणाम समीकरण: Age ~ D + factor(SPEC) + D^2]। मेरे पास डेटा की ~ 50K पंक्तियां हैं, लेकिन डेटा अनुदैर्ध्य है (समय के माध्यम से व्यक्तियों को ट्रैक करता है) और इसमें ~ 65 प्रजातियां शामिल हैं।


1
उन लोगों के लिए जिन्होंने बिना टिप्पणी किए बंद कर दिया: यह मददगार नहीं है ... मुझे बताएं कि आपका मुद्दा टिप्पणियों में क्या है और मैं इसे ठीक करने की कोशिश करूंगा।
Theforestecologist 23

1
वे बंद करने के लिए मतदान नहीं कर रहे हैं वे इसे CrossValidated में स्थानांतरित करने के लिए मतदान कर रहे हैं। मैंने अपना वोट उसी में जोड़ दिया।
हैक-आर

@ वेध विशेषज्ञ: आपको 'क्लोज' बटन पर क्लिक करके क्लोजर / माइग्रेशन के लिए उद्धृत कारणों को देखने में सक्षम होना चाहिए।
डीडिन

पूछने के लिए धन्यवाद, मेरे पास बिल्कुल यह सवाल था। और मैं कैरेट का उपयोग नहीं कर सकता क्योंकि मेरे पास मल्टीवेरेट वाई है। लेकिन क्या आपने स्रोत कोड का निरीक्षण किया है और पुष्टि की है कि अतिरिक्त सीवी की आवश्यकता नहीं है? स्रोत कोड का पालन करना काफी मुश्किल हो सकता है।
किओलेथ

जवाबों:


3

क्या क्रॉस-वेलिडेशन cv.glmnet में केवल सबसे अच्छा लंबो को चुनने के लिए किया जाता है, या यह एक अधिक सामान्य क्रॉस-वैलिडेशन प्रक्रिया के रूप में भी काम कर रहा है?

यह क्रॉस-वेलिडेशन में आवश्यक लगभग सब कुछ करता है। उदाहरण के लिए, यह lambdaडेटा पर संभावित मूल्यों को फिट करता है , सबसे अच्छा मॉडल चुनता है और अंत में उपयुक्त मापदंडों के साथ मॉडल को प्रशिक्षित करता है।

उदाहरण के लिए, लौटी हुई वस्तु में ::

cvmमतलब क्रॉस-वेलिडेड एरर है। cvsdअनुमानित मानक विचलन है।

अन्य लौटे मूल्यों की तरह, इनकी गणना परीक्षण सेट पर की जाती है। अंततः

glmnet.fit सर्वश्रेष्ठ मापदंडों के साथ सभी डेटा (प्रशिक्षण + परीक्षण) पर प्रशिक्षित मॉडल देता है।

क्या मुझे ऐसा मैन्युअल रूप से करना है, या शायद glmnet मॉडल के लिए उपयोगी कार्य है?

आपको इसे मैन्युअल रूप से करने की आवश्यकता नहीं है। 'कैरट' बहुत उपयोगी होगा, और मेरे पसंदीदा पैकेज में से एक है क्योंकि यह एक ही सिंटैक्स के साथ अन्य सभी मॉडलों के लिए काम करता है। मैं खुद अक्सर के caretबजाय का उपयोग करें cv.glmnet। हालाँकि, आपके परिदृश्य में यह अनिवार्य रूप से समान है।

क्या मैं क्रॉस वैलिडेशन के दो संकेंद्रित "छोरों" का उपयोग करता हूं? ... क्या मैं k- गुना के "बाहरी लूप" के प्रत्येक तह के भीतर सबसे अच्छा लंबो वैल्यू निर्धारित करने के लिए cv.glmnet के माध्यम से CV के "इनर लूप" का उपयोग करता हूं। क्रॉस वेलिडेशन प्रोसेसिंग?

आप ऐसा कर सकते हैं और यह अवधारणा मॉडल चयन के लिए नेस्टेड क्रॉस-वैलिडेशन नेस्टेड क्रॉस सत्यापन के विचार के समान है ।

यदि मैं अपने पहले से ही क्रॉस-वैलिडेटिंग cv.glmnet मॉडल का क्रॉस-वैरिफिकेशन करता हूं, तो मैं अपने अन्यथा "बाहरी लूप" के प्रत्येक तह के भीतर प्रत्येक cv.glmnet मॉडल से "सर्वश्रेष्ठ" मॉडल ("सर्वश्रेष्ठ" लैम्ब्डा मान से) को कैसे अलग करूंगा। "क्रॉस सत्यापन?

बस एक लूप चलाएं जहां आप प्रशिक्षण डेटा उत्पन्न करते हैं और cv.glmnetप्रशिक्षण डेटा पर परीक्षण डेटा चलाते हैं और परीक्षण डेटा पर glmnet.fitभविष्यवाणी करने के लिए मॉडल का उपयोग करते हैं ।


@ डिस्क्युपुलस: धन्यवाद। क्या आप उसके लिए कुछ प्रकार के सबूत दे सकते हैं? (यानी, कृपया मुझे इसके माध्यम से चलना)। इसके अलावा, आपके उत्तर को देखते हुए, इसका मतलब यह है कि डेटा के लिए प्रदर्शन मीट्रिक की रिपोर्ट करने के लिए कोई और क्रॉस सत्यापन प्रक्रिया आवश्यक नहीं है? (मैं बस अपने अंतिम मॉडल प्रदर्शन के रूप में lambda.1se मामले के एमएसई की रिपोर्ट कर सकता था?)
theforestecologist

हां, आगे कोई क्रॉस-वैरिफिकेशन जरूरी नहीं है। सबूत के लिए, आप cv.glmnetफ़ंक्शन के स्रोत कोड Rको ओपनसोर्स के रूप में देख सकते हैं । बस cv.glmnetकंसोल में टाइप करें ।
शिष्य अंक '

3
@discipulus। मैंने ट्रेवर हस्ती से ईमेल किया कि "क्या cv.glmnet (R कार्यान्वयन) सीवी केवल लंबोदा का चयन करने के लिए करता है? या क्या यह चुने हुए लैम्ब्डा को सत्यापित करने के लिए एक बाहरी सीवी भी करता है? दूसरे शब्दों में, क्या हमें अपना बाहरी सीवी कोड करना होगा अगर हम? चुने हुए लंबोदर को मान्य करना चाहते हैं? " और उन्होंने जवाब दिया (बल्कि जल्दी से) "हां, सिर्फ लैंबडा लेने के लिए", जिसका मतलब है कि मैं इसे केवल आंतरिक सीवी करता हूं, और हमें अपने स्वयं के बाहरी सीवी को कोड करना होगा।
कोइलथ

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