離散、連續機率分佈小結+python中的應用

【轉載自:知乎--愛神的飛刀】
離散、連續機率分佈小結+python中的應用python

本文爲梳理離散、連續分佈的導讀類筆記,大神請繞道,謝謝;
本文閱讀大約須要15分鐘左右;
若您發現文中有錯誤之處,歡迎留言指正,謝謝。

前言

隨機變量:量化隨機事件的函數,將每一個可能的隨機事件結果賦予一個數字;
機率分佈:分佈是指數據在統計圖中的形狀,則機率分佈是指將隨機變量的機率在統計圖中的表現形式;
四種離散分佈:伯努利分佈、二項分佈、幾何分佈、泊松分佈等;
四種連續分佈:正態分佈、冪律分佈、指數分佈、 \beta 分佈等。

一,離散分佈

1.1 伯努利分佈

# 準備要用到的包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.stats as stats
# 生成一個0,1的數組
X=np.arange(0,2,1)
X
array([0, 1])
# 用bernoulli分佈計算0和1時的機率分別是多少
p=0.5
y=stats.bernoulli.pmf(X,p)
y
array([ 0.5,  0.5])
plt.style.use('ggplot')
f,ax=plt.subplots(figsize=(8,5))
plt.scatter(X,y,marker='o',color='r')
plt.vlines(X,0,y,color='y')
# 設置圖像
plt.title('伯努利分佈',fontsize=22)
plt.xlabel('隨機變量',fontsize=15)
plt.ylabel('機率',fontsize=15)
plt.show()

關於豎線vline數組

vline(x座標值, y座標最小值, y座標值最大值)
plt.vlines(X,0,y),其中X,y都是數組,且是一一對應關係。如上是,兩天豎線

1.2 二項分佈(Binomial Distribution)

如何檢驗一個分佈是否是二項分佈?函數

作某件事的次數n是必定的;
n次事件是相互獨立的,並且每次的機率是同樣的,例如每次拋硬幣正面朝上的機率;
每次實驗有且只有兩個結果,p+q=1;
想知道n次中,某一種狀況p或q出現k次的機率。
二項分佈是離散分佈,其機率用機率質量函數pmf計算
指望爲np,方差爲np(1-q)

以上就是二項分佈的特徵,如符合則該分佈是二項分佈。code

二項分佈機率質量函數PMF爲:orm

P(k)=C^k_n p^k (1-p)^{n-k}索引

指望和方差:事件

  • 指望:np , n次獨立事件預計成功多少次;
  • 方差:np(1-p) , 用於估計數據的波動。
# 計算機率
n=5;p=0.5
x=np.arange(0,n+1,1)#準備隨機變量,拋5次關於正面朝上有6種可能
ylist=stats.binom.pmf(x,n,p)#計算出現各類可能的機率
ylist
array([ 0.03125,  0.15625,  0.3125 ,  0.3125 ,  0.15625,  0.03125])
# 繪圖
plt.style.use('ggplot')
f,ax=plt.subplots(figsize=(8,5))
plt.plot(x,ylist,marker='o',linestyle='',color='r')
plt.vlines(x,0,ylist,color='y')#繪製豎線
# 設置
#千萬注意%的使用:%d表示替換爲整數,%0.2f替換爲保留2爲的浮點型數字,%s替換爲字符串
plt.title('二項分佈:n=%d,p=%0.2f'%(n,p),fontsize=22)
plt.xticks(fontsize=12)
plt.xlabel('正面朝上的次數',fontsize=15)
plt.yticks(fontsize=12)
plt.ylabel('機率',fontsize=15)

# plt.text:第3個參數必定是文本,若其中有動態數字,必定要用格式化字符串%
for i in x:
    plt.text(i,ylist[i]+0.006,'%0.5f' % ylist[i],ha='center', va= 'bottom',fontsize=11)
# ha='center':水平居中;va= 'bottom':垂直方向在底部
plt.show()

1.3 幾何分佈(Geometric Distribution)

如何檢驗一個分佈是幾何分佈?ip

作某件事的次數n是必定的;
n次事件是相互獨立的,並且每次的機率是同樣的,例如每次拋硬幣正面朝上的機率;
每次實驗有且只有兩個結果,p+q=1;
求的是第k次作某件事採起的第1次成功的機率

注意與二項分佈的區別是:ci

二項分佈:n次中共出現k次的機率
幾何分佈:知道第k次才第1次成功的機率

幾何分佈機率質量函數PMF及指望、方差:字符串

P(k)=(1-p)^{k-1} p
指望:1/p , 用於估計多少次後取得第1次成功
方差: (1-p)/p^2 , 用於估計數據波動大小
# 定義隨機變量:計算n=5時,各個k對應的幾何分佈機率
x=np.arange(1,6,1)
p=0.6
y_geo=stats.geom.pmf(x,p)
y_geo
array([ 0.6    ,  0.24   ,  0.096  ,  0.0384 ,  0.01536])
# 繪圖
f,ax=plt.subplots(figsize=(8,6))
plt.plot(x,y_geo,marker='o',linestyle='',color='r')
plt.vlines(x,0,y_geo,color='y')
# 設置
plt.title('幾何分佈:k=[1~5],p=%.2f'% p,fontsize=22)
plt.xlabel('實驗次數',fontsize=15)
plt.ylabel('機率',fontsize=15)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
# 設置數據點標籤,注意x從1開始,而y_geo索引從0開始
for i in x:
    plt.text(i,y_geo[i-1]+0.006,'%.4f'% y_geo[i-1],
             ha='center', va= 'bottom',fontsize=12)
plt.show()

1.4 泊松分佈(Poisson Distribution)

如何驗證是泊松分佈?

事件是獨立事件;
任意相同的時間範圍內,事件發生的機率相等;
求:某個時間範圍內事件發生k次的機率。

機率質量函數PMF和參數

k:事件發生的次數;
\mu :給定時間範圍內事件發生的平均數
PMF: p(k)=u^k e^{-u}/k!
指望和方差都是: \mu
# 定義隨機變量
mu=2# 已知某路口天天平均發生2次交通事故
k=4# 求該路口1天發生4次交通事故的機率
y=stats.poisson.pmf(k,mu)
y
0.090223522157741778
# 定義隨機變量列表:0至4次
x=np.arange(0,k+1,1)
y_poiss=stats.poisson.pmf(x,mu)
y_poiss
array([ 0.13533528,  0.27067057,  0.27067057,  0.18044704,  0.09022352])
# 繪圖展現
f,ax=plt.subplots(figsize=(10,5))
plt.plot(x,y_poiss,marker='o',linestyle='')
plt.vlines(x,0,y_poiss,color='y')
plt.title('泊松分佈:發生0至4次事故的機率分佈,均值爲:2',fontsize=22)
for i in x:
    plt.text(i,y_poiss[i]+0.006,'%.5f'%y_poiss[i],
             ha='center',va='bottom')

二,連續分佈

幾種重要連續機率分佈

正態分佈
冪律分佈
指數分佈
\beta 分佈

接下來重點介紹正態分佈,其他分佈在大量數據狀況下也趨於正態分佈。
所以,理解了正態分佈是極其重要的。
正態分佈

求正態分佈的3個步驟

肯定機率範圍:如x<3,明確了範圍
計算標準分:標準分=(x-平均值)/標準差
查表看機率值:根據這個標準分查表

兩種狀況下的機率

p(x>3)=1-p(x<3)
p(2<x<5)=p(x<5)-p(x<2)
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
plt.style.use('ggplot')
#定義隨機變量
mu=0
sigma=1
x=np.arange(-5,5,0.1)
x
array([ -5.00000000e+00,  -4.90000000e+00,  -4.80000000e+00,
        -4.70000000e+00,  -4.60000000e+00,  -4.50000000e+00,
        -4.40000000e+00,  -4.30000000e+00,  -4.20000000e+00,
        -4.10000000e+00,  -4.00000000e+00,  -3.90000000e+00,
        -3.80000000e+00,  -3.70000000e+00,  -3.60000000e+00,
        -3.50000000e+00,  -3.40000000e+00,  -3.30000000e+00,
        -3.20000000e+00,  -3.10000000e+00,  -3.00000000e+00,
        -2.90000000e+00,  -2.80000000e+00,  -2.70000000e+00,
        -2.60000000e+00,  -2.50000000e+00,  -2.40000000e+00,
        -2.30000000e+00,  -2.20000000e+00,  -2.10000000e+00,
        -2.00000000e+00,  -1.90000000e+00,  -1.80000000e+00,
        -1.70000000e+00,  -1.60000000e+00,  -1.50000000e+00,
        -1.40000000e+00,  -1.30000000e+00,  -1.20000000e+00,
        -1.10000000e+00,  -1.00000000e+00,  -9.00000000e-01,
        -8.00000000e-01,  -7.00000000e-01,  -6.00000000e-01,
        -5.00000000e-01,  -4.00000000e-01,  -3.00000000e-01,
        -2.00000000e-01,  -1.00000000e-01,  -1.77635684e-14,
         1.00000000e-01,   2.00000000e-01,   3.00000000e-01,
         4.00000000e-01,   5.00000000e-01,   6.00000000e-01,
         7.00000000e-01,   8.00000000e-01,   9.00000000e-01,
         1.00000000e+00,   1.10000000e+00,   1.20000000e+00,
         1.30000000e+00,   1.40000000e+00,   1.50000000e+00,
         1.60000000e+00,   1.70000000e+00,   1.80000000e+00,
         1.90000000e+00,   2.00000000e+00,   2.10000000e+00,
         2.20000000e+00,   2.30000000e+00,   2.40000000e+00,
         2.50000000e+00,   2.60000000e+00,   2.70000000e+00,
         2.80000000e+00,   2.90000000e+00,   3.00000000e+00,
         3.10000000e+00,   3.20000000e+00,   3.30000000e+00,
         3.40000000e+00,   3.50000000e+00,   3.60000000e+00,
         3.70000000e+00,   3.80000000e+00,   3.90000000e+00,
         4.00000000e+00,   4.10000000e+00,   4.20000000e+00,
         4.30000000e+00,   4.40000000e+00,   4.50000000e+00,
         4.60000000e+00,   4.70000000e+00,   4.80000000e+00,
         4.90000000e+00])
# 定義機率密度函數PDF
y=stats.norm.pdf(x,mu,sigma)

# 求一個試試看:y(x<0)的機率密度函數值
y_0=stats.norm.pdf(0,mu,sigma)
print(y_0)
0.398942280401

plt.style.use('ggplot')
# 畫出機率密度函數y
f,ax=plt.subplots(figsize=(10,5))
plt.plot(x,y)
plt.vlines(0,0,y_0,linestyle='--',color='y')
plt.title('正態分佈:$\mu$=%.1f,$\sigma$=%.1f'%(mu,sigma),fontsize=22)
plt.xlabel('隨機變量:x',fontsize=15)
plt.ylabel('機率:y',fontsize=15)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.show()

親自動手求 6\sigma 的區間

以前總據說服從正太分佈的數據,落在 6\sigma 之間的佔到99.74%,那麼99.74%到底是怎麼來的?該如何得出這個比例?

正太分佈的機率,徹底取決於 \mu $和 \sigma ,現以標準正太分佈爲例:

6\sigma :便是求P(-3 )
根據求正太分佈機率的步驟,先求出標準分,即3
查表可知,x=3時機率爲0.9987
帶入第1步計算可知,2*0.9987-1=0.9974,即99.74%

三,小結

注意區分四種離散機率分佈的適用狀況、機率計算;
四種連續的機率分佈,因爲時間的關係,只來得及整理正態分佈,後面幾個將在往後整理更新到本文中。
理解爲上。在理解的基礎上,在python中實現將大大加深記憶。

以上就是本文的所有,謝謝你查看

人氣稀薄 ,急需關愛 。

若是您居然看到了這裏還沒走開,請幫忙多多點贊、收藏哈,謝謝啦朋友們~~

相關文章
相關標籤/搜索