多項分佈模擬及 Seaborn 視覺化教程

小万哥丶發表於2024-06-03

多項分佈

簡介

多項分佈是二項分佈的推廣,它描述了在 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 的階乘,分別表示對應結果出現的次數的階乘。
p1p2、...、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)

視覺化多項分佈

由於多項分佈可以表示多種結果的出現次數,因此其視覺化方式通常取決於結果的個數和想要展示的資訊。

條形圖:如果結果個數較少,可以使用條形圖來直觀地顯示每個結果出現的次數。
堆積條形圖:如果結果個數較多,可以使用堆積條形圖來顯示不同試驗次數下每個結果出現的次數分佈。
折線圖:如果需要比較不同試驗次數下每個結果出現的機率分佈,可以使用折線圖來繪製每個結果出現的機率隨試驗次數的變化情況。

練習

  1. 模擬 100 次擲骰子的結果,並繪製每個結果出現的次數分佈圖。
  2. 比較不同試驗次數下擲骰子結果的分佈變化。
  3. 模擬一個具有 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,關注後即可獲取最新文章推送

看完如果覺得有幫助,歡迎點贊、收藏、關注

相關文章