2015-07-12 13 views
8

मैं एक सूत्र के साथ एक मॉडल मैट्रिक्स बनाने की कोशिश कर रहा हूं जिसमें कई इंटरैक्शन शब्द हैं (कुछ निरंतर, कुछ 0-1, कई स्तरों के साथ कुछ कारक)। इस मॉडल मैट्रिक्स का निर्माण मेरी लिपि की बाधा है। अंत में मॉडल मैट्रिक्स 1000 कॉलम के साथ 8 एम पंक्तियां है। चूंकि कई स्तरों वाले कारक 0-1 एन्कोड किए गए हैं, जिसके परिणामस्वरूप मैट्रिक्स इंटरैक्शन का प्रतिनिधित्व करते हैं, इसलिए बहुत पहले से ही sparse.model.matrix का उपयोग किया जाता है।आर: एक स्पैस मॉडल मैट्रिक्स बनाने के लिए तेज़ तरीका

क्या इस मैट्रिक्स को उत्पन्न करने का कोई तेज़ तरीका है? शायद आरसीपीपी में?

+1

शायद 'sparse.model.matrix' प्रोफ़ाइल देखें जहां बाधाएं हैं? –

+5

यदि आप एक MWE भी प्रदान करेंगे तो यह अच्छा होगा ताकि हम आपके साथ काम करने का बेहतर विचार प्राप्त कर सकें। –

+0

आगे की तुलना के लिए देखें: http://stackoverflow.com/questions/31373710/r-fast-way-to-create-a-sparse-model-matrix –

उत्तर

2

क्या आपने caret के dummyVars का उपयोग करने पर विचार किया है? यह मेरे लिए काम करता है और उचित रूप से तेज़ लगता है।

?dummyVarsmodel.matrix और dummyVars के डिफ़ॉल्ट व्यवहार की तुलना करता है, लेकिन इसके बारे में बहुत कुछ नहीं कहता है।

पर एक reproducible example एक छोटा सा प्रदर्शन बेंचमार्क के लिए:

n = 1e3 # observations 
m = 1e2 # variables 
some_levels <- sort(c(LETTERS, letters)) 
library('microbenchmark') 
set.seed(1234) 

df <- data.frame(
     lapply(1:m, function(x){ 
        switch(sample.int(3,1),  
          # "some continuous, some 0-1" 
          '1' = rnorm(n), '2' = rbinom(n, 1, 0.5), 
          # "some factors with many levels"  
          '3' = factor(sample(some_levels, n, TRUE), 
             levels=some_levels) 
         ) 
         }) 
       ) 
names(df) <- paste0('V',1:m) 

#------------- it sounds like you are doing something like this -------------- 
frm <- as.formula(paste('~', paste(names(df), collapse='+'))) 
library('Matrix') 
microbenchmark(
    mm <- sparse.model.matrix(frm, df) 
) # mean = .133 sec (YMMV) 

#---------------- you could try something like this -------------------------- 
library('caret') 
microbenchmark(
    mm2 <- dummyVars(frm, df, fullRank=TRUE) 
) # mean = .00954 sec (YMMV) 

नोट fullRank = TRUE ताकि "कारकों model.matrix के अनुरूप होना करने के लिए इनकोड और जिसके परिणामस्वरूप वहाँ [वैसा] कोई रैखिक निर्भरता स्तंभों के बीच प्रेरित कर रहे हैं" प्रति ?dummyVarsfullRank = TRUE में में sparse=TRUE के व्यवहार को प्रेरित करने के लिए fullRank = TRUE को निकालना चाह सकता है। मुझे स्पष्ट दस्तावेज नहीं मिला।

+0

क्या 'डमीवर्स' सिर्फ नक्शा नहीं बनाते हैं? क्या आपको भविष्यवाणी वक्तव्य की भी आवश्यकता नहीं है? 'Mm3 <की तरह - भविष्यवाणी (मिमी 2, डीएफ)'? – screechOwl

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