2012-05-08 11 views
8

मेरे पास big.___() पैकेजों में से कुछ का उपयोग करके आर में काम करने वाला एक बड़ा डेटा सेट है। यह ~ 10 gigs (100mmR x 15 सी) है और इस तरह दिखता है:आर वैरिकल वैरिएबल के साथ biglm

Price   Var1   Var2 
12.45   1    1 
33.67   1    2 
25.99   3    3 
14.89   2    2 
23.99   1    1 
...   ...   ... 

मैं var1 और var2 के आधार पर कीमत भविष्यवाणी करने के लिए कोशिश कर रहा हूँ।

जिस समस्या के साथ मैं आया हूं वह यह है कि Var1 और Var2 स्पष्ट/कारक चर हैं।
var1 और var2 प्रत्येक 3 स्तरों (1,2 और 3), लेकिन डेटा में केवल 6 संयोजन सेट

(1,1; 1,2; 1,3; 2,2; 2,3; 3,3) 

biglm() में कारक चर का उपयोग करने के लिए वे डेटा के प्रत्येक टुकड़ा में मौजूद होना चाहिए देखते हैं कि biglm उपयोग करता है (मेरी समझ यह है कि biglm डेटा सेट को 'x' भाग में विभाजित करता है और रैम से बड़े डेटा सेट से निपटने के लिए प्रत्येक खंड का विश्लेषण करने के बाद प्रतिगमन मानकों को अद्यतन करता है)।

मैं डेटा सबसेट तक की कोशिश की है, लेकिन अपने कंप्यूटर इसे संभाल नहीं कर सकते हैं या मेरे कोड गलत है:

bm11 <- big.matrix(150000000, 3) 
bm11 <- subset(x, x[,2] == 1 & x[,3] == 1) 

ऊपर मुझे इन का एक समूह देता है:

Error: cannot allocate vector of size 1.1 Gb 

करता है किसी को भी इस मुद्दे के आसपास काम करने के लिए कोई सुझाव है?

मैं विंडोज 7 मशीन डब्ल्यू/4 गीगा रैम पर आर 64-बिट का उपयोग कर रहा हूं।

+0

क्या आप खुद को डमी बना सकते हैं और उन पर 'biglm' चला सकते हैं? –

+0

@ gsk3: यह वही है जो मैंने महसूस किया था कि उन्हें प्रत्येक खंड में उपस्थित होने की आवश्यकता है। जब मैंने नए मानों की भविष्यवाणी करने की कोशिश की तो मैं सफलतापूर्वक biglm भाग गया तो एक त्रुटि संदेश मिला और वे सभी रिग्रेशन पैरामीटर में मौजूद नहीं थे। – screechOwl

उत्तर

9

आपको प्रत्येक डेटा में मौजूद सभी डेटा या सभी मूल्यों की आवश्यकता नहीं है, आपको केवल उन सभी स्तरों की आवश्यकता है जिनके लिए जिम्मेदार है। इसका मतलब यह है कि आप इस तरह का हिस्सा बना सकते हैं:

curchunk <- data.frame(Price=c(12.45, 33.67), Var1=factor(c(1,1), levels=1:3), 
    Var2 = factor(1:2, levels=1:3)) 

और यह काम करेगा। भले ही Var1 में Var1 और 2 मानों में केवल 1 मान है, दोनों तीन स्तर दोनों में मौजूद हैं, इसलिए यह सही चीज़ करेगा।

भी biglm डेटा आपके लिए भाग में नहीं तोड़ता है, लेकिन उम्मीद है कि आप इसे प्रबंधित करने के लिए प्रबंधनीय भाग दें। इसे बेहतर देखने के लिए उदाहरणों के माध्यम से काम करें। biglm के साथ एक सामान्य पद्धति किसी फ़ाइल या डेटाबेस से पढ़ना है, पहली 'एन' पंक्तियों में पढ़ें (जहां 'एन' एक तर्कसंगत सबसेट है) और उन्हें biglm पर पास करें (संभवतः यह सुनिश्चित करने के बाद कि सभी कारकों में निर्दिष्ट सभी स्तर हैं), फिर स्मृति से डेटा के उस हिस्से को हटा दें और अगली 'एन' पंक्तियों में पढ़ें और update पर पास करें, फ़ाइल के अंत तक प्रत्येक बार उपयोग किए गए हिस्सों को हटाने के बाद तक जारी रहें (इसलिए आपके पास अगली के लिए पर्याप्त मेमोरी रूम है एक)।

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