मैं 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()
। इसलिए यदि आपके डेटा की लंबाई कभी बदलती है, तो प्रजनन क्षमता बदल जाती है।