本文實例講述了Python實現的概率分布運算操作。分享給大家供大家參考,具體如下:
1. 二項分布(離散)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
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. 正態分布(連續)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
''' 標準正態分布 密度函數: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) |
附:NumPy、SciPy與MatPlotLib模塊下載地址:
NumPy: http://sourceforge.net/projects/numpy/files/NumPy/1.9.2/
SciPy: http://sourceforge.net/projects/scipy/files/scipy/0.15.1/
MatPlotLib: http://matplotlib.org/downloads.html
希望本文所述對大家Python程序設計有所幫助。
原文鏈接:http://www.cnblogs.com/hhh5460/p/5586098.html