看得见概率,可视化讲解概率学基础(附带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多种思维模型,而帕斯卡-费马系统也在其中。最基本的概率论知识同样蕴含着无穷的魅力。


分享到:


相關文章: