2011-12-10 14 views
20

मैं डेटासेट पर glmnet पैकेज का उपयोग करने का प्रयास कर रहा हूं। मैं glmnet() के लिए लैम्ब्डा मान प्राप्त करने के लिए cv.glmnet() का उपयोग कर रहा हूं।आर ग्लैमनेट: "(सूची) ऑब्जेक्ट को 'डबल' टाइप करने के लिए मजबूर नहीं किया जा सकता है

> head(t2) 
    X1 X2  X3 X4 X5   X6 X7 X8 X9 X10 X11 X12 
1 1 1 0.7661266 45 2 0.80298213 9120 13 0 6 0 2 
2 2 0 0.9571510 40 0 0.12187620 2600 4 0 0 0 1 
3 3 0 0.6581801 38 1 0.08511338 3042 2 1 0 0 0 
4 4 0 0.2338098 30 0 0.03604968 3300 5 0 0 0 0 
5 5 0 0.9072394 49 1 0.02492570 63588 7 0 1 0 0 
6 6 0 0.2131787 74 0 0.37560697 3500 3 0 1 0 1 
> str(t2) 
'data.frame': 150000 obs. of 12 variables: 
$ X1 : int 1 2 3 4 5 6 7 8 9 10 ... 
$ X2 : int 1 0 0 0 0 0 0 0 0 0 ... 
$ X3 : num 0.766 0.957 0.658 0.234 0.907 ... 
$ X4 : int 45 40 38 30 49 74 57 39 27 57 ... 
$ X5 : int 2 0 1 0 1 0 0 0 0 0 ... 
$ X6 : num 0.803 0.1219 0.0851 0.036 0.0249 ... 
$ X7 : int 9120 2600 3042 3300 63588 3500 NA 3500 NA 23684 ... 
$ X8 : int 13 4 2 5 7 3 8 8 2 9 ... 
$ X9 : int 0 0 1 0 0 0 0 0 0 0 ... 
$ X10: int 6 0 0 0 1 1 3 0 0 4 ... 
$ X11: int 0 0 0 0 0 0 0 0 0 0 ... 
$ X12: int 2 1 0 0 0 1 0 0 NA 2 ... 
> cv1 <- cv.glmnet(t2[,-c(1,2,7,12)], t2[,2], family="multinomial") 
Error in lognet(x, is.sparse, ix, jx, y, weights, offset, alpha, nobs, : 
    (list) object cannot be coerced to type 'double' 

मैं कॉलम 1,2,7,12 को छोड़कर कर रहा हूँ के रूप में वे कर रहे हैं: आईडी स्तंभ, प्रतिक्रिया स्तंभ, एनए के होते हैं, और एनए के होते हैं यहाँ डाटासेट और त्रुटि संदेश नहीं है। कोई भी सुझाव बढ़िया होंगे।

उत्तर

39

cv.glmnet भविष्यवाणियों के मैट्रिक्स की अपेक्षा करता है, डेटा फ्रेम नहीं। आम तौर पर आप

X <- model.matrix(<formula>, data=<data>) 

के माध्यम से, लेकिन आपके मामले में इस प्राप्त कर सकते हैं, तो आप शायद वहाँ और अधिक आसानी से

X <- as.matrix(t2[,-c(1,2,7,12)]) 

साथ प्राप्त कर सकते हैं के बाद से आप किसी भी कारक चर या अन्य समस्याओं को जटिल बना सकता है प्रतीत नहीं होते हैं मायने रखती है।


इस जवाब के बाद से हिट का खूब हो रही है: glmnetUtils package glmnet करने के लिए एक फार्मूला आधारित इंटरफेस, ऐसे ही सबसे आर मॉडलिंग कार्यों के लिए इस्तेमाल किया जा सकता है। इसमें glmnet और cv.glmnet के साथ-साथ अल्फा और लैम्ब्डा दोनों के लिए क्रॉसविडिएशन करने के लिए एक नया cva.glmnet फ़ंक्शन के लिए विधियां शामिल हैं।

ऊपर बन जाएगा

cv.glmnet(X2 ~ ., data=t2[-1], family="multinomial") 

एनए के स्वचालित रूप से नियंत्रित किया जाता है, ताकि आप लापता मूल्यों के साथ कॉलम बाहर करने के लिए नहीं है।

+6

त्वरित नोट, as.matrix() के बजाय, मैं उपयोग करने के लिए समाप्त हुआ: data.matrix()। – screechOwl

+1

@screechOwl: मुझे नहीं लगता कि आपको 'data.matrix()' का उपयोग करने की आवश्यकता है; आपके सभी चर int या num थे। क्या आप फिर से जांच सकते हैं? – smci

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

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