কীভাবে দক্ষতার সাথে অন্তরগুলিতে অভিন্ন বিতরণ করা মানগুলি তৈরি করা যায়?


12

ধরা যাক আমি বিরতি থেকে র্যান্ডম সংখ্যার একটি সেট তৈরি করতে চাই (a, b)। উত্পন্ন সিকোয়েন্সেও এটির ক্রমযুক্ত সম্পত্তি থাকা উচিত। আমি এটি অর্জনের দুটি উপায় সম্পর্কে ভাবতে পারি।

দিন nহতে ক্রম দৈর্ঘ্য উত্পন্ন করা হবে।

1 ম অ্যালগরিদম:

Let `offset = floor((b - a) / n)`
for i = 1 up to n:
   generate a random number r_i from (a, a+offset)
   a = a + offset
   add r_i to the sequence r

২ য় অ্যালগরিদম:

for i = 1 up to n:
    generate a random number s_i from (a, b)
    add s_i to the sequence s
sort(r)

আমার প্রশ্নটি হল, অ্যালগরিদম 1 কি এমন সিক্যুয়েন্স তৈরি করে যা অ্যালগরিদম 2 দ্বারা উত্পন্ন উত্সগুলির মতো ভাল?


বিটিডাব্লু এটির মধ্যে বাছাই করা এলোমেলো সংখ্যার একটি তালিকা তৈরি করা উল্লেখযোগ্যভাবে সহজ R। আদেশের একটি অ্যারের উৎপন্ন করার জন্য সেট এন একটি অভিন্ন ব্যবধান ধরে র্যান্ডম সংখ্যা [ একটি , ] , নিম্নলিখিত কোড কাজ করে: । এন[একটি,]rand_array <- replicate(k, sort(runif(n, a, b))
রবার্টএফ

উত্তর:


18

প্রথম অ্যালগরিদম দুটি কারণে খারাপভাবে ব্যর্থ হয় :

  1. এর তল নেওয়া এটি মারাত্মকভাবে হ্রাস করতে পারে। প্রকৃতপক্ষে, যখন - < এন , এটি শূন্য হবে, আপনাকে এমন একটি সেট দেবে যার মানগুলি একই রকম!(একটি-)/এন-একটি<এন

  2. যখন আপনি মেঝে না নেন, ফলস্বরূপ মানগুলি সমানভাবে বিতরণ করা হয়। উদাহরণস্বরূপ, কোন সহজ র্যান্ডম নমুনা মধ্যে IID অভিন্ন variates (মধ্যে বলে একটি = 0 এবং = 1 , আছে ক) ( 1 - 1 / এন ) এন1 /37 % সম্ভাবনা যে বৃহত্তম হবে না থেকে উপরের ব্যবধান 1 - 1 / এন করতে 1 । অ্যালগরিদম 1 এর সাথে 100 % রয়েছেএনএকটি=0=1(1-1/এন)এন1/37%1-1/এন1100%সর্বাধিক যে ব্যবধানে হবে সুযোগ। কিছু উদ্দেশ্যে এই অতি-অভিন্নতা ভাল তবে সাধারণভাবে এটি একটি ভয়াবহ ত্রুটি কারণ (ক) অনেক পরিসংখ্যান নষ্ট হবে তবে (খ) এটি নির্ধারণ করা খুব কঠিন হতে পারে।

  3. আপনি যদি বাছাই এড়াতে চান, পরিবর্তে স্বতন্ত্র তাত্পর্যপূর্ণ-বিতরণ বৈকল্পিক উত্পন্ন করুন । যোগফলের যোগফলের মাধ্যমে তাদের যোগফলের যোগফলকে পরিসীমা ( 0 , 1 ) এ সাধারণ করুন । বৃহত্তম মানটি ফেলে দিন (যা সর্বদা 1 হবে )। পরিসরে পুনরায় বিক্রয় ( , )এন+ +1(0,1)1(একটি,)

তিনটি অ্যালগরিদমের হিস্টোগ্রামগুলি দেখানো হয়েছে। (প্রতিটি প্রতিটি এন = 100 মানগুলির স্বতন্ত্র সেটগুলির সংশ্লেষিত ফলাফলগুলি চিত্রিত করে )) অ্যালগরিদম 1 এর জন্য হিস্টোগ্রামে কোনও দৃশ্যমান প্রকরণের অভাব সেখানে সমস্যাটি দেখায়। অন্যান্য দুটি অ্যালগরিদমের ভিন্নতা হ'ল প্রত্যাশা করা ঠিক - এবং এলোমেলো সংখ্যা জেনারেটর থেকে আপনার কী প্রয়োজন1000এন=100

আরো অনেক জন্য (ক্রীড়া-কৌতুক) উপায়ে স্বাধীন অভিন্ন variates অনুকরণ দেখুন simulating একটি অভিন্ন বিতরণ একটি সাধারণ বিন্যাসের থেকে স্বপক্ষে ব্যবহার থেকে স্বপক্ষে

চিত্র: হিস্টোগ্রাম

এই Rকোডটি এখানে চিত্রটি তৈরি করেছে।

b <- 1
a <- 0
n <- 100
n.iter <- 1e3

offset <- (b-a)/n
as <- seq(a, by=offset, length.out=n)
sim.1 <- matrix(runif(n.iter*n, as, as+offset), nrow=n)
sim.2 <- apply(matrix(runif(n.iter*n, a, b), nrow=n), 2, sort)
sim.3 <- apply(matrix(rexp(n.iter*(n+1)), nrow=n+1), 2, function(x) {
  a + (b-a) * cumsum(x)[-(n+1)] / sum(x)
})

par(mfrow=c(1,3))
hist(sim.1, main="Algorithm 1")
hist(sim.2, main="Algorithm 2")
hist(sim.3, main="Exponential")

আমার উত্তরে আপনি অ্যালগরিদম (র‌্যাঙ্ক অর্ডার পরিসংখ্যানের ভিত্তিতে) সম্পর্কে কী ভাবেন? ;-)
কিট আছে - অ্যানি-মৌসে

@ অ্যাননি এটি আমার অ্যালগরিদম ৩-এর একটি কম দক্ষ সংস্করণ (
whuber

6

প্রথম অ্যালগরিদম পণ্য খুব সমানভাবে ব্যবধানযুক্ত সংখ্যা

আরও দেখুন কম অমিল সিরিজ

[0;1]

(আস নির্দিষ্ট, এই স্তরবিন্যাস জন্য পছন্দসই সম্পত্তি যেমন হতে পারে। Halton স্বাগতম এবং সোবেল মত কম-অমিল সিরিজ না তাদের ব্যবহারের ক্ষেত্রে রয়েছে।)

একটি সঠিক কিন্তু ব্যয়বহুল পদ্ধতির (বাস্তব মূল্যবোধের জন্য)

... বিটা-বিতরিত এলোমেলো সংখ্যা ব্যবহার করা। ইউনিফর্ম বিতরণের র‌্যাঙ্ক অর্ডার পরিসংখ্যান বিটা বিতরণ করা হয়। আপনি এটিকে এলোমেলোভাবে সবচেয়ে ছোট আঁকতে ব্যবহার করতে পারেন , তারপরে দ্বিতীয় বৃহত্তম, ... পুনরাবৃত্তি করুন।

[0;1]বিটা[1,এন]এন1-এক্স~বিটা[এন,1]-Ln(1-এক্স)~ব্যাখ্যামূলক[এন]-Ln(ইউ[0;1])এন

-Ln(1-এক্স)=-Ln(1-তোমার দর্শন লগ করা)এন1-এক্স=তোমার দর্শন লগ করা1এনএক্স=1-তোমার দর্শন লগ করা1এন

যা নিম্নলিখিত অ্যালগরিদম দেয়:

x = a
for i in range(n, 0, -1):
    x += (b-x) * (1 - pow(rand(), 1. / i))
    result.append(x) 

জড়িত থাকতে পারে সংখ্যাগত অস্থিরতা, এবং কম্পিউটিং powএবং প্রতিটি বস্তুর একটি বিভাগ বাছাইয়ের চেয়ে ধীর হতে পারে।

পূর্ণসংখ্যার মানগুলির জন্য আপনার আলাদা ডিস্ট্রিবিউশন ব্যবহার করতে হতে পারে।

বাছাই অবিশ্বাস্যভাবে সস্তা, তাই এটি ব্যবহার করুন

হে(এনলগএন)


1
বাছাই এড়ানোর কারণ থাকতে পারে। একটি যখন আপনি বিপুল সংখ্যক এলোমেলো বৈচিত্র উত্পন্ন করতে চান, তখন একটি মানক সাজানোর রুটিন এগুলি পরিচালনা করতে পারে না।
whuber

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

1012

ঠিক আছে, সেগুলি সংরক্ষণ না করা একটি যুক্তি। তবে তারপরে আপনার আমার পদ্ধতির দরকার হবে, আপনার বৈকল্পিক 3 টি যোগফলের যোগফল ব্যবহার করে কাজ করবে না।
কিউইট আছে - অ্যানি-মৌসেস

এটা একটা চমৎকার বিন্দু। এখন দেখছি অতিরিক্ত হিসাব করার পুণ্য! (+1)
শুক্র

5

এটি এলোমেলো সংখ্যার সাথে আপনি কী করছেন তার উপরও নির্ভর করে। সংখ্যাগত ইন্টিগ্রেশন সমস্যা পদ্ধতির জন্য এক (মেঝে অপারেটর অপসারণের মাধ্যমে সংশোধন করা হলে) উচ্চতর পয়েন্ট সেট উত্পাদন করতে পারে। আপনি যা করছেন তা হ'ল একজাতীয় নমুনা তৈরির নমুনা এবং এতে সুবিধা রয়েছে যে এটি ক্লাম্পিং এড়ানো। উদাহরণস্বরূপ 0- (বা) / এন ব্যাপ্তিতে আপনার সমস্ত মান পাওয়া অসম্ভব। এটি অন্যান্য অ্যাপ্লিকেশনগুলির জন্য এটি খুব খারাপ হতে পারে বলেছিল, আপনি এটি দিয়ে কী করতে চান তা নির্ভর করে।


2
+1 আমি মনে করি এটি বিশেষত স্তরবিন্যাসের ক্ষেত্রে অ্যালগরিদম 1 এর বৈশিষ্ট্যযুক্ত করে এই প্রশ্নের একটি দরকারী অবদান।
হোয়াইট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.