Rastgele Sayı Üretimi Üzerine

Beni tanıyan herkes olasılık konularını ve özellikle Gauss dağılımını çok sevdiğimi bilir. Bu sevgimi “Merkezi Limit Teoremi Mucizesi” başlıklı yazımda net olarak gösterdiğimi düşünüyorum. Bu yazıda aynı dağılıma sahip rastgele değişkenleri topladığımızda sonucun Gauss dağılımına yakınsadığını görmüştük. Dağılım ne olursa olsun! Yani herhangi bir dağılımı Gauss dağılımına dönüştürebiliyoruz. Peki istediğimiz dağılıma sahip bir işareti nasıl üretebiliriz? Bugün Muhammed Taha KÖROĞLU hocamın önerisi üzerine “inverse transform sampling” yöntemi ile istediğimiz PDF dağılımına sahip bir rastgele değişkeni nasıl üretebileceğimizi öğreneceğiz.

Öncelikle bu yazıda olasılık dağılımlarının önemi üzerine konuşmak istiyorum. Bu dağılımlar gerçek hayatı temsil etme konusunda oldukça işimize yaramaktadır. Örneğin daha önce elektronik sistemlerde oluşan gürültünün Gauss dağılımı ile temsil edildiğini söylemiştim. Bunun haricinde örneğin bir kişinin durakta dolmuş bekleme süresi üstel dağılım ile temsil edilebilmektedir. Örneğin belediye otobüslerinin sefer saatleri düzenlenirken bu tür bir model kullanılarak insanların durakta bekleme süresi ile toplu ulaşım maliyetini optimize eden bir çalışma gerçekleştirilebilir. Umarım belediyelerimiz bu tür incelemeler gerçekleştiriyordur.

Konumuza gelecek olursak. Tabii ki böyle bir inceleme gerçekleştirebilmemiz için öncelikle bu dağılıma sahip işaretleri simülasyon ortamında üretebilmemiz gerekmektedir. Bugün inceleyeceğimiz “inverse transform sampling” yöntemi aşağıda verilen 4 basit adımdan oluşmaktadır.

  • Olasılık yoğunluk fonksiyonundan (PDF) birikimli dağılım fonksiyonuna (CDF) geçiş yap.
  • CDF’in tersini al.
  • Uniform dağılımlı bir işaret üret.
  • CDF’in ters fonksiyonuna giriş olarak uniform dağılımlı işareti ver.

Ever bu basit adımlarla istediğimiz dağılıma sahip işareti üretebiliriz. Ancak gördüğünüz gibi MATLAB ortamına geçmeden önce PDF’den CDF’e geçme ve CDF’in tersini alma gibi işlemleri gerçekleştirmemiz gerekiyor. O zaman durak probleminde kullanabileceğimiz üstel dağılım işareti örneği üzerinden ilerleyelim. Yani üretmek istediğimiz PDF aşağıdaki gibidir.

PDF(x)=e^{-x}

Bu dağılımın CDF fonksiyonunu elde etmek için integralini almamız gerekiyor. Yani CDF ile PDF arasındaki ilişki aşağıdaki gibidir.

CDF(x)=\int_{-\infin}^x PDF(x')dx' 

Bu durumda üretmek istediğimiz üstel dağılımın sıfırdan başladığını düşünerek integral işlemini aşağıdaki gibi gerçekleştirebiliriz.

CDF(x)=\int_0^x e^{-x'}dx' \\
\;\;\;\;\;\;\;\;\;\; = [-e^{-x'}]_0^x \\
\;\;\;\;\;\;\;\;\; = 1-e^{-x}

Şimdi CDF’in tersini almadan önce beni akademik hayatım boyunca destekleyen İsmail abime selam söylemek istiyorum. 🙂

CDF^{-1}(x) = -ln(1-x)

Evet artık üstel dağılıma sahip bir işareti elde etmek için tek yapmamız gereken uniform dağılımlı bir işaret üretmek ve bu işareti elde ettiğimiz ters CDF’in girişine vermektir. Bunun için yazdığım MATLAB programı aşağıdaki gibidir.

clear; clc; close all;

x = 0:0.1:10; % X ekseni

PDF = exp(-x); % Hedeflenen PDF

% Uniform dağılımlı işaret üretimi
N = 100000;
uniRand = rand(1, N);

% invCDF kullanılarak üstel dağılımlı işaret üretimi
expRand = invCDF(uniRand);

% Görselleştirme
subplot(2, 1, 1);
histogram(uniRand, 'Normalization', 'pdf'); grid on;
ylim([0 1.5]);
legend('Uniform dağılımlı işaret')

subplot(2, 1, 2);
histogram(expRand, 'Normalization', 'pdf'); hold on;
plot(x, PDF, 'LineWidth', 2); grid on;
ylim([0 1.5]);
legend('Üretilen işaretin dağılımı', 'Hedeflenen PDF')

% CDF'in tersi
function x = invCDF(y)
% Bu fonksiyon üstel CDF'in ters fonksiyonudur
    x = -log(1-y);
end

Bu basit programımız sayesinde öncelikle “rand” fonksiyonu ile uniform dağılımlı bir işaret üretiyoruz. Daha sonra bu işareti “invCDF” fonksiyonuna vererek istediğimiz üstel dağılıma sahip işareti elde ediyoruz. Şimdi gerçekten istediğimiz şeyi üretip üretemediğimizi kontrol etmek için program çıktısına bakalım.

Şekil 1. Üretilen uniform işaret (üstte), inverse transform sampling yöntemi ile üretilen üstel dağılımlı işaret (altta)

Şekilde üretilen uniform dağılımlı işaret ve bu işaret kullanılarak “inverse transform sampling” yöntemi ile elde edilen üstel dağılımlı işaret görülmektedir. Sonuçlardan da açık bir şekilde görüldüğü gibi bu yöntem sayesinde hedeflediğimiz PDF ile uyumlu bir işaret elde etmiş olduk. Artık siz de farklı dağılımlara sahip işaretler üretmek istediğinizde ne yapacağınızı biliyorsunuz. 🙂

Evet kendi açımdan ilginç bulduğum bir yazının daha sonuna gelmiş bulunmaktayız. Bir sonraki yazıda görüşene kadar kendinize iyi bakın efendim.

“Rastgele Sayı Üretimi Üzerine” için 2 yanıt

    1. Yorumun için teşekkür ederim Lale. Burada olduğunu bilmek güzel. Düşündüğümüzde sıradan olarak nitelendirilebilecek uniform dağılımın birkaç adım ile herhangi bir dağılıma dönüşebilmesi ilginç gerçekten. Bu belki sıradan olduğunu zannettiğimiz hayatımızı doğru adımlar atarak istediğimiz şekilde değiştirebileceğimizi de gösteriyordur. Fazla kişisel gelişim kitaplarından çıkma bir yorum gibi gözüktü galiba ama istatistik yalan söylemez 😇

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir