2013-03-06 9 views
10

क्या कक्षा एलएम के किसी ऑब्जेक्ट को 'संपीड़ित' करने का कोई तरीका है, ताकि मैं इसे डिस्क पर सहेज सकूं और बाद में इसे predict.lm के उपयोग के लिए लोड कर सकूं?क्या बाद की भविष्यवाणी के लिए एलएम() ऑब्जेक्ट को 'संपीड़ित' करने का कोई तरीका है?

मेरे पास एक एलएम ऑब्जेक्ट है जो बचत पर ~ 142 एमबी होने के बाद समाप्त होता है, और मुझे लगता है कि भविष्यवाणी करने में कठिनाई होती है। मुझे सभी मूल अवलोकन/फिट मान/अवशिष्ट इत्यादि की आवश्यकता होती है ताकि रैखिक भविष्यवाणी हो सके। क्या मैं जानकारी हटा सकता हूं ताकि सहेजा गया मॉडल छोटा हो?

मैंने कुछ चर (fitted.values, अवशिष्ट, आदि) को NA पर सेट करने का प्रयास किया है, लेकिन ऐसा लगता है कि सहेजे गए फ़ाइल आकार पर कोई प्रभाव नहीं पड़ता है।

+2

इसके अलावा, [इस] (की भावना में http://stackoverflow.com/questions/2929776/how-to-save-a-fitted-r-model-for-later-use?rq= 1) प्रश्न, मैंने 'मॉडल = गलत' सेट करने की कोशिश की लेकिन इसका कोई उल्लेखनीय प्रभाव नहीं पड़ा। –

+1

यदि बड़ा डेटा आपकी समस्या का कारण बन रहा है तो 'biglm' उत्तर हो सकता है। वर्ग 'biglm' का एक वस्तु' एलएम' से छोटा है, और अन्य 'बड़ी डेटा' क्षमताएं हैं – mnel

+0

असल में यह मुद्दा स्मृति में डेटा का आकार नहीं है, यह गति मैं भविष्यवाणी के साथ देख रहा था() समारोह। मेरी स्क्रिप्ट एक रात-अद्यतन मॉडल तैयार कर रही थी जिसे अंतिम उपयोगकर्ताओं के लिए पूर्वानुमान बनाने के लिए RPY2 के माध्यम से बुलाया गया था। 142 एमबी मॉडल के साथ, यह प्रत्येक अनुरोध को लोड करने के लिए हमेशा के लिए ले रहा था। –

उत्तर

6

आप अपने मॉडल फिट करने के लिए biglm का उपयोग कर सकते हैं, biglm मॉडल ऑब्जेक्ट एलएम मॉडल ऑब्जेक्ट से छोटा है। आप predict.biglm का उपयोग कर सकते हैं एक फ़ंक्शन बनाएं जिसे आप न्यूडाटा डिज़ाइन मैट्रिक्स को पास कर सकते हैं, जो पूर्वानुमानित मान देता है।

अन्य विकल्प फ़ाइलों को सहेजने के लिए saveRDS का उपयोग करना है, जो कि छोटे से छोटे होते हैं, क्योंकि उनके पास कम ऑब्जेक्ट होता है, एक ऑब्जेक्ट होता है, जैसे कि कई ऑब्जेक्ट्स को सहेज सकते हैं।

library(biglm) 
m <- lm(log(Volume)~log(Girth)+log(Height), trees) 
mm <- lm(log(Volume)~log(Girth)+log(Height), trees, model = FALSE, x =FALSE, y = FALSE) 
bm <- biglm(log(Volume)~log(Girth)+log(Height), trees) 
pred <- predict(bm, make.function = TRUE) 
save(m, file = 'm.rdata') 
save(mm, file = 'mm.rdata') 
save(bm, file = 'bm.rdata') 
save(pred, file = 'pred.rdata') 
saveRDS(m, file = 'm.rds') 
saveRDS(mm, file = 'mm.rds') 
saveRDS(bm, file = 'bm.rds') 
saveRDS(pred, file = 'pred.rds') 

file.info(paste(rep(c('m','mm','bm','pred'),each=2) ,c('.rdata','.rds'),sep='')) 
#    size isdir mode mtime    ctime    atime    exe 
# m.rdata 2806 FALSE 666 2013-03-07 11:29:30 2013-03-07 11:24:23 2013-03-07 11:29:30 no 
# m.rds  2798 FALSE 666 2013-03-07 11:29:30 2013-03-07 11:29:30 2013-03-07 11:29:30 no 
# mm.rdata 2113 FALSE 666 2013-03-07 11:29:30 2013-03-07 11:24:28 2013-03-07 11:29:30 no 
# mm.rds  2102 FALSE 666 2013-03-07 11:29:30 2013-03-07 11:29:30 2013-03-07 11:29:30 no 
# bm.rdata 592 FALSE 666 2013-03-07 11:29:30 2013-03-07 11:24:34 2013-03-07 11:29:30 no 
# bm.rds  583 FALSE 666 2013-03-07 11:29:30 2013-03-07 11:29:30 2013-03-07 11:29:30 no 
# pred.rdata 1007 FALSE 666 2013-03-07 11:29:30 2013-03-07 11:24:40 2013-03-07 11:29:30 no 
# pred.rds 995 FALSE 666 2013-03-07 11:29:30 2013-03-07 11:27:30 2013-03-07 11:29:30 no 
4

बाहर निकलता है मैंने अपनी समस्या हल की। निम्नलिखित का उपयोग करना:

model<-lm(form,data=ct,model=FALSE,x=FALSE,y=FALSE) 

ने मेरे मॉडल के आकार को काफी हद तक कम कर दिया।

6

योग्य कुछ बातें:

  1. यह सवाल वास्तव में डुप्लिकेट है।

  2. संकीर्ण अर्थ model=FALSE जैसा कि पहले से ही किसी अन्य प्रश्न में उत्तर दिया गया था। ताकि आप केवल पूर्वानुमानों के वेक्टर बचाने के लिए और एक मैट्रिक्स के साथ गुणा सकता

  3. एक व्यापक अर्थ में, predict(fit, newdata) वास्तव में सिर्फ एक मैट्रिक्स-वेक्टर गुणा करता है।

  4. वैकल्पिक फिटिंग फ़ंक्शन हैं। नीचे RcppArmadillo में fastLm() से एक उदाहरण है जो भी तेज़ होता है।

एक उदाहरण के लिए नीचे देखें।

R> library(RcppArmadillo) 
Loading required package: Rcpp 
R> flm <- fastLm(Volume ~ Girth, data=trees) 
R> predict(flm, newdata=trees[1:5,])    ## can predict as with lm() 
[1] 5.10315 6.62291 7.63608 16.24803 17.26120 
R> object.size(flm)        ## tiny object size ... 
3608 bytes 
R> stdlm <- lm(Volume ~ Girth, data=trees) 
R> object.size(stdlm)       ## ... compared to what lm() has 
20264 bytes 
R> stdlm <- lm(Volume ~ Girth, data=trees, model=FALSE) 
R> object.size(stdlm)       ## ... even when model=FALSE 
15424 bytes 
R> 
संबंधित मुद्दे

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