看得見概率,可視化講解概率學基礎(附帶python代碼)

01 概率論的開端

概率論是一門源自生活的學科,但是,直到1654年,帕斯卡和費馬才開始對概率論進行實質性的研究,也標誌著概率論正式的成為了數學的一個分支。

人們最早熟悉和認識到概率是從身邊的等可能事件開始的,比如:拋硬幣,擲骰子等。正因為如此,賭徒對概率論的發展起到了不可磨滅的貢獻。

時間回到1654年,梅內騎士(Chevalier de Méré)是一個資深賭徒。別看他名字裡有騎士,但是他並非出身貴族。梅內騎士是一位作家,喜歡在自己的文字中稱呼自己為梅內騎士(他曾在梅內學習)。久而久之,他的朋友們就稱呼他為梅內騎士了。其中,也包括大數學家帕斯卡。準確的說,帕斯卡和梅內騎士是賭友。


看得見概率,可視化講解概率學基礎(附帶python代碼)

帕斯卡


梅內騎士可能平時輸錢比較多,所以痛定思痛,非常注重賭局問題的思考。他曾經向帕斯卡請教過一些問題,比較出名的是點數問題。

點數問題:

有兩個人A和B對賭,每人各下注32個硬幣,一共64個硬幣。A和B商定,一局遊戲誰贏了誰就記一分。先累計到三分的一方獲勝,贏得所有的硬幣。

梅內騎士的問題是,如果突然發生了一些情況,賭局被迫結束。這時候,A已經贏了兩場,積兩分;B只贏了一場,積一分。那麼,64個硬幣應該怎麼分?

帕斯卡覺得這個問題很有意思。他和自己的朋友費馬(號稱“業餘數學之王”,提出了費馬大定理)進行了多次書信交流,並都給出瞭解答的思路。


看得見概率,可視化講解概率學基礎(附帶python代碼)

02 等可能概型

概率論最先研究的就是等可能概型,如拋硬幣和擲骰子。在可能概型中,所有結果出現的可能性都是相等的。比如說,拋硬幣只會出現正面和反面(別起哄,說可能豎起來),擲骰子只會有1到6六個面。

所有可能結果的結合,概率論中叫樣本空間。每一種結果就是一個基本事件。每個基本事件由於發生的可能性相等,則概率P = 1 / n。其中,n是所有基本事件的個數。

以拋硬幣為例,假設這個硬幣是均勻的。拋硬幣出現正面或者反面的概率都是0.5。這個假設很重要,現實生活中,硬幣或多或少都不規則,出現正反的概率都不會正好是0.5。

看得見概率,可視化講解概率學基礎(附帶python代碼)

硬幣正反面理論值


我們都知道,拋一次硬幣不是出現正面,就是反面。但是,如果拋100次硬幣,正面和反面出現的可能性會怎麼樣變化呢?下面我們利用python做一個動圖。

<code>#作者:逃學博士,轉載請註明出處
head_prob = 0.5
trial_times = 100
head = 0

def get_plot(times):
ax.clear()
global head, head_prob
if random.random() <= head_prob:
head += 1

x = [1, 2]
head_exp_prob = np.round(head/times, 2)
prob_exp_dist = [head_exp_prob, 1-head_exp_prob]
ax.bar(x, prob_exp_dist, width=0.5, color='#00d0a1')

for i in range(len(x)):
ax.text(x=x[i]-0.04, y=prob_exp_dist[i]+0.04, s=np.round(prob_exp_dist[i], 4), size=10)

ax.set_title('試驗概率')
ax.set_ylabel('概率')
ax.set_xticks(x)
ax.set_xticklabels(['正面', '反面'])
ax.set_ylim((0, 1.2))

anim = animation.FuncAnimation(fig, get_plot, frames=list(range(1, trial_times)))
anim.save('flip_coin.gif', writer='pillow')/<code>


看得見概率,可視化講解概率學基礎(附帶python代碼)

100次拋硬幣正反出現概率

當我們連續拋一百次硬幣,正反面出現的概率就非常接近理論值了。同時,這個過程反過來也可以檢驗硬幣是不是均勻,拋硬幣是不是公平。


看得見概率,可視化講解概率學基礎(附帶python代碼)

被動過手腳的硬幣,正面出現概率為0.7


當你統計後發現,拋硬幣正反概率如上圖所示,你就可以自信的說這個硬幣有問題。

不要以為這沒啥用,如果有一點你發現賭場裡的一個骰子出現6的概率特別高,而統計結果證明了你的猜想。那麼,你就可以贏錢了。

03 數學期望

其實,數學期望已經包含在帕斯卡和費馬解決點數問題的思路里了。當時,費馬收到帕斯卡的來信之後,針對點數問題給出瞭如下的解答:


看得見概率,可視化講解概率學基礎(附帶python代碼)


費馬的解答:

費馬想A和B誰先累計到3分就算贏。現在,A積2分,B積1分。也就是說,賭局一定在接下來的兩局之後結束。不管是A贏一局,還是B連贏兩局。

這樣說來,這兩局比賽可能出現的結果是,第一局A贏,第二局也是A贏(雖然第一局A贏,A已經到3分了),記做AA,其他情況是AB,BA,BB,一共四種情況。

費馬想,四種情況中,出現AA,AB和BA這三種情況,都是A贏,只有BB一種情況,B才能贏。那麼,賭局中途結束的話,A應該拿64 * 3/4 = 48個硬幣,B拿16個硬幣。

帕斯卡的解答:

不同於費馬,帕斯卡從另外一個角度給出瞭解答,也隱藏了一個重要的概念:數學期望。

帕斯卡想:接下來的第一局,如果A贏了,則A拿走全部64個硬幣,B拿0個硬幣。如果B贏了,則A和B各積兩分,這時候比較中斷,A和B應該平分硬幣,各拿32個。也就是說,第一局遊戲不管怎麼樣,A一定可以拿32個硬幣。

第二局,A和B誰贏就可以拿走32個硬幣。而A和B的勝率均為50%。那麼,A和B應該平分這32個硬幣。所以,A總共應該拿32 + 16 = 48個硬幣,B拿16個硬幣。

04 擲骰子的數學期望

數學期望反映的是隨機變量平均取值的數學特徵,公式如下。文字表述就是所有可能出現的結果與出現的概率乘積的和。


看得見概率,可視化講解概率學基礎(附帶python代碼)


拿擲骰子舉例,總共可能出現的情況有6種,1到6個數。而每個面出現概率都是1/6。


看得見概率,可視化講解概率學基礎(附帶python代碼)

擲骰子

根據公式,數學期望 = 1/6 * (1 + 2 + 3 + 4 + 5 + 6) = 3.5。 那麼,當我們連續擲骰子兩百次,得到的平均數是不是3.5呢?


看得見概率,可視化講解概率學基礎(附帶python代碼)

200次擲骰子

我們可以看到,在開始的10幾次擲骰子之後,骰子的平均數波動很大。但是隨著擲骰子次數增加,骰子的平均值則趨近3.5了(圖中紅線)。

05 結束語

概率論、數學以及其他任何學科,都是一代一代人的智慧。而我們在學習知識的時候,去了解知識點背後的歷史,這樣對於理解學科的精髓注意良多。

技術的發展以及可以讓我們不用通過大量重複的試驗,而通過編程去可視化知識點了。我們應該多多利用這些工具來幫助學習。

如果你沒有把這個基本的,但有些不那麼自然的基礎數學概率方法變成你生活的一部分,那麼在漫長的人生中,你們將會像一個踢屁股比賽中的獨腿人。這等於將巨大的優勢拱手送給了他人。

—— 查理.芒格

查理.芒格提到了100多種思維模型,而帕斯卡-費馬系統也在其中。最基本的概率論知識同樣蘊含著無窮的魅力。


分享到:


相關文章: