iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
自我挑戰組

卡卡嗯的機率實驗筆記系列 第 6

拒絕抽樣 Rejection Sampling

  • 分享至 

  • xImage
  •  

今天來聊聊抽樣方法。如果你現在僅有一枚不公正的硬幣,比方說,投擲硬幣出現正面的機率是 p,那麼要如何使用這麼一枚不公正的硬幣來模擬一枚公正的硬幣呢?

我們可以有個簡單的方法來實做它:比方說,利用這個不公正的硬幣,進行多次投擲實驗,並且在實驗中找出兩個出現機率相等的互斥事件 (disjoint event)。其中一個我們就解讀為『正面』、另一個事件我們則解讀為『反面』,對於其他實驗結果,我們解讀為『拒絕』(rejection)、我們可以重新進行實驗。根據條件機率,此時回傳的『正面』和『反面』的機率相同。

舉例來說,我們考慮以下機率實驗:每一次投擲兩枚硬幣,若出現先正後反,我們就回傳『正面』。若出現先反後正,我們就回傳『反面』。若出現其他情形則『拒絕』並重來。

# 一次實驗
def simulate_fair_coin(p = 0.7):
    while True:
        c1 = np.random.choice(["HEAD", "TAIL"], p=[p, 1-p])
        c2 = np.random.choice(["HEAD", "TAIL"], p=[p, 1-p])
        if c1 != c2:
            return c1


# 設定實驗次數
rep = 10000

# 設定不公正的硬幣,擲出正面的機率
p = 0.7
results = [simulate_fair_coin(p) for _ in range(rep)]

# 把結果繪製出來
plt.figure(figsize=(8, 1))
plt.barh(*np.unique(results, return_counts=True))
ax = plt.gca()
ax.bar_label(ax.containers[0], label_type='edge')
ax.set_title(f"p = {p}")
plt.show()

https://ithelp.ithome.com.tw/upload/images/20230921/20112376XukescNMeL.png

連續機率分佈的拒絕抽樣

這個之後再補。


上一篇
布豐投針問題 Buffon's Needle Problem
下一篇
水塘抽樣 Reservoir Sampling
系列文
卡卡嗯的機率實驗筆記7
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言