2015-03-27 6 views
5

मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जो घटनाओं के एक समूह के संभावित प्रभाव को संभावित प्रभाव दिखाएगा। मैं glmnet() पैकेज का उपयोग कर रहा हूं, विशेष रूप से पोइसन सुविधा का उपयोग कर रहा हूं। यहां मेरा कोड है:आर में glmnet() और cv.glmnet() के बीच अंतर?

# de <- data imported from sql connection   
x <- model.matrix(~.,data = de[,2:7]) 
y <- (de[,1]) 
reg <- cv.glmnet(x,y, family = "poisson", alpha = 1) 
reg1 <- glmnet(x,y, family = "poisson", alpha = 1) 

**Co <- coef(?reg or reg1?,s=???)** 

summ <- summary(Co) 
c <- data.frame(Name= rownames(Co)[summ$i], 
     Lambda= summ$x) 
c2 <- c[with(c, order(-Lambda)), ] 

शुरुआत SQL में मेरे डेटाबेस से बड़ी मात्रा में डेटा आयात करती है। मैं इसे मैट्रिक्स प्रारूप में डालता हूं और भविष्यवाणियों से प्रतिक्रिया अलग करता हूं।

यह वह जगह है जहां मैं उलझन में हूं: मैं यह नहीं समझ सकता कि ग्लैमनेट() फ़ंक्शन और cv.glmnet() फ़ंक्शन के बीच अंतर क्या है। मुझे एहसास है कि cv.glmnet() फ़ंक्शन glmnet() का एक-गुना क्रॉस-सत्यापन है, लेकिन व्यावहारिक शर्तों में इसका क्या अर्थ है? वे लैम्ब्डा के लिए समान मूल्य प्रदान करते हैं, लेकिन मैं यह सुनिश्चित करना चाहता हूं कि मैं दोनों के बीच के अंतर के बारे में कुछ महत्वपूर्ण नहीं खो रहा हूं।

मैं यह भी अस्पष्ट हूं कि जब मैं अल्फा = 1 (माना जाता है कि डिफ़ॉल्ट) निर्दिष्ट करता हूं तो यह ठीक क्यों चलता है, लेकिन अगर मैं इसे छोड़ देता हूं?

अग्रिम धन्यवाद!

+0

'प्लॉट (reg)' को देखने का प्रयास करें। – Roland

+1

** कभी भी ग्लैमनेट के डिफ़ॉल्ट लैम्ब्डा अनुक्रम पर भरोसा न करें! ** कुख्यात मुद्दा। हमेशा अपना अनुक्रम प्रदान करें। फिर 'फिट $ lambda.min' से इष्टतम लैम्ब्डा मान प्राप्त करें और 'predict()',' coef() 'आदि के सभी कॉल में' s = lambda.min' पैरामीटर के साथ इसका उपयोग करें – smci

+0

@smci क्यों नहीं lambda.1se का उपयोग कर? वास्तव में यह भविष्यवाणी द्वारा उपयोग किया जाता है() – Tonja

उत्तर

6

ग्लैमनेट() एक आर पैकेज है जिसका उपयोग रीग्रेशन मॉडल, लासो मॉडल और अन्य फिट करने के लिए किया जा सकता है। अल्फा तर्क निर्धारित करता है कि किस प्रकार का मॉडल फिट है। जब अल्फा = 0, रिज मॉडल फिट है और यदि अल्फा = 1, एक लासो मॉडल फिट है।

cv.glmnet() डिफ़ॉल्ट 10-गुना द्वारा क्रॉस-सत्यापन करता है जिसे nfolds का उपयोग करके समायोजित किया जा सकता है। एक 10 गुना सीवी यादृच्छिक रूप से आपके अवलोकनों को लगभग 10 गैर-ओवरलैपिंग समूहों/लगभग बराबर आकार के गुना में विभाजित करेगा। पहला गुना सत्यापन सेट के लिए उपयोग किया जाएगा और मॉडल 9 गुना पर फिट है। बाईस वेरिएंस फायदे आमतौर पर ऐसे मॉडल सत्यापन विधियों का उपयोग करने के पीछे प्रेरणा होती है। लासो और रिज मॉडल के मामले में, सीवी ट्यूनिंग पैरामीटर लैम्ब्डा के मूल्य को चुनने में मदद करता है।

अपने उदाहरण में, आप लैंपडा के मूल्य को देखने के लिए साजिश (reg) या reg $ lambda.min कर सकते हैं जिसके परिणामस्वरूप सबसे छोटी सीवी त्रुटि होती है। फिर आप लैम्ब्डा के उस मूल्य के लिए टेस्ट एमएसई प्राप्त कर सकते हैं। डिफ़ॉल्ट रूप से, ग्लैमनेट() लैम्ब्डा की स्वचालित रूप से चुनी गई रेंज के लिए रिज या लासो रिग्रेशन का प्रदर्शन करेगा जो न्यूनतम परीक्षण एमएसई नहीं दे सकता है। उम्मीद है की यह मदद करेगा!

आशा है कि इससे मदद मिलती है!

+1

अधिक स्पष्ट रूप से कहा गया: ** कभी भी ग्लैमनेट के डिफ़ॉल्ट लैम्ब्डा अनुक्रम पर भरोसा न करें! हमेशा अपना अनुक्रम प्रदान करें। ** – smci

1

reg $ lambda.min और reg $ lambda.1se के बीच; lambda.min स्पष्ट रूप से आपको सबसे कम एमएसई देगा, हालांकि, इस त्रुटि के आधार पर कि आप त्रुटि के साथ कितना लचीला हो सकते हैं, आप reg $ lambda.1se चुनना चाहेंगे, क्योंकि यह मान भविष्यवाणियों की संख्या को और कम कर देगा। आप अपने lambda मान के रूप में reg $ lambda.min और reg $ lambda.1se का अर्थ भी चुन सकते हैं।

संबंधित मुद्दे