scipy.stats —— 概率、隨機變數與分佈
阿新 • • 發佈:2019-01-05
import numpy as np
import scipy.stats as st
-
機率(odds)
:二十場比賽只贏一場
**odds against B winning: ** :
A贏19場比賽,B才會贏一場
0. 常見分佈
- 泊松分佈:st.poisson(lambda)
- 指數分佈:st.expon
- 二項分佈:st.binom(n, p)
- 正態分佈:st.norm
- 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) ⇒
如下程式碼繪製出
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:多元正態分佈;
<a href=“https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.stats.multivariate_normal.html”, target="_blank">scipy.stats.multivariate_normal- 直接傳遞,根據概率密度函式(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))