概率分布描述了事件或實驗所有可能結果的可能性。正態(tài)分布是最有用的概率分布之一,因為它可以很好地模擬許多自然現(xiàn)象。
正態(tài)分布在其峰值周圍是對稱的。由于這種對稱性,分布的均值通常用μ表示,并位于該峰值處。標準差σ描述了分布的擴散程度。
如果一些樣本服從正態(tài)分布,則隨機抽取一個樣本接近均值的概率很高。實際上,大約68%的所有樣本都在距離平均值一個標準差之內。
圖中曲線下的面積解釋為概率測量。綠色區(qū)域代表所有小于平均數(shù)一個標準偏差的樣本,占曲線下面積的68%。
我們都知道在Matlab中可以使用randn函數(shù)創(chuàng)建正態(tài)分布的隨機數(shù)。
在Python中,可以使用NumPy從正態(tài)分布中創(chuàng)建隨機數(shù)樣本。
NumPy包含一個完整的子包numpy.random,專門用于處理隨機數(shù)。由于歷史原因,該軟件包包括許多函數(shù)。
通常應該通過實例化默認隨機數(shù)生成器(RNG)來開始:
import numpy as np
rng = np.random.default_rng()
RNG可以從許多不同的分布中生成隨機數(shù)。
要從正態(tài)分布中抽樣,可以使用.normal()函數(shù):
雖然上圖這些數(shù)字看起來是隨機的,但很難確認這些數(shù)字是否從給定分布中抽取的。
因此,可以一次生成大量隨機數(shù):
numbers = rng.normal(size=10000)
numbers.mean()
numbers.std()
這里嘗試生成直方圖表示上一節(jié)生成的10000個隨機數(shù)
import matplotlib.pyplot as plt
plt.hist(numbers)
plt.show
直方圖的縱軸表示不同區(qū)間的樣本數(shù)量。
直方圖的形狀顯示了與正態(tài)分布相關聯(lián)的特征,它是對稱的,具有一個明確定義的峰值,并向兩側逐漸變窄。
通過增加區(qū)間數(shù)量,可以得到更加平滑的圖像
plt.hist(numbers,bins=500)
plt.show
import scipy.stats
bins = 500
bin_width = (numbers.max() - numbers.min()) / bins
hist_area = len(numbers) * bin_width
x = np.linspace(numbers.min(), numbers.max(), 101)
plt.plot(x, scipy.stats.norm.pdf(x) * hist_area)
plt.hist(numbers,bins=500)
plt.show()
自然界很多事物都服從正態(tài)分布,例如身高、體重、鞋碼。
在像計算機這樣的確定性系統(tǒng)中創(chuàng)建隨機數(shù)并不容易。大多數(shù)隨機數(shù)生成器不能產生真正的隨機性,而是通過一種確定性和可重復的過程生成數(shù)字,使得這些數(shù)字看起來是隨機的。
通常情況下,一個隨機數(shù)生成器——或者更準確地說,偽隨機數(shù)生成器(PRNG)——是從已知種子開始,并從中生成一個偽隨機數(shù)。這樣一個發(fā)生器的優(yōu)點之一就在于可以再現(xiàn)那些偽造出來的數(shù)字:
如果使用特定的種子創(chuàng)建隨機數(shù)生成器,則可以通過使用相同的種子稍后重新創(chuàng)建相同的隨機數(shù)。在此示例中,對.normal()的第二次調用生成與第一次調用相同的數(shù)字。另一方面,如果您使用不同的種子初始化生成器,則會獲得不同的隨機數(shù)。
歷史上,在NumPy中處理隨機數(shù)時沒有使用顯式隨機數(shù)生成器。而是直接調用諸如np.random.normal()之類的函數(shù)。但是,NumPy 1.17引入了顯式隨機數(shù)生成器,并鼓勵盡可能多地使用這種新方法來處理隨機數(shù)。
正態(tài)分布在統(tǒng)計學和概率論中扮演著重要角色。它出現(xiàn)在許多實際例子和許多理論結果中。中心極限定理可以解釋一些根本原因。
該結果表明,重復實驗的平均值將近似于正態(tài)分布。這個成立的一個重要條件是實驗具有相同的分布,盡管它們不需要是正態(tài)分布。
舉個擲骰子的例子。普通骰子有六個面,在單次擲骰子時,每種結果——1、2、3、4、5或6都是等可能發(fā)生的。因此這些投擲是均勻分布的,然而,反復投擲骰子得到的平均數(shù)仍會接近正態(tài)分布。
可以使用NumPy來證明這一點。首先生成隨機骰子投擲:
import numpy as np
import matplotlib.pyplot as plt
rng = np.random.default_rng(seed=2310)
rng.integers(low=1, high=6, endpoint=True, size=1)
使用 .integers() 并指定要在 1 到 6 的范圍內(包括邊界)抽樣整數(shù)。接下來可以使用 size 來模擬重復擲骰子的分布。首先將擲骰子的次數(shù)重復兩次,為了獲得代表性分布,進行10000次這樣的重復投擲,使用 .mean() 來計算兩次擲骰子的平均值,然后繪制直方圖來查看分布:
rolls = rng.integers(low=1, high=6, endpoint=True, size=(10_000, 2))
plt.hist(rolls.mean(axis=1), bins=21)
plt.show()
分布接近對稱且有明顯的峰值,該分布并不均勻,每個結果出現(xiàn)的可能性也不相等。
如果你增加重復的次數(shù),那么你會發(fā)現(xiàn)分布會越來越接近正態(tài)分布。
這說明了中心極限定理:重復實驗產生正態(tài)性。因為許多自然過程包括累加效應,它們通常會符合正態(tài)分布。
—— end ——