天天看點

python-指數分布介紹(scipy.stats.expon)一、指數分布問題:二、 指數分布三、機率密度圖四、累積機率分布(查表)五、再來2個問題

一、指數分布問題:

有一種品牌的路由器,據廠家統計知該路由器平均壽命是50000小時,現在有2個問題:

1、去年我買了一個這樣的路由器,使用到現在已經8000小時了一點問題都沒有,那我這台路由器還能用40000小時以上的機率是多少?

2、 我現在推薦鄰居也買了一個這樣的路由器,鄰居這台路由器可以用40000小時以上的機率是多少?

二、 指數分布

泊松分布描述的是事件發生次數,而指數分布描述的是事件發生的時間間隔。

指數分布主要用于描述電子元器件的壽命,其為連續型分布,機率密度函數為:

python-指數分布介紹(scipy.stats.expon)一、指數分布問題:二、 指數分布三、機率密度圖四、累積機率分布(查表)五、再來2個問題

分布函數為:

python-指數分布介紹(scipy.stats.expon)一、指數分布問題:二、 指數分布三、機率密度圖四、累積機率分布(查表)五、再來2個問題

期望: 

python-指數分布介紹(scipy.stats.expon)一、指數分布問題:二、 指數分布三、機率密度圖四、累積機率分布(查表)五、再來2個問題

,   方差: 

python-指數分布介紹(scipy.stats.expon)一、指數分布問題:二、 指數分布三、機率密度圖四、累積機率分布(查表)五、再來2個問題
python-指數分布介紹(scipy.stats.expon)一、指數分布問題:二、 指數分布三、機率密度圖四、累積機率分布(查表)五、再來2個問題

表示事件發生的頻率,在這裡路由器平均壽命是50000小時,那麼可以認為路由器平均50000小時壞一次,那麼路由器壞的頻率是

python-指數分布介紹(scipy.stats.expon)一、指數分布問題:二、 指數分布三、機率密度圖四、累積機率分布(查表)五、再來2個問題

=1/50000。

此外,指數分布有一個十分重要的性質,無記憶性:

python-指數分布介紹(scipy.stats.expon)一、指數分布問題:二、 指數分布三、機率密度圖四、累積機率分布(查表)五、再來2個問題

在上面問題中,路由器已使用時間與後續還能使用的時間無關,即我的路由器與鄰居家的路由器後續使用壽命是沒有差别的,即問題1和2的機率是一樣的。

三、機率密度圖

用python計算機率密度,可以直接使用公式計算,或者用scipy.stats.expon計算:

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

plt.rcParams['font.sans-serif']=['SimHei']#用來正常顯示中文标簽
plt.rcParams['axes.unicode_minus']=False#用來正常顯示負号

r = 1/50000
X = []
Y = []
for x in np.linspace(0, 1000000, 100000):
    if x==0:
        continue
 #   p = r*math.e**(-r*x)  #直接用公式算
    p = stats.expon.pdf(x, scale=1/r)  #用scipy.stats.expon工具算,注意這裡scale參數是标準差
    X.append(x)
    Y.append(p)
plt.plot(X,Y)
plt.xlabel("間隔時間")
plt.ylabel("機率密度")
plt.show()
           

結果:

python-指數分布介紹(scipy.stats.expon)一、指數分布問題:二、 指數分布三、機率密度圖四、累積機率分布(查表)五、再來2個問題

針對這個圖該如何了解呢?連續型随機變量的機率密度在某個點的機率密度并不是在這一點發生的機率。這裡引用一張圖

python-指數分布介紹(scipy.stats.expon)一、指數分布問題:二、 指數分布三、機率密度圖四、累積機率分布(查表)五、再來2個問題

這張圖說明事件發生的時間間隔大于1的機率是0.37,那麼時間間隔小于1的機率是0.63,這一點用下面的累積機率分布來看更直覺。

四、累積機率分布(查表)

累積機率用stats.expon.cdf(x, scale=1/r)計算,當然也可以用公式計算。

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

plt.rcParams['font.sans-serif']=['SimHei']#用來正常顯示中文标簽
plt.rcParams['axes.unicode_minus']=False#用來正常顯示負号

r = 1/50000
X = []
Y = []
for x in np.linspace(0, 1000000, 100000):
    if x==0:
        continue
    p = stats.expon.cdf(x, scale=1/r)  #用scipy.stats.expon工具算,注意這裡scale參數是标準差
    X.append(x)
    Y.append(p)
plt.plot(X,Y)
plt.xlabel("間隔時間")
plt.ylabel("累積機率")
plt.show()
           

結果:

python-指數分布介紹(scipy.stats.expon)一、指數分布問題:二、 指數分布三、機率密度圖四、累積機率分布(查表)五、再來2個問題

 用累積機率查表x=40000的值:

p = stats.expon.cdf(40000, scale=50000)
print(p)
           

結果是:0.5506710358827784

也就是說事件發生時間間隔小于40000的機率是0.55067,那麼問題1和2路由器在40000小時内壞的機率是0.55067,相應的可以使用40000小時以上的機率是1-0.55067=0.44933。

五、再來2個問題

醫院平均每小時出生3個嬰兒,問:

1、接下來15分鐘有嬰兒出生的機率是多少?

2、在接下來的15~30分鐘内有嬰兒出生的機率是多少?

問題1:

這裡嬰兒出生頻率

python-指數分布介紹(scipy.stats.expon)一、指數分布問題:二、 指數分布三、機率密度圖四、累積機率分布(查表)五、再來2個問題

,查表

p = stats.expon.cdf(15/60, scale=1/3)
print(p)
           

結果:0.5276334472589853

表明在15分鐘内有嬰兒出生的機率是0.5276。

注意這裡隻是表明有嬰兒出生的機率是0.5276,并沒有指定有多少個嬰兒出生,更沒有表明有1個嬰兒出生的機率是0.5276。

問題2:

由于指數分布是無記憶的,在接下來的15~30分鐘内一共15分鐘,有嬰兒出生的機率與問題1機率一樣,都是0.5276。

有些人不了解這個意思,錯誤的用cdf(30/60)-cdf(15/60)

p15 = stats.expon.cdf(15/60, scale=1/3)
p30 = stats.expon.cdf(30/60, scale=1/3)
print(p30-p15)
           

結果:0.2492363925925849

這個結果并不表明在接下來的15~30分鐘内有嬰兒出生的機率。

而是表明在0~15分鐘内沒有嬰兒出生并且在15~30分鐘内有嬰兒出生的機率是0.2492,或者表明接下來出生的第一個孩子時間在15~30分鐘的機率是0.2492。

author:藍何忠

email:[email protected]