python-指数分布介绍(scipy.stats.expon)
一、指數分布問題:
有一種品牌的路由器,據廠家統計知該路由器平均壽命是50000小時,現在有2個問題:
1、去年我買了一個這樣的路由器,使用到現在已經8000小時了一點問題都沒有,那我這臺路由器還能用40000小時以上的概率是多少?
2、 我現在推薦鄰居也買了一個這樣的路由器,鄰居這臺路由器可以用40000小時以上的概率是多少?
?
二、 指數分布
泊松分布描述的是事件發生次數,而指數分布描述的是事件發生的時間間隔。
指數分布主要用于描述電子元器件的壽命,其為連續型分布,概率密度函數為:
分布函數為:
期望:?, ? 方差:?
表示事件發生的頻率,在這里路由器平均壽命是50000小時,那么可以認為路由器平均50000小時壞一次,那么路由器壞的頻率是=1/50000。
此外,指數分布有一個十分重要的性質,無記憶性:
在上面問題中,路由器已使用時間與后續還能使用的時間無關,即我的路由器與鄰居家的路由器后續使用壽命是沒有差別的,即問題1和2的概率是一樣的。
?
三、概率密度圖
用python計算概率密度,可以直接使用公式計算,或者用scipy.stats.expon計算:
from scipy import stats import math import numpy as np import matplotlib.pyplot as pltplt.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()結果:
針對這個圖該如何理解呢?連續型隨機變量的概率密度在某個點的概率密度并不是在這一點發生的概率。這里引用一張圖
這張圖說明事件發生的時間間隔大于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 pltplt.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:continuep = 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()結果:
?用累積概率查表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:
這里嬰兒出生頻率,查表
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:lanhezhong@163.com
總結
以上是生活随笔為你收集整理的python-指数分布介绍(scipy.stats.expon)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: socket网络通信实现与优化
- 下一篇: redis实现分布式锁(乞丐版)