用 Python 抛硬币

Python 概率基础

Alexander A. Ramírez M.

CEO @ Synergy Vision

概率

  • 数据科学的基础
  • 可从模型生成数据
  • 研究随机现象的规律
Python 概率基础

建立直觉

…用抛硬币来直观理解

抛硬币

Python 概率基础

只有两种结果

正面或反面

一分硬币的正反面

Python 概率基础

在 Python 中抛硬币

伯努利随机试验

from scipy.stats import bernoulli
bernoulli.rvs(p=0.5, size=1)
array([0])

再抽一次

bernoulli.rvs(p=0.5, size=1)
array([1])
Python 概率基础

多次抛硬币

size 参数调大以抛更多…

bernoulli.rvs(p=0.5, size=10)
array([0, 0, 0, 0, 0, 0, 1, 1, 0, 0])

有多少次正面?

sum(bernoulli.rvs(p=0.5, size=10))
5
Python 概率基础

多次抛硬币(续)

再抽一次…

sum(bernoulli.rvs(p=0.5, size=10))
2
Python 概率基础

多次抛硬币(续)

二项随机变量

from scipy.stats import binom
binom.rvs(n=10, p=0.5, size=1)
array([7])

多次抽样

binom.rvs(n=10, p=0.5, size=10)
array([6, 2, 3, 5, 5, 5, 5, 4, 6, 6])
Python 概率基础

多次抛硬币(续)

偏置硬币的抽样

binom.rvs(n=10, p=0.3, size=10)
array([3, 4, 3, 3, 2, 2, 2, 2, 3, 6])
Python 概率基础

随机数种子

  • 使用 rvs()random_state 参数
from scipy.stats import binom
binom.rvs(n=10, p=0.5, size=1, random_state=42)
  • 使用 numpy.random.seed()
import numpy as np
np.random.seed(42)
Python 概率基础

随机数种子(续)

设定种子后抛 10 次公平硬币

from scipy.stats import binom
import numpy as np

np.random.seed(42)
binom.rvs(n=10, p=0.5, size=1)
array([4])
Python 概率基础

用 Python 练习抛硬币

Python 概率基础

Preparing Video For Download...