.. _sec_distributions: Dağılımlar ========== Artık hem kesikli hem de sürekli ortamda olasılıkla nasıl çalışılacağını öğrendiğimize göre, şimdi karşılaşılan yaygın dağılımlardan bazılarını öğrenelim. Makine öğrenmesi alanına bağlı olarak, bunlardan çok daha fazlasına aşina olmamız gerekebilir; derin öğrenmenin bazı alanları için potansiyel olarak hiç kullanılmıyorlar. Ancak bu, aşina olunması gereken iyi bir temel listedir. Önce bazı ortak kütüphaneleri içeri aktaralım. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python %matplotlib inline from math import erf, factorial import numpy as np from IPython import display from d2l import mxnet as d2l .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python %matplotlib inline from math import erf, factorial import torch from IPython import display from d2l import torch as d2l torch.pi = torch.acos(torch.zeros(1)) * 2 # Pi'yi tanımla .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python %matplotlib inline from math import erf, factorial import tensorflow_probability as tfp from IPython import display import tensorflow as tf from d2l import tensorflow as d2l tf.pi = tf.acos(tf.zeros(1)) * 2 # Pi'yi tanımla .. raw:: html
.. raw:: html
Bernoulli --------- Bu, genellikle karşılaşılan en basit rastgele değişkendir. Bu rastgele değişken, :math:`p` olasılıkla :math:`1` ve :math:`1-p` olasılıkla :math:`0` gelen bir yazı tura atmayı kodlar. Bu dağılımla rastgele bir değişkenimiz :math:`X` varsa, şunu yazacağız: .. math:: X \sim \mathrm{Bernoulli}(p). Birikimli dağılım fonksiyonu şöyledir: .. math:: F(x) = \begin{cases} 0 & x < 0, \\ 1-p & 0 \le x < 1, \\ 1 & x >= 1 . \end{cases} :label: eq_bernoulli_cdf Olasılık kütle fonksiyonu aşağıda çizilmiştir. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python p = 0.3 d2l.set_figsize() d2l.plt.stem([0, 1], [1 - p, p], use_line_collection=True) d2l.plt.xlabel('x') d2l.plt.ylabel('p.m.f.') d2l.plt.show() .. figure:: output_distributions_c7d568_15_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python p = 0.3 d2l.set_figsize() d2l.plt.stem([0, 1], [1 - p, p], use_line_collection=True) d2l.plt.xlabel('x') d2l.plt.ylabel('p.m.f.') d2l.plt.show() .. figure:: output_distributions_c7d568_18_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python p = 0.3 d2l.set_figsize() d2l.plt.stem([0, 1], [1 - p, p], use_line_collection=True) d2l.plt.xlabel('x') d2l.plt.ylabel('p.m.f.') d2l.plt.show() .. figure:: output_distributions_c7d568_21_0.svg .. raw:: html
.. raw:: html
Şimdi, :eq:`eq_bernoulli_cdf` birikimli dağılım fonksiyonunu çizelim. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python x = np.arange(-1, 2, 0.01) def F(x): return 0 if x < 0 else 1 if x > 1 else 1 - p d2l.plot(x, np.array([F(y) for y in x]), 'x', 'c.d.f.') .. figure:: output_distributions_c7d568_27_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python x = torch.arange(-1, 2, 0.01) def F(x): return 0 if x < 0 else 1 if x > 1 else 1 - p d2l.plot(x, torch.tensor([F(y) for y in x]), 'x', 'c.d.f.') .. figure:: output_distributions_c7d568_30_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python x = tf.range(-1, 2, 0.01) def F(x): return 0 if x < 0 else 1 if x > 1 else 1 - p d2l.plot(x, tf.constant([F(y) for y in x]), 'x', 'c.d.f.') .. figure:: output_distributions_c7d568_33_0.svg .. raw:: html
.. raw:: html
Eğer :math:`X \sim \mathrm{Bernoulli}(p)` ise, o zaman: - :math:`\mu_X = p`, - :math:`\sigma_X^2 = p(1-p)`. Bir Bernoulli rastgele değişkeninden keyfi şekilli bir diziyi aşağıdaki gibi örnekleyebiliriz. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python 1*(np.random.rand(10, 10) < p) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output array([[0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [1, 0, 0, 0, 1, 0, 0, 1, 0, 1], [1, 0, 0, 1, 0, 1, 0, 0, 1, 0], [1, 0, 0, 1, 0, 1, 0, 1, 1, 0], [0, 0, 0, 1, 0, 0, 1, 0, 1, 0], [1, 0, 0, 1, 0, 1, 0, 1, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 1, 0], [1, 1, 0, 1, 1, 1, 1, 0, 1, 0], [0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 1, 1, 0, 1, 0, 0, 0, 0, 0]]) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python 1*(torch.rand(10, 10) < p) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output tensor([[0, 0, 0, 0, 0, 1, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 1, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 1, 1, 0], [1, 1, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 1, 0, 1, 0, 1, 1, 0], [0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [1, 0, 1, 1, 1, 1, 1, 1, 0, 0]]) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python tf.cast(tf.random.uniform((10, 10)) < p, dtype=tf.float32) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output .. raw:: html
.. raw:: html
Ayrık Tekdüze Dağılım --------------------- Bir sonraki yaygın karşılaşılan rastgele değişken, ayrık bir tekdüzedir. Buradaki tartışmamız için, :math:`\{1, 2, \ldots, n\}` tam sayılarında desteklendiğini varsayacağız, ancak herhangi bir tüm değerler kümesi serbestçe seçilebilir. Bu bağlamda *tekdüze* kelimesinin anlamı, olabilir her değerin eşit derecede olası olmasıdır. :math:`i \in \{1, 2, 3, \ldots, n\}` değerinin olasılığı :math:`p_i = \frac{1}{n}`'dir. Bu dağılımla :math:`X` rastgele değişkenini şu şekilde göstereceğiz: .. math:: X \sim U(n). Birikimli dağılım fonksiyonunu böyledir: .. math:: F(x) = \begin{cases} 0 & x < 1, \\ \frac{k}{n} & k \le x < k+1 \text{ öyleki } 1 \le k < n, \\ 1 & x >= n . \end{cases} :label: eq_discrete_uniform_cdf İlk olarak olasılık kütle fonksiyonunu çizelim. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python n = 5 d2l.plt.stem([i+1 for i in range(n)], n*[1 / n], use_line_collection=True) d2l.plt.xlabel('x') d2l.plt.ylabel('p.m.f.') d2l.plt.show() .. figure:: output_distributions_c7d568_51_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python n = 5 d2l.plt.stem([i+1 for i in range(n)], n*[1 / n], use_line_collection=True) d2l.plt.xlabel('x') d2l.plt.ylabel('p.m.f.') d2l.plt.show() .. figure:: output_distributions_c7d568_54_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python n = 5 d2l.plt.stem([i+1 for i in range(n)], n*[1 / n], use_line_collection=True) d2l.plt.xlabel('x') d2l.plt.ylabel('p.m.f.') d2l.plt.show() .. figure:: output_distributions_c7d568_57_0.svg .. raw:: html
.. raw:: html
Şimdi, :eq:`eq_discrete_uniform_cdf` birikimli dağılım fonksiyonunu çizelim. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python x = np.arange(-1, 6, 0.01) def F(x): return 0 if x < 1 else 1 if x > n else np.floor(x) / n d2l.plot(x, np.array([F(y) for y in x]), 'x', 'c.d.f.') .. figure:: output_distributions_c7d568_63_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python x = torch.arange(-1, 6, 0.01) def F(x): return 0 if x < 1 else 1 if x > n else torch.floor(x) / n d2l.plot(x, torch.tensor([F(y) for y in x]), 'x', 'c.d.f.') .. figure:: output_distributions_c7d568_66_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python x = tf.range(-1, 6, 0.01) def F(x): return 0 if x < 1 else 1 if x > n else tf.floor(x) / n d2l.plot(x, [F(y) for y in x], 'x', 'c.d.f.') .. figure:: output_distributions_c7d568_69_0.svg .. raw:: html
.. raw:: html
Eğer :math:`X \sim U(n)` ise, o zaman: - :math:`\mu_X = \frac{1+n}{2}`, - :math:`\sigma_X^2 = \frac{n^2-1}{12}`. Aşağıdaki gibi, ayrık bir tekdüze rastgele değişkenden keyfi şekilli bir diziyi örnekleyebiliriz. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python np.random.randint(1, n, size=(10, 10)) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output array([[3, 4, 4, 3, 4, 1, 1, 4, 4, 4], [2, 3, 2, 1, 4, 1, 4, 2, 3, 2], [2, 2, 2, 4, 2, 1, 3, 4, 2, 2], [4, 2, 4, 3, 4, 2, 1, 1, 1, 3], [1, 1, 3, 3, 2, 3, 3, 4, 4, 1], [1, 4, 2, 3, 1, 3, 3, 4, 3, 3], [4, 1, 1, 2, 2, 2, 2, 3, 2, 2], [3, 2, 1, 1, 1, 1, 1, 3, 1, 2], [3, 1, 4, 2, 3, 4, 2, 1, 2, 1], [1, 1, 1, 1, 4, 1, 4, 1, 4, 1]]) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python torch.randint(1, n, size=(10, 10)) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output tensor([[3, 3, 4, 1, 3, 3, 3, 1, 1, 4], [2, 3, 4, 4, 4, 2, 2, 4, 4, 3], [4, 1, 3, 2, 3, 4, 4, 2, 3, 1], [1, 1, 2, 4, 2, 2, 3, 3, 3, 2], [2, 1, 3, 2, 4, 1, 2, 3, 4, 1], [3, 2, 4, 1, 3, 2, 4, 4, 4, 1], [2, 4, 1, 2, 3, 4, 4, 2, 3, 3], [3, 1, 4, 3, 4, 2, 3, 3, 1, 1], [3, 3, 1, 4, 1, 1, 2, 2, 4, 2], [1, 4, 3, 4, 1, 4, 1, 2, 2, 2]]) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python tf.random.uniform((10, 10), 1, n, dtype=tf.int32) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output .. raw:: html
.. raw:: html
Sürekli Tekdüze Dağılım ----------------------- Şimdi, sürekli tekdüze dağılımı tartışalım. Bu rastgele değişkenin arkasındaki fikir şudur: Ayrık tekdüze dağılımdaki :math:`n`'yi arttırırsak ve bunu :math:`[a, b]` aralığına sığacak şekilde ölçeklendirirsek; sadece :math:`[a, b]` aralığında, hepsi eşit olasılıkla, keyfi bir değer seçen sürekli bir rastgele değişkene yaklaşacağız. Bu dağılımı şu şekilde göstereceğiz .. math:: X \sim U(a, b). Olasılık yoğunluk fonksiyonu şöyledir: .. math:: p(x) = \begin{cases} \frac{1}{b-a} & x \in [a, b], \\ 0 & x \not\in [a, b].\end{cases} :label: eq_cont_uniform_pdf Birikimli dağılım fonksiyonunu şöyledir: .. math:: F(x) = \begin{cases} 0 & x < a, \\ \frac{x-a}{b-a} & x \in [a, b], \\ 1 & x >= b . \end{cases} :label: eq_cont_uniform_cdf Önce, :eq:`eq_cont_uniform_pdf` olasılık yoğunluk dağılımı fonksiyonunu çizelim. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python a, b = 1, 3 x = np.arange(0, 4, 0.01) p = (x > a)*(x < b)/(b - a) d2l.plot(x, p, 'x', 'p.d.f.') .. figure:: output_distributions_c7d568_87_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python a, b = 1, 3 x = torch.arange(0, 4, 0.01) p = (x > a).type(torch.float32)*(x < b).type(torch.float32)/(b-a) d2l.plot(x, p, 'x', 'p.d.f.') .. figure:: output_distributions_c7d568_90_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python a, b = 1, 3 x = tf.range(0, 4, 0.01) p = tf.cast(x > a, tf.float32) * tf.cast(x < b, tf.float32) / (b - a) d2l.plot(x, p, 'x', 'p.d.f.') .. figure:: output_distributions_c7d568_93_0.svg .. raw:: html
.. raw:: html
Şimdi, :eq:`eq_cont_uniform_cdf` birikimli dağılım fonksiyonunu çizelim. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python def F(x): return 0 if x < a else 1 if x > b else (x - a) / (b - a) d2l.plot(x, np.array([F(y) for y in x]), 'x', 'c.d.f.') .. figure:: output_distributions_c7d568_99_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python def F(x): return 0 if x < a else 1 if x > b else (x - a) / (b - a) d2l.plot(x, torch.tensor([F(y) for y in x]), 'x', 'c.d.f.') .. figure:: output_distributions_c7d568_102_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python def F(x): return 0 if x < a else 1 if x > b else (x - a) / (b - a) d2l.plot(x, [F(y) for y in x], 'x', 'c.d.f.') .. figure:: output_distributions_c7d568_105_0.svg .. raw:: html
.. raw:: html
Eğer :math:`X \sim U(a, b)` ise, o zaman: - :math:`\mu_X = \frac{a+b}{2}`, - :math:`\sigma_X^2 = \frac{(b-a)^2}{12}`. Aşağıdaki gibi tekdüze bir rastgele değişkenden keyfi şekilli bir diziyi örnekleyebiliriz. Bunun :math:`U(0,1)`'den varsayılan örnekler olduğuna dikkat edin, bu nedenle farklı bir aralık istiyorsak, onu ölçeklendirmemiz gerekir. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python (b - a) * np.random.rand(10, 10) + a .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output array([[2.17766796, 1.39469485, 2.93455796, 1.8779241 , 1.30840836, 1.06882816, 1.47197809, 2.03675056, 1.50780013, 1.20588641], [1.50036727, 1.39439698, 2.38329638, 1.94309359, 1.79208755, 1.93082763, 2.73453806, 1.44756989, 2.07961099, 1.91522899], [2.61350727, 2.70260394, 2.39932579, 2.16275342, 2.32474686, 2.78458549, 2.76342795, 1.8259505 , 1.31644151, 2.7645016 ], [1.29514887, 2.47289687, 2.12416721, 1.32710263, 1.33442597, 1.70694675, 1.43462558, 2.33240379, 1.24688185, 2.96622719], [1.99544954, 2.79023331, 2.56036021, 2.55721164, 2.84973771, 2.47305676, 2.52720283, 2.98060319, 1.33609282, 2.46047838], [1.26261953, 1.82515681, 2.1259347 , 1.9779912 , 1.60845279, 2.0224747 , 1.881794 , 1.34131435, 1.96435655, 2.98458048], [2.2213498 , 2.52619612, 2.37714171, 1.42174824, 2.15384272, 1.48567579, 2.10700055, 1.34534182, 2.56973811, 2.18855823], [1.04166475, 1.71555409, 1.63983218, 1.61413272, 1.91756454, 2.25091534, 1.25095399, 2.73744042, 2.30368341, 1.70348 ], [1.74787387, 2.77674527, 1.34678388, 2.25835753, 2.1591301 , 2.33653217, 2.4834643 , 2.29601036, 2.39732099, 1.26270009], [1.5714503 , 2.91274818, 2.61066899, 1.94058447, 1.83149658, 1.69963014, 1.62113318, 2.83457987, 1.12411982, 2.88143637]]) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python (b - a) * torch.rand(10, 10) + a .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output tensor([[2.4319, 2.3027, 2.5008, 1.0314, 2.4978, 2.2231, 2.7293, 2.7454, 1.9746, 2.9582], [2.6556, 2.6539, 1.9899, 2.1583, 1.6333, 1.4400, 1.4093, 1.8292, 1.8658, 2.6306], [2.7257, 1.8550, 2.9031, 2.6528, 1.5819, 2.8775, 1.1190, 2.8663, 2.3309, 2.3822], [2.7110, 1.7304, 2.2318, 2.1238, 1.1947, 2.8726, 1.4815, 2.0132, 2.3229, 1.1324], [2.0713, 2.1257, 2.0809, 1.9627, 2.3050, 1.8019, 2.0731, 1.3395, 1.7201, 2.6306], [2.6130, 1.2258, 2.8866, 2.6555, 2.5732, 1.1039, 1.9652, 2.1065, 1.3629, 1.1522], [1.2170, 2.9644, 2.8276, 1.4999, 2.6880, 2.9844, 2.7410, 1.1381, 2.3237, 2.5571], [2.6271, 1.8841, 2.8675, 2.8451, 2.7440, 1.3168, 2.3813, 1.4330, 1.7728, 2.1355], [2.6843, 2.6480, 2.6468, 2.9452, 1.8513, 2.2427, 1.6430, 1.1144, 1.2585, 1.2484], [2.2447, 1.8161, 2.6843, 2.2231, 1.2743, 2.0706, 2.1140, 2.7791, 1.0218, 1.1806]]) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python (b - a) * tf.random.uniform((10, 10)) + a .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output .. raw:: html
.. raw:: html
Binom (İki Terimli) Dağılım --------------------------- İşleri biraz daha karmaşık hale getirelim ve *iki terimli (binom)* rastgele değişkeni inceleyelim. Bu rastgele değişken, her birinin başarılı olma olasılığı :math:`p` olan :math:`n` bağımsız deneyler dizisi gerçekleştirmekten ve kaç tane başarı görmeyi beklediğimizi sormaktan kaynaklanır. Bunu matematiksel olarak ifade edelim. Her deney, başarıyı kodlamak için :math:`1` ve başarısızlığı kodlamak için :math:`0` kullanacağımız bağımsız bir rastgele değişken :math:`X_i`'dir. Her biri :math:`p` olasılığı ile başarılı olan bağımsız bir yazı tura olduğu için, :math:`X_i \sim \mathrm{Bernoulli}(p)` diyebiliriz. Sonra, iki terimli rastgele değişken aşağıdaki gibidir: .. math:: X = \sum_{i=1}^n X_i. Bu durumda, böyle yazacağız: .. math:: X \sim \mathrm{Binomial}(n, p). Birikimli dağılım işlevini elde etmek için, tam olarak :math:`k` başarı elde etmenin gerçekleşebileceği hepsi $ p\ :sup:`k(1-p)`\ {nk}$ olasılıklı :math:`\binom{n}{k} = \frac{n!}{k!(n-k)!}` yolu olduğunu fark etmemiz gerekir. Böylece birikimli dağılım işlevi bu olur: .. math:: F(x) = \begin{cases} 0 & x < 0, \\ \sum_{m \le k} \binom{n}{m} p^m(1-p)^{n-m} & k \le x < k+1 \text{ öyleki } 0 \le k < n, \\ 1 & x >= n . \end{cases} :label: eq_binomial_cdf İlk olarak olasılık kütle fonksiyonu çizelim. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python n, p = 10, 0.2 # Binom katsayısını hesapla def binom(n, k): comb = 1 for i in range(min(k, n - k)): comb = comb * (n - i) // (i + 1) return comb pmf = np.array([p**i * (1-p)**(n - i) * binom(n, i) for i in range(n + 1)]) d2l.plt.stem([i for i in range(n + 1)], pmf, use_line_collection=True) d2l.plt.xlabel('x') d2l.plt.ylabel('p.m.f.') d2l.plt.show() .. figure:: output_distributions_c7d568_123_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python n, p = 10, 0.2 # Binom katsayısını hesapla def binom(n, k): comb = 1 for i in range(min(k, n - k)): comb = comb * (n - i) // (i + 1) return comb pmf = torch.tensor([p**i * (1-p)**(n - i) * binom(n, i) for i in range(n + 1)]) d2l.plt.stem([i for i in range(n + 1)], pmf, use_line_collection=True) d2l.plt.xlabel('x') d2l.plt.ylabel('p.m.f.') d2l.plt.show() .. figure:: output_distributions_c7d568_126_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python n, p = 10, 0.2 # Binom katsayısını hesapla def binom(n, k): comb = 1 for i in range(min(k, n - k)): comb = comb * (n - i) // (i + 1) return comb pmf = tf.constant([p**i * (1-p)**(n - i) * binom(n, i) for i in range(n + 1)]) d2l.plt.stem([i for i in range(n + 1)], pmf, use_line_collection=True) d2l.plt.xlabel('x') d2l.plt.ylabel('p.m.f.') d2l.plt.show() .. figure:: output_distributions_c7d568_129_0.svg .. raw:: html
.. raw:: html
Şimdi, :eq:`eq_binomial_cdf` birikimli dağılım fonksiyonunu çizelim. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python x = np.arange(-1, 11, 0.01) cmf = np.cumsum(pmf) def F(x): return 0 if x < 0 else 1 if x > n else cmf[int(x)] d2l.plot(x, np.array([F(y) for y in x.tolist()]), 'x', 'c.d.f.') .. figure:: output_distributions_c7d568_135_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python x = torch.arange(-1, 11, 0.01) cmf = torch.cumsum(pmf, dim=0) def F(x): return 0 if x < 0 else 1 if x > n else cmf[int(x)] d2l.plot(x, torch.tensor([F(y) for y in x.tolist()]), 'x', 'c.d.f.') .. figure:: output_distributions_c7d568_138_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python x = tf.range(-1, 11, 0.01) cmf = tf.cumsum(pmf) def F(x): return 0 if x < 0 else 1 if x > n else cmf[int(x)] d2l.plot(x, [F(y) for y in x.numpy().tolist()], 'x', 'c.d.f.') .. figure:: output_distributions_c7d568_141_0.svg .. raw:: html
.. raw:: html
Eğer :math:`X \sim \mathrm{Binomial}(n, p)` ise, o zaman: - :math:`\mu_X = np`, - :math:`\sigma_X^2 = np(1-p)`. Bu, :math:`n` Bernoulli rastgele değişkenlerinin toplamı üzerindeki beklenen değerin doğrusallığından ve bağımsız rastgele değişkenlerin toplamının varyansının varyansların toplamı olduğu gerçeğinden kaynaklanır. Bu aşağıdaki gibi örneklenebilir. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python np.random.binomial(n, p, size=(10, 10)) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output array([[2, 2, 1, 1, 2, 1, 1, 1, 2, 1], [0, 0, 1, 2, 0, 1, 2, 1, 1, 2], [1, 2, 0, 1, 1, 1, 1, 2, 3, 2], [0, 1, 4, 0, 1, 1, 2, 2, 1, 3], [1, 2, 1, 2, 1, 1, 1, 3, 4, 4], [0, 1, 4, 2, 2, 1, 1, 4, 1, 2], [3, 1, 1, 1, 1, 2, 2, 3, 2, 2], [3, 2, 3, 1, 0, 3, 2, 4, 3, 1], [2, 5, 6, 4, 2, 2, 0, 3, 1, 1], [4, 1, 2, 1, 2, 2, 4, 0, 6, 3]]) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python m = torch.distributions.binomial.Binomial(n, p) m.sample(sample_shape=(10, 10)) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output tensor([[4., 0., 1., 1., 0., 2., 2., 4., 0., 3.], [3., 0., 2., 3., 1., 2., 0., 0., 1., 2.], [1., 4., 6., 1., 2., 2., 2., 1., 3., 2.], [1., 2., 3., 1., 2., 2., 4., 1., 2., 4.], [2., 0., 0., 1., 3., 1., 3., 0., 1., 3.], [2., 2., 5., 3., 0., 4., 2., 2., 2., 2.], [1., 2., 3., 1., 0., 1., 4., 4., 2., 4.], [3., 3., 2., 1., 4., 2., 1., 0., 3., 4.], [0., 1., 2., 2., 6., 3., 4., 3., 2., 2.], [1., 3., 2., 2., 4., 1., 5., 0., 3., 0.]]) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python m = tfp.distributions.Binomial(n, p) m.sample(sample_shape=(10, 10)) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output .. raw:: html
.. raw:: html
Poisson Dağılımı ---------------- Şimdi bir düşünce deneyi yapalım. Bir otobüs durağında duruyoruz ve önümüzdeki dakika içinde kaç otobüsün geleceğini bilmek istiyoruz. :math:`X^{(1)} \sim \mathrm{Bernoulli}(p)`'i ele alarak başlayalım, bu basitçe bir otobüsün bir dakikalık pencerede varma olasılığıdır. Bir şehir merkezinden uzaktaki otobüs durakları için bu oldukça iyi bir yaklaşıklama olabilir. Bir dakikada birden fazla otobüs göremeyebiliriz. Ancak, yoğun bir bölgedeysek, iki otobüsün gelmesi mümkün veya hatta muhtemeldir. Bunu, rastgele değişkenimizi ilk 30 saniye veya ikinci 30 saniye için ikiye bölerek modelleyebiliriz. Bu durumda bunu yazabiliriz: .. math:: X^{(2)} \sim X^{(2)}_1 + X^{(2)}_2, burada :math:`X^{(2)}` tüm toplamdır ve :math:`X^{(2)}_i \sim \mathrm{Bernoulli}(p/2)`. Toplam dağılım bu durumda :math:`X^{(2)} \sim \mathrm{Binomial}(2, p/2)` olur. Neden burada duralım? O dakikayı :math:`n` parçaya ayırmaya devam edelim. Yukarısıyla aynı mantıkla, bunu görüyoruz: .. math:: X^{(n)} \sim \mathrm{Binomial}(n, p/n). :label: eq_eq_poisson_approx Bu rastgele değişkenleri düşünün. Önceki bölümden şunu biliyoruz :eq:`eq_eq_poisson_approx`, ortalama :math:`\mu_{X^{(n)}} = n(p/n) = p` ve varyans :math:`\sigma_{X^{(n)}}^2 = n(p/n)(1-(p/n)) = p(1-p/n)`'dir. :math:`n \rightarrow \infty` alırsak, bu sayıların ortalama :math:`\mu_{X^{(\infty)}} = p` ve varyans :math:`\sigma_{X^{(\infty)}}^2 = p` şeklinde sabitlendiğini görebiliriz. Bu, bu sonsuz alt bölüm limitinde tanımlayabileceğimiz bazı rastgele değişkenlerin *olabileceğini* gösterir. Bu çok fazla sürpriz olmamalı, çünkü gerçek dünyada sadece otobüslerin geliş sayısını sayabiliyoruz, ancak matematiksel modelimizin iyi tanımlandığını görmek güzel. Bu tartışma, *nadir olaylar yasası* olarak kurallı yapılabilir. Bu akıl yürütmeyi dikkatlice takip ederek aşağıdaki modele ulaşabiliriz. :math:`\{0,1,2, \ldots \}` değerlerini aşağıdaki olasılıkla alan rastgele bir değişken ise :math:`X \sim \mathrm{Poisson}(\lambda)` diyeceğiz. .. math:: p_k = \frac{\lambda^ke^{-\lambda}}{k!}. :label: eq_poisson_mass :math:`\lambda > 0` değeri *oran* (veya *şekil* parametresi) olarak bilinir ve bir zaman biriminde beklediğimiz ortalama varış sayısını belirtir. Birikimli dağılım işlevini elde etmek için bu olasılık kütle işlevini toplayabiliriz. .. math:: F(x) = \begin{cases} 0 & x < 0, \\ e^{-\lambda}\sum_{m = 0}^k \frac{\lambda^m}{m!} & k \le x < k+1 \text{ öyleki } 0 \le k. \end{cases} :label: eq_poisson_cdf İlk olarak :eq:`eq_poisson_mass` olasılık kütle fonksiyonu çizelim. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python lam = 5.0 xs = [i for i in range(20)] pmf = np.array([np.exp(-lam) * lam**k / factorial(k) for k in xs]) d2l.plt.stem(xs, pmf, use_line_collection=True) d2l.plt.xlabel('x') d2l.plt.ylabel('p.m.f.') d2l.plt.show() .. figure:: output_distributions_c7d568_159_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python lam = 5.0 xs = [i for i in range(20)] pmf = torch.tensor([torch.exp(torch.tensor(-lam)) * lam**k / factorial(k) for k in xs]) d2l.plt.stem(xs, pmf, use_line_collection=True) d2l.plt.xlabel('x') d2l.plt.ylabel('p.m.f.') d2l.plt.show() .. figure:: output_distributions_c7d568_162_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python lam = 5.0 xs = [i for i in range(20)] pmf = tf.constant([tf.exp(tf.constant(-lam)).numpy() * lam**k / factorial(k) for k in xs]) d2l.plt.stem(xs, pmf, use_line_collection=True) d2l.plt.xlabel('x') d2l.plt.ylabel('p.m.f.') d2l.plt.show() .. figure:: output_distributions_c7d568_165_0.svg .. raw:: html
.. raw:: html
Şimdi, :eq:`eq_poisson_cdf` birikimli dağılım fonksiyonunu çizelim. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python x = np.arange(-1, 21, 0.01) cmf = np.cumsum(pmf) def F(x): return 0 if x < 0 else 1 if x > n else cmf[int(x)] d2l.plot(x, np.array([F(y) for y in x.tolist()]), 'x', 'c.d.f.') .. figure:: output_distributions_c7d568_171_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python x = torch.arange(-1, 21, 0.01) cmf = torch.cumsum(pmf, dim=0) def F(x): return 0 if x < 0 else 1 if x > n else cmf[int(x)] d2l.plot(x, torch.tensor([F(y) for y in x.tolist()]), 'x', 'c.d.f.') .. figure:: output_distributions_c7d568_174_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python x = tf.range(-1, 21, 0.01) cmf = tf.cumsum(pmf) def F(x): return 0 if x < 0 else 1 if x > n else cmf[int(x)] d2l.plot(x, [F(y) for y in x.numpy().tolist()], 'x', 'c.d.f.') .. figure:: output_distributions_c7d568_177_0.svg .. raw:: html
.. raw:: html
Yukarıda gördüğümüz gibi, ortalamalar ve varyanslar özellikle nettir. Eğer :math:`X \sim \mathrm{Poisson}(\lambda)` ise, o zaman: - :math:`\mu_X = \lambda`, - :math:`\sigma_X^2 = \lambda`. Bu aşağıdaki gibi örneklenebilir. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python np.random.poisson(lam, size=(10, 10)) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output array([[ 3, 5, 4, 3, 5, 6, 6, 4, 6, 3], [ 4, 5, 6, 5, 8, 3, 5, 3, 4, 3], [ 5, 5, 4, 8, 5, 7, 3, 4, 6, 3], [ 5, 7, 6, 4, 7, 1, 4, 5, 4, 5], [ 4, 10, 5, 2, 3, 4, 3, 2, 5, 7], [ 5, 5, 6, 2, 4, 7, 4, 6, 3, 5], [ 9, 10, 1, 7, 1, 5, 5, 8, 5, 1], [ 3, 5, 8, 3, 2, 11, 9, 5, 4, 11], [ 5, 5, 3, 8, 1, 10, 7, 8, 4, 9], [ 5, 7, 6, 4, 4, 9, 6, 3, 4, 4]]) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python m = torch.distributions.poisson.Poisson(lam) m.sample((10, 10)) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output tensor([[ 4., 5., 7., 6., 4., 8., 6., 8., 4., 4.], [ 5., 8., 3., 4., 3., 5., 5., 0., 7., 6.], [ 6., 6., 5., 2., 11., 7., 6., 4., 7., 3.], [ 6., 2., 6., 1., 6., 11., 2., 5., 5., 5.], [ 8., 6., 2., 7., 8., 3., 4., 11., 3., 4.], [ 6., 7., 5., 4., 4., 5., 4., 3., 3., 6.], [ 4., 3., 3., 8., 6., 3., 4., 3., 7., 5.], [ 7., 7., 5., 5., 6., 4., 2., 5., 10., 5.], [ 6., 5., 7., 4., 8., 4., 4., 5., 5., 6.], [ 3., 4., 2., 9., 6., 8., 4., 6., 1., 3.]]) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python m = tfp.distributions.Poisson(lam) m.sample((10, 10)) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output .. raw:: html
.. raw:: html
Gauss Dağılımı -------------- Şimdi farklı ama ilişkili bir deney yapalım. Tekrar :math:`n` bağımsız :math:`\mathrm{Bernoulli}(p)` ölçümlerini, :math:`X_i`'yi, gerçekleştirdiğimizi varsayalım. Bunların toplamının dağılımı :math:`X^{(n)} \sim \mathrm{Binomial}(n, p)` şeklindedir. Burada :math:`n` arttıkça ve :math:`p` azaldıkça bir limit almak yerine, :math:`p`'yi düzeltelim ve sonra :math:`n \rightarrow \infty` diyelim. Bu durumda :math:`\mu_{X^{(n)}} = np \rightarrow \infty` ve :math:`\sigma_{X^{(n)}}^2 = np(1-p) \rightarrow \infty` olur, bu nedenle bu limitin iyi tanımlanması gerektiğini düşünmek için hiçbir neden yoktur. Ancak, tüm umudumuzu kaybetmeyelim! Onları tanımlayarak ortalama ve varyansın iyi davranmasını sağlayalım: .. math:: Y^{(n)} = \frac{X^{(n)} - \mu_{X^{(n)}}}{\sigma_{X^{(n)}}}. Burada ortalama sıfır ve varyans bir olduğu görülebilir ve bunun nedenle bazı sınırlayıcı dağılıma yakınsayacağına inanmak mantıklıdır. Bu dağılımların neye benzediğini çizersek, işe yarayacağına daha da ikna olacağız. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python p = 0.2 ns = [1, 10, 100, 1000] d2l.plt.figure(figsize=(10, 3)) for i in range(4): n = ns[i] pmf = np.array([p**i * (1-p)**(n-i) * binom(n, i) for i in range(n + 1)]) d2l.plt.subplot(1, 4, i + 1) d2l.plt.stem([(i - n*p)/np.sqrt(n*p*(1 - p)) for i in range(n + 1)], pmf, use_line_collection=True) d2l.plt.xlim([-4, 4]) d2l.plt.xlabel('x') d2l.plt.ylabel('p.m.f.') d2l.plt.title("n = {}".format(n)) d2l.plt.show() .. figure:: output_distributions_c7d568_195_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python p = 0.2 ns = [1, 10, 100, 1000] d2l.plt.figure(figsize=(10, 3)) for i in range(4): n = ns[i] pmf = torch.tensor([p**i * (1-p)**(n-i) * binom(n, i) for i in range(n + 1)]) d2l.plt.subplot(1, 4, i + 1) d2l.plt.stem([(i - n*p)/torch.sqrt(torch.tensor(n*p*(1 - p))) for i in range(n + 1)], pmf, use_line_collection=True) d2l.plt.xlim([-4, 4]) d2l.plt.xlabel('x') d2l.plt.ylabel('p.m.f.') d2l.plt.title("n = {}".format(n)) d2l.plt.show() .. figure:: output_distributions_c7d568_198_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python p = 0.2 ns = [1, 10, 100, 1000] d2l.plt.figure(figsize=(10, 3)) for i in range(4): n = ns[i] pmf = tf.constant([p**i * (1-p)**(n-i) * binom(n, i) for i in range(n + 1)]) d2l.plt.subplot(1, 4, i + 1) d2l.plt.stem([(i - n*p)/tf.sqrt(tf.constant(n*p*(1 - p))) for i in range(n + 1)], pmf, use_line_collection=True) d2l.plt.xlim([-4, 4]) d2l.plt.xlabel('x') d2l.plt.ylabel('p.m.f.') d2l.plt.title("n = {}".format(n)) d2l.plt.show() .. figure:: output_distributions_c7d568_201_0.svg .. raw:: html
.. raw:: html
Unutulmaması gereken bir şey: Poisson durumu ile karşılaştırıldığında, şimdi standart sapmaya bölüyoruz, bu da olası sonuçları gittikçe daha küçük alanlara sıkıştırdığımız anlamına gelir. Bu, limitimizin artık ayrık olmayacağının, bilakis sürekli olacağının bir göstergesidir. Burada oluşan şeyin türetilmesi bu kitabın kapsamı dışındadır, ancak *merkezi limit teoremi*, :math:`n \rightarrow \infty` iken bunun Gauss Dağılımını (veya bazen normal dağılımı) vereceğini belirtir. Daha açık bir şekilde, herhangi bir :math:`a, b` için: .. math:: \lim_{n \rightarrow \infty} P(Y^{(n)} \in [a, b]) = P(\mathcal{N}(0,1) \in [a, b]), burada rastgele bir değişkenin normalde verilen ortalama :math:`\mu` ve varyans :math:`\sigma^2` ile dağıldığını söyleriz, :math:`X \sim \mathcal{N} (\mu, \sigma^2)` ise, :math:`X` yoğunluğu şöyledir: .. math:: p_X(x) = \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}. :label: eq_gaussian_pdf Önce, :eq:`eq_gaussian_pdf` olasılık yoğunluk dağılım fonksiyonunu çizelim. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python mu, sigma = 0, 1 x = np.arange(-3, 3, 0.01) p = 1 / np.sqrt(2 * np.pi * sigma**2) * np.exp(-(x - mu)**2 / (2 * sigma**2)) d2l.plot(x, p, 'x', 'p.d.f.') .. figure:: output_distributions_c7d568_207_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python mu, sigma = 0, 1 x = torch.arange(-3, 3, 0.01) p = 1 / torch.sqrt(2 * torch.pi * sigma**2) * torch.exp( -(x - mu)**2 / (2 * sigma**2)) d2l.plot(x, p, 'x', 'p.d.f.') .. figure:: output_distributions_c7d568_210_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python mu, sigma = 0, 1 x = tf.range(-3, 3, 0.01) p = 1 / tf.sqrt(2 * tf.pi * sigma**2) * tf.exp( -(x - mu)**2 / (2 * sigma**2)) d2l.plot(x, p, 'x', 'p.d.f.') .. figure:: output_distributions_c7d568_213_0.svg .. raw:: html
.. raw:: html
Şimdi, birikimli dağılım fonksiyonunu çizelim. Bu ek bölümün kapsamı dışındadır, ancak Gauss b.d.f.'nun daha temel işlevlerden tanımlı kapalı-şekil formülü yoktur. Bu integrali sayısal olarak hesaplamanın bir yolunu sağlayan ``erf``'i kullanacağız. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python def phi(x): return (1.0 + erf((x - mu) / (sigma * np.sqrt(2)))) / 2.0 d2l.plot(x, np.array([phi(y) for y in x.tolist()]), 'x', 'b.d.f.') .. figure:: output_distributions_c7d568_219_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python def phi(x): return (1.0 + erf((x - mu) / (sigma * torch.sqrt(torch.tensor(2.))))) / 2.0 d2l.plot(x, torch.tensor([phi(y) for y in x.tolist()]), 'x', 'b.d.f.') .. figure:: output_distributions_c7d568_222_0.svg .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python def phi(x): return (1.0 + erf((x - mu) / (sigma * tf.sqrt(tf.constant(2.))))) / 2.0 d2l.plot(x, [phi(y) for y in x.numpy().tolist()], 'x', 'b.d.f.') .. figure:: output_distributions_c7d568_225_0.svg .. raw:: html
.. raw:: html
Meraklı okuyucular bu terimlerin bazılarını tanıyacaktır. Aslında, bu integralla :numref:`sec_integral_calculus` içinde karşılaştık. Aslında, :math:`p_X(x)`'nin toplamda bir birim alana sahip olduğunu ve dolayısıyla geçerli bir yoğunluk olduğunu görmek için tam olarak bu hesaplamaya ihtiyacımız var. Bozuk para atmalarla çalışma seçimimiz, hesaplamaları kısalttı, ancak bu seçimle ilgili hiçbir şey temel (zorunlu) değildi. Gerçekten de, bağımsız aynı şekilde dağılmış rastgele değişkenlerden, :math:`X_i`'den, oluşan herhangi bir koleksiyon alırsak ve aşağıdaki gibi hesaplarsak: .. math:: X^{(N)} = \sum_{i=1}^N X_i. O zaman: .. math:: \frac{X^{(N)} - \mu_{X^{(N)}}}{\sigma_{X^{(N)}}} yaklaşık olarak Gauss olacak. Çalışması için ek gereksinimler vardır, en yaygın olarak da :math:`E[X^4] < \infty`, ancak işin felsefesi açıktır. Merkezi limit teoremi, Gauss'un olasılık, istatistik ve makine öğrenmesi için temel olmasının nedenidir. Ölçtüğümüz bir şeyin birçok küçük bağımsız katkının toplamı olduğunu söyleyebildiğimizde, ölçülen şeyin Gauss'a yakın olacağını varsayabiliriz. Gauss'ların daha birçok büyüleyici özelliği var ve burada bir tanesini daha tartışmak istiyoruz. Gauss, *maksimum entropi dağılımı* olarak bilinen şeydir. Entropiye daha derinlemesine :numref:`sec_information_theory` içinde gireceğiz, ancak bu noktada bilmemiz gereken tek şey bunun bir rastgelelik ölçüsü olduğudur. Titiz bir matematiksel anlamda, Gauss'u sabit ortalama ve varyanslı rastgele değişkenin *en* rastgele seçimi olarak düşünebiliriz. Bu nedenle, rastgele değişkenimizin herhangi bir ortalama ve varyansa sahip olduğunu bilirsek, Gauss bir anlamda yapabileceğimiz en muhafazakar dağılım seçimidir. Bölümü kapatırken, :math:`X \sim \mathcal{N}(\mu, \sigma^2)` ise şunu hatırlayalım: - :math:`\mu_X = \mu`, - :math:`\sigma_X^2 = \sigma^2`. Aşağıda gösterildiği gibi Gauss (veya standart normal) dağılımından örneklem alabiliriz. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python np.random.normal(mu, sigma, size=(10, 10)) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output array([[ 0.26058548, -0.64466616, -2.9737488 , -0.37193683, 0.19689832, -0.05491821, 0.82748434, -2.34770043, -0.33603661, -0.29108352], [ 1.00310232, -1.05372624, -0.03660703, -0.48093954, -1.12971818, 0.54328725, 0.74315384, -0.87057052, 1.09916599, -0.43099304], [-0.12733493, -0.66482418, -0.23128476, 1.93299228, -1.28998922, 0.16767642, 0.82121161, 0.13420962, 0.378731 , 1.16283119], [ 1.39688183, -1.09375969, -0.10390915, 1.09540338, -1.09357154, -0.27704082, 0.12211346, -0.24323513, 1.27817053, 1.03858423], [-0.14485206, 0.06582067, -0.26418933, 0.33068546, 1.08003151, -1.76985071, 0.23593249, 0.86839029, -0.91876129, 0.32139581], [-0.27644413, 1.82168856, -0.96559221, -0.15623357, -0.13539309, -0.42198864, 0.45060222, 0.44642697, 1.02602844, 0.82564852], [ 1.812253 , -0.60476267, 0.08051516, -2.20010379, 1.68948677, -0.60499348, 0.34608483, 0.82577897, 0.4772796 , -0.03182482], [ 1.74038209, -0.32205352, -0.38821318, -1.25175116, -0.00994913, 0.20662602, 1.93067325, 1.53837529, -1.29430807, -0.91427452], [ 1.35165488, 0.73575835, -1.54165364, -0.52917677, -0.1674086 , 0.6180353 , 1.05587066, -0.49551522, 1.72524151, 2.35324324], [ 0.05016966, -0.51407576, -0.01662268, -0.73864753, -1.00913854, -0.05199516, 0.3280673 , 0.22190905, -1.73873666, 0.23030531]]) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python torch.normal(mu, sigma, size=(10, 10)) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output tensor([[-0.2595, -1.5539, 0.0927, -1.2623, -0.8704, 0.0510, 0.5721, -0.3899, -0.2458, -0.9235], [ 1.4788, 1.0171, -1.1169, 1.0054, -1.1304, 0.8261, -1.5401, 0.2883, -0.3000, -0.3249], [ 1.0806, -0.8376, -0.0895, -1.2517, -0.1300, -0.8621, -0.1688, 0.4632, 0.3710, -0.0961], [ 1.0172, 0.9544, 1.6106, -0.7210, 0.6563, 0.9079, 0.9978, -1.2329, -0.0525, -2.1334], [-0.1660, 1.1768, 1.3767, -1.1783, -0.3530, 1.4851, 0.1966, -0.3871, 0.5587, 0.3439], [ 0.1132, -0.9124, -1.3493, -0.3536, -0.2566, -0.1056, -0.2690, 1.3901, -0.3605, 0.5091], [ 0.1190, 0.7673, -1.9223, -0.9960, 0.5085, -1.9418, 0.8535, 0.6506, 1.1895, 1.7085], [ 1.5387, -0.4026, 0.4791, -1.4742, -1.0087, 1.7260, -0.6061, -0.3172, -1.5387, -1.0112], [-2.1433, 1.6243, -0.9645, 0.2574, -0.2288, -0.4926, -0.0305, 0.8721, 0.1193, 0.1381], [ 0.2563, -0.6248, -0.7743, 0.6006, -0.8450, -0.4919, 1.1436, -0.1694, -1.0423, -1.7694]]) .. raw:: html
.. raw:: html
.. raw:: latex \diilbookstyleinputcell .. code:: python tf.random.normal((10, 10), mu, sigma) .. raw:: latex \diilbookstyleoutputcell .. parsed-literal:: :class: output .. raw:: html
.. raw:: html
.. _subsec_exponential_family: Üstel Ailesi ------------ Yukarıda listelenen tüm dağılımlar için ortak bir özellik, hepsinin ait olduğu *üstel aile* olarak bilinmesidir. Üstel aile, yoğunluğu aşağıdaki biçimde ifade edilebilen bir dizi dağılımdır: .. math:: p(\mathbf{x} | \boldsymbol{\eta}) = h(\mathbf{x}) \cdot \mathrm{exp} \left( \boldsymbol{\eta}^{\top} \cdot T(\mathbf{x}) - A(\boldsymbol{\eta}) \right) :label: eq_exp_pdf Bu tanım biraz incelikli olabileceğinden, onu yakından inceleyelim. İlk olarak, :math:`h(\mathbf{x})`, *altta yatan ölçü* veya *temel ölçü* olarak bilinir. Bu, üstel ağırlığımızla değiştirdiğimiz orijinal bir ölçü seçimi olarak görülebilir. İkinci olarak, *doğal parametreler* veya *kanonik parametreler* olarak adlandırılan :math:`\boldsymbol{\eta} = (\eta_1, \eta_2, ..., \eta_l) \in \mathbb{R}^l` vektörüne sahibiz. Bunlar, temel ölçünün nasıl değiştirileceğini tanımlar. Doğal parametreler, :math:`\mathbf{x}= (x_1, x_2, ..., x_n) \in \mathbb{R}^n` değişkeninin bazı :math:`T(\cdot)` fonksiyonlarına karşı bu parametrelerin nokta çarpımını ve üstünü alarak yeni ölçüye girerler. :math:`T(\mathbf{x})= (T_1(\mathbf{x}), T_2(\mathbf{x}), ..., T_l(\mathbf{x}))` vektörüne *:math:`\boldsymbol{\eta}` için yeterli istatistikler* denir. Bu ad, :math:`T(\mathbf{x})` tarafından temsil edilen bilgiler olasılık yoğunluğunu hesaplamak için yeterli olduğundan ve :math:`\mathbf{x}`'in örnekleminden başka hiçbir bilgi gerekmediğinden kullanılır. Üçüncü olarak, elimizde yukarıdaki :eq:`eq_exp_pdf` dağılımının intergralinin bir olmasını sağlayan, birikim fonksiyonu olarak adlandırılan :math:`A(\boldsymbol{\eta})` var, yani: .. math:: A(\boldsymbol{\eta}) = \log \left[\int h(\mathbf{x}) \cdot \mathrm{exp} \left(\boldsymbol{\eta}^{\top} \cdot T(\mathbf{x}) \right) d\mathbf{x} \right]. Somut olmak için Gauss'u ele alalım. :math:`\mathbf{x}` öğesinin tek değişkenli bir değişken olduğunu varsayarsak, yoğunluğunun şu olduğunu gördük: .. math:: \begin{aligned} p(x | \mu, \sigma) &= \frac{1}{\sqrt{2 \pi \sigma^2}} \cdot \mathrm{exp} \left\{ \frac{-(x-\mu)^2}{2 \sigma^2} \right\} \\ &= \frac{1}{\sqrt{2 \pi}} \cdot \mathrm{exp} \left\{ \frac{\mu}{\sigma^2}x -\frac{1}{2 \sigma^2} x^2 - \left( \frac{1}{2 \sigma^2} \mu^2 +\log(\sigma) \right) \right\}. \end{aligned} Bu, üstel ailenin tanımıyla eşleşir: - *Temel ölçü*: :math:`h(x) = \frac{1}{\sqrt{2 \pi}}`, - *Doğal parametreler*: :math:`\boldsymbol{\eta} = \begin{bmatrix} \eta_1 \\ \eta_2 \end{bmatrix} = \begin{bmatrix} \frac{\mu}{\sigma^2} \\ \frac{1}{2 \sigma^2} \end{bmatrix}`, - *Yeterli istatistikler*: :math:`T(x) = \begin{bmatrix}x\\-x^2\end{bmatrix}`, and - *Birikim işlevi*: :math:`A({\boldsymbol\eta}) = \frac{1}{2 \sigma^2} \mu^2 + \log(\sigma) = \frac{\eta_1^2}{4 \eta_2} - \frac{1}{2}\log(2 \eta_2)`. Yukarıdaki terimlerin her birinin kesin seçiminin biraz keyfi olduğunu belirtmekte fayda var. Gerçekten de önemli olan özellik, dağılımın tam formunun kendisi değil, bu formda ifade edilebilmesidir. :numref:`subsec_softmax_and_derivatives` içinde bahsettiğimiz gibi, yaygın olarak kullanılan bir teknik, :math:`\mathbf{y}` nihai çıktısının üstel bir aile dağılımını takip ettiğini varsaymaktır. Üstel aile, makine öğrenmesinde sıkça karşılaşılan yaygın ve güçlü bir dağılım ailesidir. Özet ---- - Bernoulli rastgele değişkenleri, evet/hayır sonucu olan olayları modellemek için kullanılabilir. - Ayrık tekdüze dağılım modeli, bir küme sınırlı olasılıktan seçim yapar. - Sürekli tekdüze dağılımlar bir aralıktan seçim yapar. - Binom dağılımları bir dizi Bernoulli rasgele değişkeni modeller ve başarıların sayısını sayar. - Poisson rastgele değişkenleri, nadir olayların oluşunu modeller. - Gauss rastgele değişkenleri, çok sayıda bağımsız rastgele değişkenin toplam sonucunu modeller. - Yukarıdaki tüm dağılımlar üstel aileye aittir. Alıştırmalar ------------ 1. İki bağımsız iki terimli rastgele değişkenin, :math:`X, Y \sim \mathrm{Binomial}(16, 1/2)` arasındaki :math:`X-Y` farkı olan rastgele bir değişkenin standart sapması nedir? 2. Poisson rastgele değişkenini, :math:`X \sim \mathrm{Poisson}(\lambda)`, alırsak ve :math:`(X - \lambda)/\sqrt{\lambda}`'i :math:`\lambda \rightarrow \infty` olarak kabul edersek, bunun yaklaşık olarak Gauss olduğunu gösterebiliriz. Bu neden anlamlıdır? 3. :math:`n` elemanda tanımlı iki tane ayrık tekdüze rasgele değişkenin toplamı için olasılık kütle fonksiyonu nedir? .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
`Tartışmalar `__ .. raw:: html
.. raw:: html
`Tartışmalar `__ .. raw:: html
.. raw:: html
`Tartışmalar `__ .. raw:: html
.. raw:: html