উত্তর:
প্রয়োজনটি হ'ল পুনরুত্পাদনযোগ্য ফলাফলগুলির সম্ভাব্য আকাঙ্ক্ষা, যা উদাহরণস্বরূপ আপনার প্রোগ্রামটি ডিবাগ করার চেষ্টা থেকে আসে বা অবশ্যই এটি যা করে তা পুনরায় করার চেষ্টা করে:
আমি কেবল "এলোমেলো" জন্য কিছু জিজ্ঞাসা করে এই দুটি ফলাফল আমরা "কখনই" প্রজনন করব না:
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>
সব কিছুর উপর রয়েছে বিশাল সাহিত্য; উইকিপিডিয়া একটি ভাল শুরু। সংক্ষেপে, এই আরএনজিগুলিকে সিউডো র্যান্ডম নম্বর জেনারেটর বলা হয় কারণ তারা বাস্তবে সম্পূর্ণ অ্যালগরিদমিক : একই বীজ প্রদত্ত, আপনি একই ক্রম পেয়েছেন। এবং এটি একটি বৈশিষ্ট্য এবং কোনও বাগ নয়।
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 দেয়, অদৃশ্য
(২) "প্রাথমিকভাবে, কোনও বীজ নেই; বর্তমান সময় থেকে একটি নতুন তৈরি করা হয় এবং যখন প্রয়োজন হয় তখন প্রক্রিয়া আইডি তৈরি করা হয় Hence তাই বিভিন্ন সেশন ডিফল্টরূপে বিভিন্ন সিমুলেশন ফলাফল দেয় However তবে, বীজটি একটি থেকে পুনরুদ্ধার করা যেতে পারে পূর্ববর্তী সেশন যদি পূর্বের সংরক্ষিত কর্মক্ষেত্রটি পুনরুদ্ধার করা হয়। ", এ কারণেই পরের বার আপনি এলোমেলো ক্রমের অনুরূপ ক্রমটি দেখতে চাইলে একই সংখ্যার মান সহ সেট.সীড () কল করতে চান।
আমরা যখন এলোমেলোভাবে উত্পন্ন সংখ্যার (যেমন সিমুলেশন ভিত্তিক অনুমান) জড়িত কোনও ক্রিয়াকে অনুকূলকরণের চেষ্টা করি তখন বীজ স্থিরকরণ জরুরি। আলগাভাবে বলতে গেলে, আমরা যদি বীজটি ঠিক না করি তবে বিভিন্ন এলোমেলো সংখ্যা আঁকার কারণে বিভিন্নতা অপ্টিমাইজেশন অ্যালগরিদমকে ব্যর্থ হতে পারে।
মনে করুন যে কোনও কারণে আপনি একটি নমুনা দিয়ে সিমুলেশন দ্বারা কোনও গড়-শূন্য সাধারণ বিতরণের মানক বিচ্যুতি (এসডি) অনুমান করতে চান। পদক্ষেপের চারপাশে সংখ্যাসূচক অপ্টিমাইজেশন চালিয়ে এটি অর্জন করা যায়
নীচের ফাংশনগুলি একবার এটি 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 () ফাংশন একই র্যান্ডম ভেরিয়েবলগুলির একই সেটটি পুনরায় ব্যবহার করতে সহায়তা করবে, যা আমাদের ভবিষ্যতে আবার একই র্যান্ডম ভেরিয়েবলগুলির সাথে আবার নির্দিষ্ট কার্যটি মূল্যায়নের প্রয়োজন হতে পারে help
আমাদের কেবল যেকোন এলোমেলো সংখ্যা জেনারেশন ফাংশন ব্যবহার করার আগে এটি ঘোষণা করতে হবে।