泊松分佈是描述單位時間間隔內隨機事件發生次數的離散概率分佈,參數λ表示平均速率。公式為 P(k) = e^(-λ) (λ^k) / k!。NumPy 的 `random.poisson()` 可生成泊松分佈數據。當 λ 很大時,泊松分佈近似正態分佈。練習包括模擬顧客到達、比較不同 λ 下的分佈及模擬... ...
泊松分佈
簡介
泊松分佈是一種離散概率分佈,用於描述在給定時間間隔內隨機事件發生的次數。它常用於模擬諸如客戶到達商店、電話呼叫接入中心等事件。
參數
泊松分佈用一個參數來定義:
λ:事件發生的平均速率,表示在單位時間內事件發生的平均次數。
公式
泊松分佈的概率質量函數 (PMF) 給出了在指定時間間隔內發生 k 次事件的概率,計算公式為:
P(k) = e^(-λ) (λ^k) / k!
其中:
e^(-λ)
:表示沒有事件發生的概率。
(λ^k)
:表示 k 次事件發生的概率。
k!
:表示 k 個元素的階乘,即 k × (k - 1) × (k - 2) × ... × 2 × 1。
生成泊松分佈數據
NumPy 提供了 random.poisson()
函數來生成服從泊松分佈的隨機數。該函數接受以下參數:
lam
:事件發生的平均速率。
size
:輸出數組的形狀。
示例:生成一個平均速率為 5 的事件在 10 個時間間隔內發生的次數:
import numpy as np
data = np.random.poisson(lam=5, size=10)
print(data)
可視化泊松分佈
Seaborn 庫提供了便捷的函數來可視化分佈,包括泊松分佈。
示例:繪製平均速率為 7 的事件在 1000 個時間間隔內發生的次數分佈:
import seaborn as sns
import numpy as np
data = np.random.poisson(lam=7, size=1000)
sns.distplot(data)
plt.show()
正態分佈與泊松分佈的關係
當事件發生的平均速率 λ 很大時,泊松分佈可以近似為正態分佈。其均值 μ 為 λ,標準差 σ 為 sqrt(λ)。
示例:比較泊松分佈和正態分佈的形狀:
import seaborn as sns
import numpy as np
lam = 50
# 生成泊松分佈數據
data_poisson = np.random.poisson(lam=lam, size=1000)
# 生成正態分佈數據
mu = lam
sigma = np.sqrt(lam)
data_normal = np.random.normal(loc=mu, scale=sigma, size=1000)
sns.distplot(data_poisson, label="Poisson")
sns.distplot(data_normal, label="Normal")
plt.legend()
plt.show()
練習
- 在一個小時內,一家商店平均收到 10 位顧客。模擬顧客到達商店的次數並繪製分佈圖。
- 比較不同平均速率下泊松分佈形狀的變化。
- 利用泊松分佈來模擬一個呼叫中心每天接到的電話呼叫數量,並計算平均呼叫量和每天接聽超過 30 個電話的概率。
解決方案
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
# 1. 模擬顧客到達商店的次數並繪製分佈圖
data = np.random.poisson(lam=10, size=1000)
sns.distplot(data)
plt.show()
# 2. 比較不同平均速率下泊松分佈形狀的變化
lam_values = [5, 10, 20, 50]
for lam in lam_values:
data = np.random.poisson(lam=lam, size=1000)
sns.distplot(data, label=f"λ={lam}")
plt.legend()
plt.show()
# 3. 模擬電話呼叫數量並計算平均呼叫量和每天接聽超過 30 個電話的概率
calls_per_day = np.random.poisson(lam=150, size=365)
print("平均呼叫量:", calls_per_day.mean())
print("每天接聽超過 30 個電話的概率:", (calls_per_day > 30).mean())
最後
為了方便其他設備和平臺的小伙伴觀看往期文章:
微信公眾號搜索:Let us Coding
,關註後即可獲取最新文章推送
看完如果覺得有幫助,歡迎點贊、收藏、關註