r - आर में मॉडल मैट्रिक्स में एक फैक्टर के सभी स्तर आर




matrix model indicator (8)

(खुद को रिडीम करने का प्रयास कर रहा है ...) @ फ़ैबियंस पर जेरेड की टिप्पणी के जवाब में इसे स्वचालित करने के बारे में उत्तर दें, ध्यान दें कि आपको आपूर्ति करने की आवश्यकता है, इसके विपरीत विपरीत मैट्रिक्स की एक नामांकित सूची है। contrasts() एक वेक्टर / कारक लेता है और इससे विरोधाभास मैट्रिक्स उत्पन्न करता है। इसके लिए हम अपने डेटा सेट में प्रत्येक कारक पर contrasts() चलाने के लिए lapply() का उपयोग कर सकते हैं, उदाहरण के लिए testFrame उदाहरण प्रदान किया गया है:

> lapply(testFrame[,4:5], contrasts, contrasts = FALSE)
$Fourth
        Alice Bob Charlie David
Alice       1   0       0     0
Bob         0   1       0     0
Charlie     0   0       1     0
David       0   0       0     1

$Fifth
        Edward Frank Georgia Hank Isaac
Edward       1     0       0    0     0
Frank        0     1       0    0     0
Georgia      0     0       1    0     0
Hank         0     0       0    1     0
Isaac        0     0       0    0     1

@fabians उत्तर में अच्छी तरह से कौन सा स्लॉट जवाब:

model.matrix(~ ., data=testFrame, 
             contrasts.arg = lapply(testFrame[,4:5], contrasts, contrasts=FALSE))

मेरे पास एक data.frame है। data.frame जैसा कि नीचे देखा गया संख्यात्मक और कारक चर शामिल है।

testFrame <- data.frame(First=sample(1:10, 20, replace=T),
           Second=sample(1:20, 20, replace=T), Third=sample(1:10, 20, replace=T),
           Fourth=rep(c("Alice","Bob","Charlie","David"), 5),
           Fifth=rep(c("Edward","Frank","Georgia","Hank","Isaac"),4))

मैं एक matrix बनाना चाहता हूं जो कारक में डमी चर निर्दिष्ट करता है और अकेले संख्यात्मक चर को छोड़ देता है।

model.matrix(~ First + Second + Third + Fourth + Fifth, data=testFrame)

जैसा कि lm चलने की उम्मीद है, यह प्रत्येक स्तर के एक स्तर को संदर्भ स्तर के रूप में छोड़ देता है। हालांकि, मैं सभी कारकों के प्रत्येक स्तर के लिए एक डमी / सूचक चर के साथ एक matrix बनाना चाहता हूं। मैं glmnet लिए इस मैट्रिक्स का निर्माण कर रहा glmnet इसलिए मैं glmnet के बारे में चिंतित नहीं हूं।

क्या model.matrix को कारक के हर स्तर के लिए डमी बनाने का कोई तरीका है?


मैं वर्तमान में लासो मॉडल और glmnet::cv.glmnet() , model.matrix() और Matrix::sparse.model.matrix() (उच्च आयाम मैट्रिक्स के लिए, model.matrix का उपयोग करके model.matrix रहा model.matrix , हमारे समय को मारने के अनुसार glmnet लेखक।)।

@fabians और @ गैविन के उत्तर के समान जवाब पाने के लिए बस साझा करना एक साफ कोडिंग है। इस बीच, @ asdf123 ने एक और पैकेज library('CatEncoders') भी पेश की।

> require('useful')
> # always use all levels
> build.x(First ~ Second + Fourth + Fifth, data = testFrame, contrasts = FALSE)
> 
> # just use all levels for Fourth
> build.x(First ~ Second + Fourth + Fifth, data = testFrame, contrasts = c(Fourth = FALSE, Fifth = TRUE))

स्रोत: सभी के लिए आर: उन्नत Analytics और ग्राफिक्स (पृष्ठ 273)


caret ने 2 लाइनों के साथ इसे प्राप्त करने के लिए एक अच्छा फ़ंक्शन dummyVars लागू किया:

library(caret) dmy <- dummyVars(" ~ .", data = testFrame) testFrame2 <- data.frame(predict(dmy, newdata = testFrame))

अंतिम कॉलम जांचना:

colnames(testFrame2)

"First"  "Second"         "Third"          "Fourth.Alice"   "Fourth.Bob"     "Fourth.Charlie" "Fourth.David"   "Fifth.Edward"   "Fifth.Frank"   "Fifth.Georgia"  "Fifth.Hank"     "Fifth.Isaac"   

यहां सबसे अच्छा बिंदु यह है कि आपको मूल डेटा फ्रेम मिलता है, साथ ही डमी वैरिएबल में परिवर्तन के लिए इस्तेमाल किए गए मूल को छोड़ दिया जाता है।

अधिक जानकारी: http://amunategui.github.io/dummyVar-Walkthrough/



आर पैकेज 'CatEncoders' का उपयोग करना

library(CatEncoders)
testFrame <- data.frame(First=sample(1:10, 20, replace=T),
           Second=sample(1:20, 20, replace=T), Third=sample(1:10, 20, replace=T),
           Fourth=rep(c("Alice","Bob","Charlie","David"), 5),
           Fifth=rep(c("Edward","Frank","Georgia","Hank","Isaac"),4))

fit <- OneHotEncoder.fit(testFrame)

z <- transform(fit,testFrame,sparse=TRUE) # give the sparse output
z <- transform(fit,testFrame,sparse=FALSE) # give the dense output

आपको कारक चर के लिए contrasts को रीसेट करने की आवश्यकता है:

model.matrix(~ Fourth + Fifth, data=testFrame, 
        contrasts.arg=list(Fourth=contrasts(testFrame$Fourth, contrasts=F), 
                Fifth=contrasts(testFrame$Fifth, contrasts=F)))

या, थोड़ा कम टाइपिंग और उचित नामों के बिना:

model.matrix(~ Fourth + Fifth, data=testFrame, 
    contrasts.arg=list(Fourth=diag(nlevels(testFrame$Fourth)), 
            Fifth=diag(nlevels(testFrame$Fifth))))

model.matrix(~ First + Second + Third + Fourth + Fifth - 1, data=testFrame)

या

model.matrix(~ First + Second + Third + Fourth + Fifth + 0, data=testFrame)

सबसे सरल होना चाहिए

एफ


मैं मॉडलों को सहेजने और बहाल करने के लिए अधिक जानकारी जोड़ने के लिए अपना उत्तर सुधार रहा हूं।

में (और बाद में) Tensorflow संस्करण 0.11 :

मॉडल बचाओ:

import tensorflow as tf

#Prepare to feed input, i.e. feed_dict and placeholders
w1 = tf.placeholder("float", name="w1")
w2 = tf.placeholder("float", name="w2")
b1= tf.Variable(2.0,name="bias")
feed_dict ={w1:4,w2:8}

#Define a test operation that we will restore
w3 = tf.add(w1,w2)
w4 = tf.multiply(w3,b1,name="op_to_restore")
sess = tf.Session()
sess.run(tf.global_variables_initializer())

#Create a saver object which will save all the variables
saver = tf.train.Saver()

#Run the operation by feeding input
print sess.run(w4,feed_dict)
#Prints 24 which is sum of (w1+w2)*b1 

#Now, save the graph
saver.save(sess, 'my_test_model',global_step=1000)

मॉडल को पुनर्स्थापित करें:

import tensorflow as tf

sess=tf.Session()    
#First let's load meta graph and restore weights
saver = tf.train.import_meta_graph('my_test_model-1000.meta')
saver.restore(sess,tf.train.latest_checkpoint('./'))


# Access saved Variables directly
print(sess.run('bias:0'))
# This will print 2, which is the value of bias that we saved


# Now, let's access and create placeholders variables and
# create feed-dict to feed new data

graph = tf.get_default_graph()
w1 = graph.get_tensor_by_name("w1:0")
w2 = graph.get_tensor_by_name("w2:0")
feed_dict ={w1:13.0,w2:17.0}

#Now, access the op that you want to run. 
op_to_restore = graph.get_tensor_by_name("op_to_restore:0")

print sess.run(op_to_restore,feed_dict)
#This will print 60 which is calculated 

यह और कुछ और उन्नत उपयोग-मामलों को यहां बहुत अच्छी तरह से समझाया गया है।

Tensorflow मॉडल को सहेजने और पुनर्स्थापित करने के लिए एक त्वरित पूर्ण ट्यूटोरियल







r matrix model indicator