Set.seed ফাংশনটি ব্যবহারের কারণ


184

set.seedপ্রোগ্রামটি শুরু করার আগে আমি অনেকবার আর-তে ফাংশনটি দেখেছি । আমি জানি এটি মূলত এলোমেলো সংখ্যা জেনারেশনের জন্য ব্যবহৃত হয়। এটি সেট করার কোনও নির্দিষ্ট প্রয়োজন আছে কি?


2
এটি এর উত্তর দেবে: stattrek.com/statistics/random-number-generator.aspx
duffymo

উত্তর:


264

প্রয়োজনটি হ'ল পুনরুত্পাদনযোগ্য ফলাফলগুলির সম্ভাব্য আকাঙ্ক্ষা, যা উদাহরণস্বরূপ আপনার প্রোগ্রামটি ডিবাগ করার চেষ্টা থেকে আসে বা অবশ্যই এটি যা করে তা পুনরায় করার চেষ্টা করে:

আমি কেবল "এলোমেলো" জন্য কিছু জিজ্ঞাসা করে এই দুটি ফলাফল আমরা "কখনই" প্রজনন করব না:

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> 

সব কিছুর উপর রয়েছে বিশাল সাহিত্য; উইকিপিডিয়া একটি ভাল শুরু। সংক্ষেপে, এই আরএনজিগুলিকে সিউডো র্যান্ডম নম্বর জেনারেটর বলা হয় কারণ তারা বাস্তবে সম্পূর্ণ অ্যালগরিদমিক : একই বীজ প্রদত্ত, আপনি একই ক্রম পেয়েছেন। এবং এটি একটি বৈশিষ্ট্য এবং কোনও বাগ নয়।


5
ধন্যবাদ ডার্ক, এরকম সুন্দর উদাহরণের জন্য..আমি এটি 99% দিয়ে সাফ করেছি, তবে এখনও প্রশ্ন আছে। ১. আপনার উত্তরে আপনি সেট.সিডকে ৪২ টি যুক্তি হিসাবে ব্যবহার করেছেন..এই মানটি নির্বাচনের জন্য কি কোনও সম্পর্কিত কারণ আছে?
Vignesh

43
শালীন মানের একটি সাধারণ আরএনজির জন্য, মানটি কিছু যায় আসে না। "42" একটি বিখ্যাত বইয়ের উল্লেখ; অন্যান্য ব্যক্তিরা তাদের জন্মদিন বা "123" বা "" 1 "ব্যবহার করেন।
ডিস্ক এডেলবুয়েটেল

7
char2seedTeachingDemos প্যাকেজের মধ্যে ফাংশন আপনি বীজ সেট (অথবা মধ্যে পাস একটি বীজ নির্বাচন করতে পারবেন set.seedএকটি অক্ষর স্ট্রিং উপর ভিত্তি করে)। উদাহরণস্বরূপ, আপনি শিক্ষার্থীদের বীজ হিসাবে তাদের নামটি ব্যবহার করতে পারেন তবে প্রতিটি শিক্ষার্থীর একটি অনন্য ডেটাसेट রয়েছে তবে প্রশিক্ষকও গ্রেডিংয়ের জন্য একই ডেটাসেট তৈরি করতে পারেন।
গ্রেগ তুষার

8
আপনি "সেরা" ফলাফল না পাওয়া পর্যন্ত বিভিন্ন কোডের বীজের সাথে একই কোডটি পুনরায় চালু করা সম্ভব (উদাহরণ হিসাবে আমি এটি করেছি)। এটি করার অভিযোগ থেকে রক্ষা পাওয়ার জন্য এমন একটি বীজ বেছে নেওয়া ভাল যার কিছু স্পষ্ট অর্থ হয়, হয় সর্বদা একই বীজ, বা তারিখ, অথবা আমি ব্যবহার করি char2seedএবং কোনও প্রকল্পের নীতি তদন্তকারী এর শেষ নাম।
গ্রেগ তুষার

5
@ ডির্কএডডেলবেটেল বীজের মূল্য অ- গণনাগত কারণে বোধগম্য হতে পারে, আমার এক বন্ধু তার সিমুলেশন-ভিত্তিক ফলাফল প্রকাশে সমস্যা ছিল কারণ কোডটি শুরু হয়েছিল set.seed(666)এবং পর্যালোচক কোডটিতে ডেভিলস বীজ পছন্দ করেন না ...
টিম

33

প্রতিবার আপনি পুনরুত্পাদনযোগ্য এলোমেলো ফলাফল পেতে চাইলে আপনাকে বীজ সেট করতে হবে।

set.seed(1)
rnorm(4)
set.seed(1)
rnorm(4)

17

কিছু সংযোজন দিক যুক্ত করা হচ্ছে। বীজ স্থাপনের প্রয়োজন: একাডেমিক বিশ্বে যদি কেউ দাবি করে যে তার অ্যালগরিদম অর্জন করেছে, বলুন একটি সিমুলেশনে 98.05% পারফরম্যান্স, অন্যদের এটি পুনরুত্পাদন করতে সক্ষম হওয়া প্রয়োজন।

?set.seed

এই ফাংশনটির সহায়তা ফাইলের মধ্যে দিয়ে যাওয়া, এটি কয়েকটি আকর্ষণীয় তথ্য:

(1) set.seed () NULL দেয়, অদৃশ্য

(২) "প্রাথমিকভাবে, কোনও বীজ নেই; বর্তমান সময় থেকে একটি নতুন তৈরি করা হয় এবং যখন প্রয়োজন হয় তখন প্রক্রিয়া আইডি তৈরি করা হয় Hence তাই বিভিন্ন সেশন ডিফল্টরূপে বিভিন্ন সিমুলেশন ফলাফল দেয় However তবে, বীজটি একটি থেকে পুনরুদ্ধার করা যেতে পারে পূর্ববর্তী সেশন যদি পূর্বের সংরক্ষিত কর্মক্ষেত্রটি পুনরুদ্ধার করা হয়। ", এ কারণেই পরের বার আপনি এলোমেলো ক্রমের অনুরূপ ক্রমটি দেখতে চাইলে একই সংখ্যার মান সহ সেট.সীড () কল করতে চান।


7

আমরা যখন এলোমেলোভাবে উত্পন্ন সংখ্যার (যেমন সিমুলেশন ভিত্তিক অনুমান) জড়িত কোনও ক্রিয়াকে অনুকূলকরণের চেষ্টা করি তখন বীজ স্থিরকরণ জরুরি। আলগাভাবে বলতে গেলে, আমরা যদি বীজটি ঠিক না করি তবে বিভিন্ন এলোমেলো সংখ্যা আঁকার কারণে বিভিন্নতা অপ্টিমাইজেশন অ্যালগরিদমকে ব্যর্থ হতে পারে।

মনে করুন যে কোনও কারণে আপনি একটি নমুনা দিয়ে সিমুলেশন দ্বারা কোনও গড়-শূন্য সাধারণ বিতরণের মানক বিচ্যুতি (এসডি) অনুমান করতে চান। পদক্ষেপের চারপাশে সংখ্যাসূচক অপ্টিমাইজেশন চালিয়ে এটি অর্জন করা যায়

  1. (বীজ নির্ধারণ)
  2. এসডির জন্য একটি মান দেওয়া হয়েছে, সাধারণত বিতরণ করা ডেটা তৈরি করে
  3. সিমুলেটেড বিতরণগুলি দিয়ে আপনার ডেটার সম্ভাবনা মূল্যায়ন করুন

নীচের ফাংশনগুলি একবার এটি 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)

প্যারামিটার অনুমানের ফলাফল বিতরণগুলি হ'ল:

বীজ ঠিক না করেই প্যারামিটারের হিসাবের হিসাবগ্রাম og প্যারামিটারের হিস্টোগ্রাম বীজ সংশোধন করে tes

যখন আমরা বীজ স্থির করি, সংখ্যাগত অনুসন্ধানটি প্রায় 2 বারের সত্যিকারের প্যারামিটার মানের কাছাকাছি শেষ হয়।


6

মূলত set.seed () ফাংশন একই র্যান্ডম ভেরিয়েবলগুলির একই সেটটি পুনরায় ব্যবহার করতে সহায়তা করবে, যা আমাদের ভবিষ্যতে আবার একই র্যান্ডম ভেরিয়েবলগুলির সাথে আবার নির্দিষ্ট কার্যটি মূল্যায়নের প্রয়োজন হতে পারে help

আমাদের কেবল যেকোন এলোমেলো সংখ্যা জেনারেশন ফাংশন ব্যবহার করার আগে এটি ঘোষণা করতে হবে।


উত্তরটি বিস্তারিতভাবে বর্ণনা করুন
স্প্রে টেকিজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.