import numpy as np
import scipy.stats as st
-
几率(odds)
p ( B ) = 1 20 p(B)=\frac1{20} p(B)=201:二十场比赛只赢一场
**odds against B winning: ** o ( B ) = 1 − p ( B ) p ( B ) = 19 o(B)=\frac{1-p(B)}{p(B)}=19 o(B)=p(B)1−p(B)=19:
A赢19场比赛,B才会赢一场
0. 常见分布
- 泊松分布:st.poisson(lambda)
- 指数分布:st.expon
- 二项分布:st.binom(n, p)
- 正态分布:st.norm
- 默认为标准正态分布,st.norm().cdf(0) ⇒ 0.5
- st.norm(32, 2.5).cdf(32) ⇒0.5,均值为 32;
- beta分布:st.beta
- gamma分布:st.gamma
1. scipy.stats vs. scipy.special
- scipy.special:中定义的是一些特殊的函数;
- scipy.special.beta:表示的是beta函数;
- scipy.special.gamma:表示的则是 gamma 函数
- scipy.stats:定义的则是概率分布;
- scipy.stats.beta:表示的是 beta 分布;
- scipy.stats.gamma:表示的是 gamma 分布;
2. 创建随机变量(rv:random variable)
-
泊松分布:
F_true = 1000 N = 50 F = st.poisson(F_true).rvs(N) # 泊松分布为离散型概率分布
也可以这样:
mu_true, sigma_true = 1000, 15 N = 100 F_true = st.norm(mu_true, sigma_true).rvs(N) F = st.poisson(F_true).rvs()
-
二项分布
# python >>> import scipy.stats as st >>> n, p = 100, .5 >>> X = st.binom(n, p) # 随机变量X:投100次硬币正面出现的个数 # 用二项分布表示 >>> X.mean() 50.0 # mu = n*p = 100*.5 >>> X.std() 5.0 # sigma = sqrt(n*p*q)=sqrt(100*.5*.5)
st.binom(100, .5).rvs() ⇒ 采样(trial);
3. 连续性概率分布函数:pdf
pdf 表示的是函数,给一定输入值,就会得到一个输出值,而不是随机变量。
-
st.norm.pdf(0, loc=0, scale=1) ⇒ 1 2 π \frac1{\sqrt{2\pi}} 2π1
如下代码绘制出 f ( x ) = 1 2 π exp ( − ( x − 1 ) 2 2 ) f(x)=\frac1{\sqrt{2\pi}}\exp(-\frac{(x-1)^2}{2}) f(x)=2π1exp(−2(x−1)2)
mu, sigma = 1, 1 xs = np.linspace(-5, 5, 1000) plt.plot(x, st.norm.pdf(xs, loc=mu, scale=sigma)) plt.show()
-
st.multivariate_normal:多元正态分布;
scipy.stats.multivariate_normal- 直接传递 x x x,根据概率密度函数(pdf)获得其值;
x = np.linspace(0, 5, 10, endpoint=False) y = st.multivariate_normal.pdf(x, mean=2.5, cov=.5)
- 首先定义随机变量,再取得 pdf 在各个位置上的值;
x, y = np.mgrid[-1:1:.01, -1:1:.01] pos = np.empty(x.shape + (2,)) pos[:, :, 0] = x; pos[:, :, 1] = y rv = multivariate_normal([0, 0], [[1, 0], [0, 1]]) plt.contourf(x, y, rv.pdf(pos))