多項分佈是二項分佈的推廣,描述了在n次試驗中k種不同事件出現次數的概率分佈。參數包括試驗次數n、結果概率列表pvals(和為1)和輸出形狀size。PMF公式展示了各結果出現次數的概率。NumPy的`random.multinomial()`可生成多項分佈數據。練習包括模擬擲骰子和抽獎活動。解決方案... ...
多項分佈
簡介
多項分佈是二項分佈的推廣,它描述了在 n 次獨立試驗中,k 種不同事件分別出現次數的離散概率分佈。與二項分佈只能有兩種結果(例如成功/失敗)不同,多項分佈可以有 k 種(k ≥ 2)及以上的不同結果。
參數
多項分佈用三個參數來定義:
n:試驗次數,表示重覆相同實驗的次數。
pvals:一個長度為 k 的列表,其中每個元素表示對應結果出現的概率。pvals 的元素之和必須為 1。
size:輸出數組的形狀。
公式
多項分佈的概率質量函數 (PMF) 給出了在 n 次試驗中,k 種結果分別出現 k1、k2、...、kk 次的概率,計算公式為:
P(k1, k2, ..., kk) = n! / (k1! * k2! * ... * kk!) * (p1 ^ k1) * (p2 ^ k2) * ... * (pk ^ kk)
其中:
P(k1, k2, ..., kk)
:表示 k 種結果分別出現 k1、k2、...、kk 次的概率。
n!
:n 的階乘,即 n × (n - 1) × (n - 2) × ... × 2 × 1。
k1!
、k2!
、...、kk!
:k1、k2、...、kk 的階乘,分別表示對應結果出現的次數的階乘。
p1
、p2
、...、pk
:對應結果出現的概率,分別為 pvals 列表中的元素。
生成多項分佈數據
NumPy 提供了 random.multinomial()
函數來生成服從多項分佈的隨機數。該函數接受以下參數:
n
:試驗次數。
pvals
:結果的概率列表。
size
:輸出數組的形狀。
示例:生成擲骰子 10 次的結果,其中每個結果出現的概率相等:
import numpy as np
data = np.random.multinomial(n=10, pvals=[1/6] 6, size=1000)
print(data)
可視化多項分佈
由於多項分佈可以表示多種結果的出現次數,因此其可視化方式通常取決於結果的個數和想要展示的信息。
條形圖:如果結果個數較少,可以使用條形圖來直觀地顯示每個結果出現的次數。
堆積條形圖:如果結果個數較多,可以使用堆積條形圖來顯示不同試驗次數下每個結果出現的次數分佈。
折線圖:如果需要比較不同試驗次數下每個結果出現的概率分佈,可以使用折線圖來繪製每個結果出現的概率隨試驗次數的變化情況。
練習
- 模擬 100 次擲骰子的結果,並繪製每個結果出現的次數分佈圖。
- 比較不同試驗次數下擲骰子結果的分佈變化。
- 模擬一個具有 3 種結果的抽獎活動,每個結果出現的概率分別為 1/3、1/2 和 1/6,並計算每種結果出現 1 次的概率。
解決方案
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
# 1. 模擬擲骰子結果並繪製分佈圖
data = np.random.multinomial(n=10, pvals=[1/6] 6, size=1000)
result_counts = data.sum(axis=0) # 計算每個結果出現的總次數
sns.barplot(x=np.arange(len(result_counts)), y=result_counts)
plt.xlabel("Result")
plt.ylabel("Count")
plt.title("Distribution of Dice Rolls (1000 trials)")
plt.show()
# 2. 比較不同試驗次數下分佈變化
n_values = [10, 50, 100, 500]
for n in n_values:
data = np.random.multinomial(n=n, pvals=[1/6] 6, size=1000)
result_counts = data.sum(axis=0)
sns.barplot(x=np.arange(len))
最後
為了方便其他設備和平臺的小伙伴觀看往期文章:
微信公眾號搜索:Let us Coding
,關註後即可獲取最新文章推送
看完如果覺得有幫助,歡迎點贊、收藏、關註