AI與統計學、線性代數、微積分都有密不可分的關係,本章我們會探討並實做AI機器學習常用的分布模型:伯努利分布(Bernoulli distribution)、二項分布(binomial distribution)和常態分布(Normal distribusion)
伯努利分布Bernoulli distribution
伯努利分布是一種二元隨機變量的概率分佈,其中隨機變量只能取兩個值之一,通常表示為0和1,或者失敗和成功。它以試驗成功的概率 ( p ) 和失敗的概率 ( 1-p ) 為參數。
這種分佈通常用於描述只有兩種可能結果的試驗,例如硬幣投擲(也許是不公正的),其中結果可以是正面(成功)或反面(失敗),每次投擲的結果獨立且具有相同的概率。
伯努利分佈的概率質量函數(PMF)可以表示為:
其中 ( k ) 是隨機變量的取值(通常為0或1),( p ) 是成功的概率。
我們可以用下面的python 實做 (記得要先pip install 沒有的插件)
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import bernoulli
# 定義Bernoulli分佈的參數
p = 0.3 # 成功的概率
# 生成隨機樣本
data = bernoulli.rvs(p, size=1000)
# 繪製直方圖
plt.hist(data, bins=[0, 1, 2], align='left', rwidth=0.3, color='skyblue', edgecolor='black')
plt.xticks([0, 1], ['Failure', 'Success'])
plt.xlabel('Outcome')
plt.ylabel('Frequency')
plt.title('Random Samples of Bernoulli Distribution')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()
# 計算概率質量函數(PMF)
x = np.array([0, 1])
pmf = bernoulli.pmf(x, p)
print("事件結果為 0 和 1 的概率分別為:", pmf)
# 計算累積分佈函數(CDF)
cdf = bernoulli.cdf(x, p)
print("事件結果小於等於 0 和 1 的累積概率分別為:", cdf)
輸出如下
可以看到,我們設定的成功概率在1000次取樣後已經接近設定的參數了,樣本數越大,成功率越接近原始值
二項分布(binomial distribution)
二項分布是統計學中常見的一種離散概率分佈,用於描述一系列獨立重複的二元試驗中成功的次數。每次試驗只有兩種可能的結果,通常表示為成功(1)和失敗(0)。二項分布的名稱來自於拉丁文的”bi”(意為”雙重”)和”nomen”(意為”名稱”),意思是兩個可能的結果。
在二項分布中,我們有兩個參數:試驗的次數 ( n ) 和成功的概率 ( p )。試驗次數 ( n ) 表示進行多少次獨立試驗,成功的概率 ( p ) 表示每次試驗成功的概率。成功的次數 ( k ) 可以是從0到 ( n ) 的任何整數。
二項分布的概率質量函數(PMF)可以用以下公式表示:
我們一樣可以用下面的python 實做 (記得要先pip install 沒有的插件)
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import binom
# 定義二項分佈的參數
n = 10 # 試驗次數
p = 0.5 # 成功的概率
# 生成隨機樣本
data = np.random.binomial(n, p, 1000)
# 繪製直方圖
plt.hist(data, bins=np.arange(0, n+2)-0.5, align='mid', rwidth=0.8, color='skyblue', edgecolor='black')
plt.xlabel('Success')
plt.ylabel('Frequency')
plt.title('Random Samples of Binomial Distribution (n=10, p=0.5)')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()
# 計算概率質量函數(PMF)
x = np.arange(0, n+1)
pmf = binom.pmf(x, n, p)
plt.stem(x, pmf, use_line_collection=True)
plt.xlabel('Number of Successes')
plt.ylabel('Probability')
plt.title('Probability Mass Function of Binomial Distribution (n=10, p=0.5)')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()
輸出如下
頻率:
機率質量函數:
看起來很像常態分布對吧,當二項試驗的次數 ( n ) 足夠大時(通常 ( n > 30 )),二項分佈的形狀會趨於常態分佈。這被稱為中央極限定理(CLT)。因此,當 ( n ) 較大時,二項分佈的直方圖形狀會越來越接近常態分佈。在上面的程式中,我們設置了 ( n = 10 ),所以直方圖顯示的確實與常態分佈相似,但如果我們將 ( n ) 設置為更大的值,就會更加接近常態分佈的形狀。
常態分布(Normal distribusion)
最後,我們來介紹常態分布,其有兩參數,平均值(mu)與標準差(sigma),實作如下
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
# 定義常態分佈的參數
mu = 0 # 平均值
sigma = 1 # 標準差
# 生成隨機樣本
data = np.random.normal(mu, sigma, 1000)
# 繪製直方圖
plt.hist(data, bins=30, density=True, alpha=0.6, color='skyblue', edgecolor='black')
# 繪製擬合的正態分佈曲線
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, sigma)
plt.plot(x, p, 'k', linewidth=2)
# 加上標籤和標題
plt.xlabel('Value')
plt.ylabel('Density')
plt.title('Normal Distribution')
plt.grid(True)
plt.show()
輸出如下:
看起來我們從常態分布隨機取樣的分布就很像一個鐘型曲線,這個就是常態分布