set.seed
कार्यक्रम शुरू करने से पहले कई बार मैंने आर में फ़ंक्शन देखा है । मुझे पता है कि यह मूल रूप से यादृच्छिक संख्या पीढ़ी के लिए उपयोग किया जाता है। क्या इसे सेट करने के लिए कोई विशेष आवश्यकता है?
set.seed
कार्यक्रम शुरू करने से पहले कई बार मैंने आर में फ़ंक्शन देखा है । मुझे पता है कि यह मूल रूप से यादृच्छिक संख्या पीढ़ी के लिए उपयोग किया जाता है। क्या इसे सेट करने के लिए कोई विशेष आवश्यकता है?
जवाबों:
आवश्यकता प्रजनन योग्य परिणामों की संभावित इच्छा है, जो उदाहरण के लिए आपके कार्यक्रम को डिबग करने की कोशिश से आ सकती है, या निश्चित रूप से यह करने की कोशिश करने से फिर से करता है:
ये दो परिणाम हम "कभी नहीं" दोहराएंगे क्योंकि मैंने अभी कुछ "यादृच्छिक" के लिए कहा था:
R> sample(LETTERS, 5)
[1] "K" "N" "R" "Z" "G"
R> sample(LETTERS, 5)
[1] "L" "P" "J" "E" "D"
हालांकि, ये दोनों समान हैं क्योंकि मैं बीज सेट करता हूं :
R> set.seed(42); sample(LETTERS, 5)
[1] "X" "Z" "G" "T" "O"
R> set.seed(42); sample(LETTERS, 5)
[1] "X" "Z" "G" "T" "O"
R>
उस सब पर बहुत बड़ा साहित्य है; विकिपीडिया एक अच्छी शुरुआत है। संक्षेप में, इन RNG को छद्म रैंडम नंबर जेनरेटर कहा जाता है क्योंकि वे वास्तव में पूरी तरह से एल्गोरिथम हैं : एक ही बीज को देखते हुए, आपको एक ही क्रम मिलता है। और वह एक विशेषता है और बग नहीं है।
char2seed
TeachingDemos पैकेज में समारोह आप बीज सेट (या में पारित करने के लिए एक बीज का चयन करने के लिए अनुमति देता है set.seed
एक चरित्र स्ट्रिंग के आधार पर)। उदाहरण के लिए, आप छात्रों को बीज के रूप में उनके नाम का उपयोग कर सकते हैं तब प्रत्येक छात्र के पास एक अद्वितीय डेटासेट होता है, लेकिन प्रशिक्षक ग्रेडिंग के लिए समान डेटासेट भी बना सकता है।
char2seed
और एक परियोजना पर सिद्धांत अन्वेषक का अंतिम नाम।
set.seed(666)
और समीक्षकों को कोड में डेविल्स बीज पसंद नहीं आया ...
आपको हर बार जब आप एक प्रतिलिपि प्रस्तुत करने योग्य यादृच्छिक परिणाम प्राप्त करना चाहते हैं तो बीज सेट करना होगा।
set.seed(1)
rnorm(4)
set.seed(1)
rnorm(4)
बस कुछ अतिरिक्त पहलुओं को जोड़ना। बीज स्थापित करने की आवश्यकता: अकादमिक दुनिया में, अगर कोई दावा करता है कि उसका एल्गोरिथ्म हासिल करता है, तो एक सिमुलेशन में 98.05% प्रदर्शन का कहना है, दूसरों को इसे पुन: पेश करने में सक्षम होने की आवश्यकता है।
?set.seed
इस फ़ंक्शन की मदद फ़ाइल के माध्यम से जा रहे हैं, ये कुछ दिलचस्प तथ्य हैं:
(1) set.seed () रिटर्न NULL, अदृश्य
(2) "प्रारंभ में, कोई बीज नहीं है; एक नया वर्तमान समय और प्रक्रिया आईडी से बनाया जाता है जब एक की आवश्यकता होती है। इसलिए अलग-अलग सत्र अलग-अलग सिमुलेशन परिणाम देंगे, डिफ़ॉल्ट रूप से। हालांकि, बीज को बहाल किया जा सकता है। पिछले सत्र यदि पहले से सहेजे गए कार्यक्षेत्र को पुनर्स्थापित किया जाता है। ", यही कारण है कि जब आप अगली बार यादृच्छिक क्रम का एक ही क्रम चाहते हैं, तो आप पूर्णांक मानों के साथ set.seed () कॉल करना चाहेंगे।
बीज को ठीक करना तब आवश्यक होता है जब हम एक ऐसे फ़ंक्शन को अनुकूलित करने का प्रयास करते हैं जिसमें यादृच्छिक रूप से उत्पन्न संख्याएं होती हैं (जैसे सिमुलेशन आधारित अनुमान में)। धीरे-धीरे बोलना, अगर हम बीज को ठीक नहीं करते हैं, तो अलग-अलग यादृच्छिक संख्याओं को खींचने के कारण भिन्नता अनुकूलन एल्गोरिथ्म को विफल करने की संभावना होगी।
मान लीजिए कि, किसी कारण से, आप नमूना द्वारा दिए गए माध्य-शून्य सामान्य वितरण के मानक विचलन (एसडी) का अनुमान लगाना चाहते हैं। यह चरणों के आसपास संख्यात्मक अनुकूलन चलाकर प्राप्त किया जा सकता है
निम्नलिखित कार्य यह करते हैं, एक बार चरण 1 के बिना, एक बार इसे सहित:
# without fixing the seed
simllh <- function(sd, y, Ns){
simdist <- density(rnorm(Ns, mean = 0, sd = sd))
llh <- sapply(y, function(x){ simdist$y[which.min((x - simdist$x)^2)] })
return(-sum(log(llh)))
}
# same function with fixed seed
simllh.fix.seed <- function(sd,y,Ns){
set.seed(48)
simdist <- density(rnorm(Ns,mean=0,sd=sd))
llh <- sapply(y,function(x){simdist$y[which.min((x-simdist$x)^2)]})
return(-sum(log(llh)))
}
हम एक छोटा मोंटे कार्लो अध्ययन के साथ वास्तविक पैरामीटर मान की खोज में दो कार्यों के सापेक्ष प्रदर्शन की जांच कर सकते हैं:
N <- 20; sd <- 2 # features of simulated data
est1 <- rep(NA,1000); est2 <- rep(NA,1000) # initialize the estimate stores
for (i in 1:1000) {
as.numeric(Sys.time())-> t; set.seed((t - floor(t)) * 1e8 -> seed) # set the seed to random seed
y <- rnorm(N, sd = sd) # generate the data
est1[i] <- optim(1, simllh, y = y, Ns = 1000, lower = 0.01)$par
est2[i] <- optim(1, simllh.fix.seed, y = y, Ns = 1000, lower = 0.01)$par
}
hist(est1)
hist(est2)
पैरामीटर अनुमानों के परिणामस्वरूप वितरण हैं:
जब हम बीज को ठीक करते हैं, तो संख्यात्मक खोज 2 गुना अधिक के वास्तविक पैरामीटर मान के करीब समाप्त होती है।
मूल रूप से set.seed () फ़ंक्शन यादृच्छिक चर के उसी सेट का पुन: उपयोग करने में मदद करेगा, जिसे हमें भविष्य में उसी यादृच्छिक चर के साथ फिर से विशेष कार्य का मूल्यांकन करने की आवश्यकता हो सकती है
हमें बस किसी भी यादृच्छिक संख्या उत्पन्न करने वाले फ़ंक्शन का उपयोग करने से पहले इसे घोषित करने की आवश्यकता है।