मैं cv.glmnetभविष्यवक्ताओं को खोजने के लिए उपयोग कर रहा हूं । मेरे द्वारा उपयोग किया जाने वाला सेटअप इस प्रकार है:
lassoResults<-cv.glmnet(x=countDiffs,y=responseDiffs,alpha=1,nfolds=cvfold)
bestlambda<-lassoResults$lambda.min
results<-predict(lassoResults,s=bestlambda,type="coefficients")
choicePred<-rownames(results)[which(results !=0)]
यह सुनिश्चित करने के परिणाम प्रतिलिपि प्रस्तुत करने योग्य मैं कर रहे हैं set.seed(1)। परिणाम अत्यधिक परिवर्तनशील हैं। मैं यह देखने के लिए कि परिणाम कितने परिवर्तनशील थे, मैंने ठीक उसी कोड 100 को चलाया। 98/100 रनों में एक विशेष भविष्यवक्ता को हमेशा चुना गया था (कभी-कभी सिर्फ अपने दम पर); अन्य भविष्यवक्ताओं को चुना गया (सह-कुशल गैर-शून्य था) आमतौर पर 50/100 बार।
तो यह मेरे लिए कहता है कि हर बार जब क्रॉस वैधीकरण चल रहा होता है, तो यह संभवत: एक अलग सर्वश्रेष्ठ लैंबडा का चयन करने वाला होता है, क्योंकि सिलवटों के प्रारंभिक यादृच्छिकरण की बात होती है। अन्य लोगों ने इस समस्या ( CV.glmnet परिणाम ) को देखा है, लेकिन इसका कोई हल नहीं है।
मैं सोच रहा हूं कि शायद जो 98/100 को दिखाता है वह संभवतः सभी अन्य लोगों के साथ बहुत अधिक सहसंबद्ध है? परिणाम है को स्थिर करता है, तो मैं सिर्फ LOOCV चलाने ( ), लेकिन मैं उत्सुक हूँ क्यों वे इतने चर जब हैं ।
set.seed(1)एक बार फिरcv.glmnet()100 बार दौड़ें ? यह प्रतिलिपि प्रस्तुत करने योग्यता के लिए महान पद्धति नहीं है;set.seed()प्रत्येक रन से पहले सही करना बेहतर है , वरना रनों के पार गुना स्थिर रखें। आपका प्रत्येक कॉल N बार कॉल कर रहाcv.glmnet()हैsample()। इसलिए यदि आपके डेटा की लंबाई कभी बदलती है, तो प्रजनन क्षमता बदल जाती है।