python實現概率分布


 

1. 二項分布(離散)

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

'''
# 二項分布 (binomial distribution)
# 前提:獨立重復試驗、有放回、只有兩個結果
# 二項分布指出,隨機一次試驗出現事件A的概率如果為p,那么在重復n次試驗中出現k次事件A的概率為:
# f(n,k,p) = choose(n, k) * p**k * (1-p)**(n-k)
'''

# ①定義二項分布的基本信息
p = 0.4 # 事件A概率0.4
n = 5   # 重復實驗5次
k = np.arange(n+1) # 6種可能出現的結果
#k = np.linspace(stats.binom.ppf(0.01,n,p), stats.binom.ppf(0.99,n,p), n+1) #另一種方式


# ②計算二項分布的概率質量分布 (probability mass function)
# 之所以稱為質量,是因為離散的點,默認體積(即寬度)為1
# P(X=x) --> 是概率
probs = stats.binom.pmf(k, n, p) 
#array([ 0.07776,  0.2592 ,  0.3456 ,  0.2304 ,  0.0768 ,  0.01024])
#plt.plot(k, probs)


# ③計算二項分布的累積概率 (cumulative density function)
# P(X<=x) --> 也是概率
cumsum_probs = stats.binom.cdf(k, n, p)
#array([ 0.07776,  0.33696,  0.68256,  0.91296,  0.98976,  1.     ])


# ④根據累積概率得到對應的k,這里偷懶,直接用了上面的cumsum_probs
k2 = stats.binom.ppf(cumsum_probs, n, p)
#array([0, 1, 2, 3, 4, 5])


# ⑤偽造符合二項分布的隨機變量 (random variates)
X = stats.binom.rvs(n,p,size=20)
#array([2, 3, 1, 2, 2, 2, 1, 2, 2, 3, 3, 0, 1, 1, 1, 2, 3, 4, 0, 3])

#⑧作出上面滿足二項分布隨機變量的頻數直方圖(類似group by)
plt.hist(X)

#⑨作出上面滿足二項分布隨機變量的頻率分布直方圖
plt.hist(X, normed=True)
plt.show()

 

 

2. 正態分布(連續)

 

'''
標准正態分布
密度函數:f(x) = exp(-x**2/2)/sqrt(2*pi)

'''

x = np.linspace(stats.norm.ppf(0.01), stats.norm.ppf(0.99), 100)


# 概率密度分布函數(Probability density function)
# 之所以稱為密度,是因為連續的點,默認體積為0
# f(x) --> 不是概率
probs = norm.pdf(x)
# plt.plot(x, probs, 'r-', lw=5, alpha=0.6, label='norm pdf')


# 累積概率密度函數 Cumulative density function
# 定積分 ∫_-oo^a f(x)dx  --> 是概率
cumsum_probs = stats.norm.cdf(x)


# 偽造符合正態分布的隨機變量X
# 通過loc和scale參數可以指定隨機變量的偏移和縮放參數。對於正態分布的隨機變量來說,這兩個參數相當於指定其期望值和標准差:
X = stats.norm.rvs(loc=1.0, scale=2.0, size=1000)

#⑨作出上面正態分布隨機變量的頻率分布直方圖
plt.hist(X, normed=True, histtype='stepfilled', alpha=0.2)
plt.legend(loc='best', frameon=False)
plt.show()

# 對給定的數據進行參數估計。這里偷懶了,就用上面的X
mean, std = stats.norm.fit(X)
#array(1.01810091), array(2.00046946)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM