ইউনিফর্ম র্যান্ডম ভেরিয়েবল ব্যবহার করে গাউসিয়ান র্যান্ডম ভেরিয়েবল কার্যকর করা


11

আমি এমন একটি সি ++ ফাংশন লেখার চেষ্টা করছি যা গাউসিয়ান এলোমেলো মানগুলি, তাদের উপায় এবং প্রকারভেদগুলি প্রদান করে ফিরে আসবে।

সেখানে একটি লাইব্রেরি ফাংশন rand(), যার মধ্যে র্যান্ডম সংখ্যা ফেরৎ 0এবং RAND_MAXRAND_MAXএকটি নির্দিষ্ট মান নেই তবে এটি গ্যারান্টিযুক্ত যে এটি কমপক্ষে । এর পিডিএফ অভিন্ন।2151

এটিকে rand()গাউসিয়ান ভেরিয়েবলে রূপান্তর করতে আমি কেন্দ্রীয় সীমাবদ্ধ তত্ত্বটি ব্যবহার করছি । আমি যা করছি তা হ'ল কোনও rand()নির্দিষ্ট সময় ব্যবহারকারীর জন্য কল করা, তারপরে তার মানগুলি যোগ করুন, তারপরে ব্যবহারকারীকে তার গড় গড় পরিবর্তন করুন।

গাউসিয়ান পিডিএফ
উপরের চক্রান্তে, আমি আমার গাউসিয়ান এলোমেলো জেনারেটরকে বার কল করেছিলাম এবং এর ফেরতের মূল্যের ফ্রিকোয়েন্সি প্লট করেছি। যেমন আপনি দেখতে পাচ্ছেন, এর বৈকল্পিকতা বিশাল, যেহেতু এটি প্রচুর অন্যান্য এলোমেলো মানগুলির যোগফল দ্বারা তৈরি করা হয়েছে।107

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

এটি আমার কোড (আপাতত অসম্পূর্ণ; প্যারামিটার "ভেরিয়েন্স" উপেক্ষা করা হবে):

template <class T>
T Random::GetGaussian(T Mean /*= 0*/, T Variance /*= 1*/)
{
    T MeanOfSum = NUM_GAUSSIAN_SUMS / static_cast<T>(2);
    T Rand = 0;
    for (uint64_t i=0; i<NUM_GAUSSIAN_SUMS; i++)
    {
        Rand += static_cast<T>(rand()) / RAND_MAX;
    }
    return Rand - (MeanOfSum - Mean);
}

ধরুন এটি NUM_GAUSSIAN_SUMS100, এবং RAND_MAX32767।

আমি ফাংশনের প্যারামিটার অনুসারে র্যান্ডম ভেরিয়েবলের বৈকল্পিক পরিবর্তন করতে চাই। আমার প্রশ্ন, আমি কীভাবে এই র্যান্ডম ভেরিয়েবলের বৈকল্পিক পরিবর্তন করতে পারি? আমি এটা কিভাবে করবো?


3
গাউসিয়ান এলোমেলো ভেরিয়েবলগুলি তৈরির জন্য কেন্দ্রীয় সীমাবদ্ধ উপপাদকের চেয়ে আরও ভাল এবং দ্রুততর উপায় রয়েছে। একটির জন্য বক্স-মুলার পদ্ধতি অনুসন্ধান করুন; একটি ziggurat পদ্ধতি আরও ভাল বলা হয়।
দিলিপ সরোতে


3
পুরানো দিনগুলিতে যখন মৃত্যুদন্ড কার্যকর করার সময়টি একটি গুরুত্বপূর্ণ বিবেচনা ছিল, লোকেরা এলোমেলো ভেরিয়েবল ( নয় ) যোগ করবে এবং স্ট্যান্ডার্ড এলোমেলো ভেরিয়েবলের সরল সান্নিধ্য পেতে বিয়োগ করবে এবং তারপরে স্কেল করবে একটি এলোমেলো পরিবর্তনশীল পেতে। (এটি কেন কাজ করে তার জন্য @ হিলমার এর উত্তর দেখুন)। অনেক অ্যাপ্লিকেশনগুলির জন্য এই সাধারণ পদ্ধতিটি খুব ভালভাবে কাজ করেছিল, তবে মানগুলি সীমাবদ্ধতার মধ্যে সীমাবদ্ধ ছিল এবং সিক্স-সিগমা যখন একটি ব্যসওয়ার্ড হয়ে উঠল তখন এই সরল ধারণাটি পথের পাশে ফেলে দেওয়া হয়েছিল। 12 ইউ(0,1)1006এন(0,1)ওয়াই=σএক্স+ +μএন(μ,σ2)(μ-6σ,μ+ +6σ)
দিলিপ সরোতে

@ দিলিপ সরওয়াতে সম্ভবত আপনার বিকল্পগুলির উত্তর হিসাবে এই বিকল্পটি পোস্ট করা উচিত কারণ আমরা কেন এটি পছন্দ করি
আইভো ফ্লিপস

@ আইভোফ্লিপস প্রশ্নের উত্তরে জিজ্ঞাসা করা হয়েছে "আমি গড় নির্ধারণ করার পরে আমি কীভাবে বৈকল্পিকতা ঠিক করব?" হিলমার দ্বারা গৃহীত উত্তর হ'ল মূলত যা মন্তব্য দ্বারা সংশোধিত হয়েছে: স্কেলিংয়ের মাধ্যমে বৈকল্পিকটি ঠিক করুন এবং তারপরে গড়টি পুনরায় ঠিক করুন, বা আরও ভাল, প্রথমে গড়টি ঠিক করে শুরু করবেন না কারণ আপনাকে পুনরায় সংশোধন করতে হবে এটি পরে; স্কেলিং করে প্রথমে ভেরিয়েন্সটি ঠিক করুন এবং তারপরে গড়টি ঠিক করুন। ওপি নির্দেশ দেয় না যে সে / সে আরও ভাল পদ্ধতিতে আগ্রহী এবং এমনকি নিবোটের লিঙ্কটিকেও বাড়িয়ে তুলেনি যা এমনকি বক্স-মুলার পদ্ধতির কোডও রয়েছে। সুতরাং আমি জিনিসগুলি যেমন আছে তেমন রেখে দেব।
দিলিপ সরোতে

উত্তর:


6

আপনার প্রাথমিক অ্যালগরিদম একটি এলোমেলো পরিবর্তনশীল তৈরি করে যা 0 থেকে 1 এর মধ্যে সমানভাবে বিতরণ করা হয় এর প্রকরণটি 1/12 হয়। আপনি যদি এর NUM_GAUSSIAN_SUMSউদাহরণগুলি যোগ করেন তবে তারতম্য হবে NUM_GAUSSIAN_SUMS/12। একটি লক্ষ্য বৈকল্পিকতা পেতে V, আপনি যোগফল র্যান্ডম ভেরিয়েবল এর সাথে গুণ করতে হবে sqrt(V*12/NUM_GAUSSIAN_SUMS)

পার্শ্ব নোট হিসাবে, একটি টেমপ্লেট ভাসমান এবং ডাবলদের জন্য যুক্তিসঙ্গত ভাল কাজ করবে তবে কোনও নির্দিষ্ট পয়েন্টের ধরণের ক্ষেত্রে উল্লেখযোগ্য সংখ্যাসূচক সমস্যা থাকবে।


5

আমি কীভাবে এই র্যান্ডম ভেরিয়েবলের বৈকল্পিক পরিবর্তন করতে পারি?

এক্সএক্স2এক্স


এক্সএক্স

1
কেন্দ্র, পুনরুদ্ধার , তারপরে গড়টি পুনরুদ্ধার করুন। একটি কেন্দ্রীভূত এলোমেলো ভেরিয়েবল স্কেলিং (শূন্য) মানে প্রভাবিত করবে না।
এমেরে

1

আরও একটি উপায় আছে!

ভেবে দেখুন, আপনি যদি গাউসের বিপরীতে অন্য কিছু বিতরণ চান? সেক্ষেত্রে আপনি প্রকৃতপক্ষে কেন্দ্রীয় সীমাবদ্ধ তত্ত্বটি ব্যবহার করতে পারবেন না; তাহলে কীভাবে সমাধান করবেন?

অভিন্ন র্যান্ডম ভেরিয়েবলকে সালিসী পিডিএফে রূপান্তর করার একটি উপায় রয়েছে। এই পদ্ধতিটিকে ইনভার্স ট্রান্সফর্ম পদ্ধতি বলা হয়

ইউ[0-1]

এক্স=এফএক্স-1(ইউ)

এফএক্স(এক্স)

সুতরাং, আপনাকে যা করতে হবে তা হ'ল ইউনিফর্ম আরভি'র নমুনা থেকে আপনি যে পরিবর্তনশীলটি পুনরুদ্ধার করেছেন তার বিপরীত সিডিএফ ফাংশনটি প্রয়োগ করুন।

এছাড়াও, পূর্ববর্তী পদ্ধতিগুলির বিপরীতে - এটির কোনও পুনরাবৃত্তির প্রয়োজন হবে না এবং গাউসির নিকটবর্তী ফলাফলগুলি তৈরি করতে কতগুলি পুনরাবৃত্তি নেওয়া হবে তার উপর নির্ভর করবে না।

এখানে একটি উল্লেখ রয়েছে যা এর প্রমাণ দেয়।


3
> আর একটি উপায় আছে! সত্য, তবে বিবেচনাধীন প্রশ্নের সাথে অপ্রাসঙ্গিক যা গাউসিয়ান র্যান্ডম ভেরিয়েবল সম্পর্কে বিশেষত। সীমাবদ্ধ সংখ্যক অপারেশন ব্যবহার করে গৌসিয়ান সিডিএফ বা এর বিপরীত উভয়ই প্রাথমিক পদে প্রকাশ করা যায় না এবং তাই প্রস্তাবিত পদ্ধতিটি ব্যবহার করা যায় না।
দিলিপ সরোতে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.