天天看點

python 服從正太分布 離散情況 下 的機率密度函數python 服從正太分布 離散情況 下 的機率密度函數

python 服從正太分布 離散情況 下 的機率密度函數

  1. scipy.stats庫是分布函數庫, 包含正太分布,泊松分布,卡方分布等
  2. 導入scipy.stats庫以後, 應用函數norm生成服從正太分布的機率密度函數,

    具體法是: scipy.stats.norm(均值, 标準差)

  3. 應用函數rvs()産生服從正太分布的随機樣本; 具體用法是: scipy.stats.rvs(樣本個數)
  4. 機率密度函數pdf() 用于求出某樣本發生的機率; 具體用法是: pdf(樣本), 結果為樣本發生的機率
  5. 累積密度函數cdf()是機率密度函數的積分。

    可用于算出正太分布曲線任意兩點a,b(b>a)圍成的區間的面積, 即面積等于随機數發生在這區間的機率(密度);

    用法:面積=scipy.stats.norm.cdf(b)-scipy.stats.norm.cdf(a) ; 這是使用累積分布函數cdf算出來的

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats # 導入分布函數庫; 另一種導入形式 import scipy.stats
import pandas as pd
import seaborn as sns
import matplotlib

matplotlib.rcParams['axes.unicode_minus']=False#解決儲存圖像時負号'-'顯示為方塊的問題
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定預設字型

# 正太分布曲線關于 x軸=均值 處對稱; 即 x軸=均值時,結果為峰值(最大機率)
# 标準差越大,則分峰值越小(即最大機率越小),曲線越陡
nd = stats.norm(5,3) # 生成均值為5,标準差3的正态分布

x = np.linspace(-10,10,num=15) # num的數值要與下面生成随機樣本數量相等
data = nd.rvs(15) # 産生服從正太分布的随機15個樣本
print(data) # 輸出随機生成的數

plt.figure(1)
plt.scatter(x,y=data) # 繪制散點圖,檢視數值分布
plt.xlabel('x軸無意義') # x軸無意義,但必須設定,因為畫圖需要
plt.ylabel('随機樣本的大小')
plt.grid(b= True, axis='y') # 顯示網格y軸
plt.title('散點圖')

se = np.std(data,ddof=1)/np.sqrt(15) # 标準誤 sqrt(樣本量)

print('the standard error is {0}'.format(se)) # 輸出标準誤的值,标準誤用于描述總體均值和樣本均值的差距
# print('thr standard error is %f'%se)

# 直方圖
plt.figure(2)
plt.hist(data,bins=100) # 劃分為150個柱子
plt.title('直方圖')
plt.xlabel('随機樣本的大小')
plt.ylabel('随機樣本的個數')
plt.show()


# 算出随機生成5這個數的機率, 因為5等于設定的均值,是以pdf(5)的結果就是正太分布曲線的峰值,即最大機率對應的數值
print("生成5的機率={}".format(nd.pdf(5))) # pdf()是機率密度函數
print("生成10的機率={}".format(nd.pdf(-0)))
print("生成-10的機率={}".format(nd.pdf(-10)))

# 算出正太分布曲線任意兩點a,b(b>a)圍成的區間的面積, 即面積等于随機數發生在這區間的機率(密度);
# 面積=scipy.stats.norm.cdf(b)-scipy.stats.norm.cdf(a) ; 這是使用累積分布函數cdf算出來的
print('*'*100)
print(nd.cdf(8)-nd.cdf(2)) # 均值5加減一個标準差3,然後算出該範圍的機率密度

           

運作程式結果:

生成服從正太分布的15個随機樣本

[ 6.48630578 5.60762651 3.51681836 5.3242151 2.57772191 2.1317888

3.00916004 8.47931171 2.53629108 -1.64630161 2.35756654 0.99879104

-0.99562134 7.52357158 6.18599851]

其散點圖如下:

python 服從正太分布 離散情況 下 的機率密度函數python 服從正太分布 離散情況 下 的機率密度函數
python 服從正太分布 離散情況 下 的機率密度函數python 服從正太分布 離散情況 下 的機率密度函數

如下是結合2張圖和15個随機樣本的講解:

  1. 散點圖圖示1,2,3,4的點分别一一對應于直方圖1,2,3,4這些柱,
  2. 可以看出有2個變量小于0, 分别為點1,2; 其值為[ -1.64630161, -0.99562134]
  3. 有一個數值約為1, 在圖中為點3, 其值為[ 0.99879104 ], 其餘的正數值均大于2
  4. 有一個數值大于8, 在圖中為點4 ,其值為[ 8.47931171 ]
  5. 通過直方圖的最高柱子, 可以看出在2附近有兩個重複的值, 其值為[ 2.53629108 , 5.3242151 ]

    但是這兩個數值為什麼不相等,而是接近相等?

    因為 : x 軸并不是劃分為無窮大個小區間

由于樣本量不夠大, 所有柱形圖并不明顯呈現出正太分布

是以: 标準誤就很大

the standard error is 0.7648986165499617

以下可以看出: 越靠近均值, 發生的機率越大

生成5的機率=0.1329807601338109

生成10的機率=0.03315904626424956

生成-10的機率=4.955731715780993e-07 (非常小,幾乎可以忽略)

發生在2和8之間的機率為:

0.6826894921370859

下面: 調高樣本量為2000, 可以看出柱形圖明顯呈正态分布圖了

即 rvs(2000)

python 服從正太分布 離散情況 下 的機率密度函數python 服從正太分布 離散情況 下 的機率密度函數

由于樣本量增大, 标準誤明顯下降,也就是說: 樣本越大, 越能反應出總體數量的特征

the standard error is 0.06557922041493411

而生成其他數值的機率基本不變

生成5的機率=0.1329807601338109

生成10的機率=0.03315904626424956

生成-10的機率=4.955731715780993e-07

0.6826894921370859