机器学习:软件工程方法与实现
上QQ阅读APP看书,第一时间看更新

3.1.6 指数分布

在概率理论和统计学中,指数分布是描述泊松过程中的事件之间的时间的概率分布,即事件以恒定平均速率连续且独立地发生的过程。

指数函数的一个重要特征是无记忆性(Memoryless Property,又称遗失记忆性)。这表示如果一个随机变量呈指数分布,当s,t>0时有P(T>t+s|T>t)=P(T>s)。即,如果T是某一元件的使用寿命,已知元件使用了t小时,它总共使用至少s+t小时的条件概率,与从开始使用时算起它使用至少s小时的概率相等。指数分布的概率密度函数由式(3-6)给出:

其中λ>0是分布的一个参数,常被称为率参数(rate parameter),即每单位时间内发生某事件的次数。指数分布的随机变量X的均值和方差由下式给出。

均值:E(X)=1/λ

方差:Var(X)=(1/λ)2

以上我们对常见的数据分布做了基本的介绍,下面结合SciPy的统计函数Stats.norm来展示正态分布的概率密度函数、分布函数、分位数、随机数生成以及统计指标等,其他分布函数使用方法类似,不再赘述。


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

#概率密度函数 返回N(mu,sigma^2)的概率密度函数在 x 处的值 
pdf = stats.norm.pdf([-0.67448975,0,0.67448975],loc = 0,scale = 1)  
print('pdf: {}'.format(pdf) )

输出结果为:


pdf: [0.31777657 0.39894228 0.31777657]

#概率分布函数 返回N(mu,sigma^2)的概率密度函数在 负无穷 到 x 上的积分,也就是概率分布函数的值
cdf = stats.norm.cdf([-0.67448975, 0, 0.67448975],loc = 0,scale = 1) 
print('cdf: {}'.format(cdf) )

输出结果为:


cdf: [0.25 0.5  0.75]

#累计分布函数cdf的逆函数,相当于是求概率分布函数的分位数 
ppf = stats.norm.ppf([0.25, 0.5, 0.75])
print('ppf: {}'.format(ppf) )

输出结果为:


ppf: [-0.67448975  0.          0.67448975]

#使用ppf和np.linspace 生成数据,求pdf。绘制pdf曲线
cdf_n = np.linspace(stats.norm.ppf(0.01,loc=0,scale=1),stats.norm.ppf(0.99,loc=0,scale=1),100)  
plt.plot(stats.norm.pdf(cdf_n,loc=0,scale=1),'b-',label = 'norm')

输出如图3-1所示。

图3-1 pdf曲线


#绘制cdf曲线 
plt.plot(cdf_n, stats.norm.cdf(cdf_n,loc=0,scale=1),'b-',label = 'norm')

输出如图3-2所示。


#rvs 生成服从指定分布的随机数,设置随机数种子random_state=1
rvs_n = stats.norm.rvs(loc = 0,scale = 1,size =10000,random_state=1)
print('rvs_n: {}'.format(rvs_n))

输出结果为:


rvs_n: [ 1.62434536 -0.61175641 -0.52817175 ... -1.01414382 -0.06269623
 -1.43786989]

#describe 统计描述函数 
describe = stats.describe(rvs_n)
print('describe: {}'.format(describe))

图3-2 cdf曲线

输出结果为:


describe: DescribeResult(nobs=10000, minmax=(-3.656440099254795, 4.026849044547378), mean=0.00977265669910497, variance=0.9976729288445313, skewness=0.0249045712813166, kurtosis=0.028669537652855848)