मैंने कई सीटीआर मॉडल (लगभग 40 से 80) बनाए हैं जिन्हें मैं अक्सर मूल्यांकन करना चाहता हूं।पार्टी ::: ctree मॉडल से प्रशिक्षण डेटा कैसे निकालें?
एक मुद्दा यह है कि मॉडल ऑब्जेक्ट्स बहुत बड़े हैं (40 मॉडल को स्मृति की 2.8 जी से अधिक की आवश्यकता होती है) और ऐसा लगता है कि उन्होंने प्रशिक्षण डेटा संग्रहीत किया, शायद मॉडल नाम @ डेटा और मॉडल नाम @ प्रतिक्रियाओं के रूप में, और नहीं नए डेटा की भविष्यवाणी करने के लिए प्रासंगिक सूचनाएं।
अधिकांश अन्य आर सीखने के पैकेज में कॉन्फ़िगर करने योग्य विकल्प हैं मॉडल मॉडल में डेटा शामिल करना है, लेकिन मुझे दस्तावेज़ में कोई संकेत नहीं मिला। मैंने
[email protected] <- new("ModelEnv")
द्वारा खाली ModelEnv ऑब्जेक्ट्स को असाइन करने का भी प्रयास किया लेकिन संबंधित आरडीएटा फ़ाइल के आकार पर कोई प्रभाव नहीं पड़ा।
कोई भी जानता है कि सीटीआर वास्तव में प्रशिक्षण डेटा संग्रहीत करता है और सीटीरी मॉडल से सभी डेटा को कैसे हटाया जाए जो नई भविष्यवाणियों के लिए अप्रासंगिक हैं ताकि मैं उनमें से कई को स्मृति में फिट कर सकूं?
धन्यवाद एक बहुत,
स्टीफन
आपकी प्रतिक्रिया के लिए धन्यवाद, कि पहले से ही काफी मददगार था।
मैं dput
और str
इस्तेमाल किया वस्तु पर एक गहरी नज़र डालना और पाया कि कोई प्रशिक्षण डाटा मॉडल में शामिल है, लेकिन वहाँ एक responses
स्लॉट है, जो प्रशिक्षण लेबल और rownames के लिए लगता है। वैसे भी, मैंने देखा कि प्रत्येक नोड में प्रत्येक प्रशिक्षण नमूने के लिए वजन वेक्टर होता है। कोड निरीक्षण के थोड़ी देर के बाद, मैं थोड़ा googling समाप्त हो गया और party
समाचार लॉग में निम्न टिप्पणी पाया:
CHANGES IN party VERSION 0.9-13 (2007-07-23)
o update `mvt.f'
o improve the memory footprint of RandomForest objects
substancially (by removing the weights slots from each node).
यह पता चला, वहाँ पार्टी पैकेज में एक सी समारोह इन वजन बुलाया दूर करने के लिए है R_remove_weights
निम्नलिखित परिभाषा के साथ:
SEXP R_remove_weights(SEXP subtree, SEXP removestats) {
C_remove_weights(subtree, LOGICAL(removestats)[0]);
return(R_NilValue);
}
यह भी ठीक काम करता है:
# cc is my model object
sum(unlist(lapply(slotNames(cc), function (x) object.size(slot(cc, x)))))
# returns: [1] 2521256
save(cc, file="cc_before.RData")
.Call("R_remove_weights", [email protected], TRUE, PACKAGE="party")
# returns NULL and removes weights and node statistics
sum(unlist(lapply(slotNames(cc), function (x) object.size(slot(cc, x)))))
# returns: [1] 1521392
save(cc, file="cc_after.RData")
आप देख सकते हैं, यह वस्तु के आकार को कम कर देता subst लगभग 2.5 एमबी से 1.5 एमबी तक।
क्या है अजीब है, हालांकि, यह है कि इसी rdata फ़ाइलों पागलपन की हद तक विशाल हैं, और उन पर कोई प्रभाव नहीं होता:
$ ls -lh cc*
-rw-r--r-- 1 user user 9.6M Aug 24 15:44 cc_after.RData
-rw-r--r-- 1 user user 9.6M Aug 24 15:43 cc_before.RData
फ़ाइल Unzipping लगभग अंतरिक्ष के 100 एमबी पर कब्जा करने 2.5MB वस्तु दिखाता है:
$ cp cc_before.RData cc_before.gz
$ gunzip cc_before.gz
$ ls -lh cc_before*
-rw-r--r-- 1 user user 98M Aug 24 15:45 cc_before
कोई विचार, इसका कारण क्या हो सकता है?
यदि आप एक छोटी नमूना वस्तु पर 'dput' के परिणाम पोस्ट कर सकते हैं जो मदद करेगा। यदि आप 'str' का उपयोग करते हैं तो आप देख सकते हैं कि ऑब्जेक्ट में संग्रहीत प्रशिक्षण डेटा है या नहीं। –
नोट: मैंने प्रश्न को दोबारा हटा दिया और "पार्टी" लेबल हटा दिया क्योंकि यह एसओ पर अच्छी तरह परिभाषित नहीं है, निश्चित रूप से आर पैकेज तक ही सीमित नहीं है। मैंने स्मृति प्रबंधन जोड़ा क्योंकि यह प्राथमिक प्रेरणा प्रतीत होता है। – Iterator