.. _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
.. 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
.. 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
.. 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
.. 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
.. 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
.. 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
.. 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
.. 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
.. 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
.. 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
.. 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
.. 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
.. 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
.. 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
.. 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
.. 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
.. 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
.. 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
.. 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
.. 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
.. raw:: html
`Tartışmalar `__
.. raw:: html
.. raw:: html
`Tartışmalar `__
.. raw:: html
.. raw:: html
`Tartışmalar `__
.. raw:: html
.. raw:: html