python 拟合幂律分布_几分钟搞懂统计概率中的几个经典分布

e11193f2a66d7306afba9aef51f21197.png

概念理解

在介绍经典分布之前,先来认识几个名词。

什么是‘统计’,即对过去数据的汇总,分析,总结。

什么是‘概率’,是一个数值,表示某件事发生的可能性大小。(一般概率是在过去经验的总结基础上,对未发生事件的预测)

什么是‘随机事件’,在一定条件下,可能发生,也可能不发生的事件。

什么是‘随机变量’,将随机事件结果映射到一个数字化的函数上,通常用大写字母X 表示。包括两种类型:

  1. 离散型随机变量
  2. 连续性随机变量

什么是‘概率分布’,多次随机事件,得到多个结果,这些结果呈现一定的规律分布,据此可以得到随机实验所有可能的结果以及结果对应的概率。所以概率分布就是随机事件所有的实验结果的概率。具体有这几个经典的概率分布:

e229fe208d2ed894851a749d824a43d0.png

如何计算概率:

  1. 离散随机变量→概率质量函数PMF(probability mass function)
  2. 连续随机变量→概率密度函数PDF(probability density function)

怎么学习概率分布

遵循以下流程:

用途→如何检验→计算概率→python实现

离散型概率分布

· 伯努利分布

(1)定义:这是一个简单的实验,假设一个事件只有发生或者不发生两种可能,那么假设发生的概率为P,不发生的概率就是1-P,这就是伯努利分布。

生活中很多事件都符合伯努利分布,比如抛硬币是正面还是反面,生孩子是男孩还是女孩。当然也可以把很多事情转化为伯努利事件,不如是否换癌症(不管哪种癌症)。

(2)如何检验

// 每次的事件都有两个可能的结果(成功或者失败)

// 每次成功的概率都相等,用P 表示

//想知道其中一个结果的概率

(3)代码实现

# 第一步:定义随机事件变量X
X =  np.arange(0,2)

# 求对应的概率
nlist = stats.bernoulli.pmf(X,0.5)

# 绘图
plt.plot(X,nlist,marker='o',
         linestyle='')
plt.vlines(X,[0,0],nlist)
plt.xlabel('随机变量:抛一次硬币', fontsize=13)
plt.ylabel('概率')
plt.title('伯努利分布,p=0.50')
plt.show()

5d13c0e7046bf0dd4ea9849d02f24897.png

· 二项分布

(1)定义:简单理解就是多个相互独立的伯努利事件的概率分布

用抛硬币举例,每一次抛硬币是相互独立的(就是说我第一次和第三次抛硬币的结果是没有影响的),假设硬币朝上的概率为P,则朝下的概率为1-P。抛n次硬币,其中k次朝上的概率结果就是二项分布。

(2)如何检验

// 做某件事的次数是固定的,用n表示

// 每次的事件都有两个可能的结果(成功或者失败)

// 每次成功的概率都相等,用P 表示

// 想知道第k次成功的概率是多少

(3)python代码实现

n=5  #构建事件次数
p=0.5  #事件成功的概率
X = np.arange(0,n+1)   # 构造事件X

# 计算每个事件发生的概率
nlist =  stats.binom.pmf(X,5,p)
array([ 0.03125,  0.15625,  0.3125 ,  0.3125 ,  0.15625,  0.03125])

# 绘图
plt.plot(nlist,marker='o',linestyle='')
plt.vlines(X,0,nlist)
plt.xlabel('随机变量 :抛硬币正面朝上的次数', fontsize=12)
plt.ylabel('概率')
plt.title('二项式分布,n=5,p=0.50')
plt.show()

87c3985f6215678c612ba800cdbb824a.png

· 几何分布

(1)定义:在n次伯努利试验中,试验k次才得到第一次成功的机率。详细地说,是:前k-1次皆失败,第k次成功的概率。

(2)如何检验:

// 做某件事的次数是固定的,用n表示,n个事件相互独立

// 每个事件都有两个可能的结果(成功或失败)

// 每一次事件成功的概率不变,用p表示

// 想知道第k次成功做某件事的概率

(3)怎么计算

前(k-1)次失败,第k次成功

(4)python实现

k =5   # 构建事件次数
p =0.6 # 事件成功的概率
X =  np.arange(1,k+1) 
nlist =  stats.geom.pmf(X,p)

# 绘图
plt.plot(X,nlist,marker='o',
         linestyle='')
plt.vlines(X,0,nlist)
plt.xlabel('随机变量 :表白k次首次成功', fontsize=12)
plt.ylabel('概率')
plt.title('几何分布,p=0.60')
plt.show()

4e9d59a3cef047ca7de551ffdd63c530.png

· 泊松分布

(1)定义:适合于描述单位时间(或空间)内随机事件发生的次数

(2)如何检验:

// 事件相互独立

// 在任意相同的时间内,事件发生的概率相同

// 你想知道某个时间内发生某件事k次的概率

(3)如何计算:

给出时间范围内,某件事发生的平均次数事

求这段时间内,发生k次事的概率:

(4)python 实现

mu =2 # 定义给定时间内发生事件的次数
k =4 # 求给定时间内事件发生4次的概率
# 包含了发生0次,1次,2次,3次,4次
X = np.arange(0,5)

plist =  stats.poisson.pmf(X,mu)

# 绘图
plt.plot(X,plist,marker='o',
         linestyle='')
plt.vlines(X,0,plist,color='tomato',linewidth=3)
plt.xlabel('给定时间内发生k次事',fontsize=12)
plt.ylabel('概率',fontsize=12)
plt.title('泊松分布',fontsize=17)
plt.show()

ebf0726f5bfd27f2bb208fb107d7e1b1.png

连续型概率分布

· 正态分布

(1)定义:概率分布满足中间高、两边低的“钟形曲线”的就是正态分布,形如下图:

26586c32c99864f3aedd875cab096162.png

曲线越高,也就代表着这个区别的概率越密集,这里面积相当于概率。

下图中的三条曲线f (x),就是概率密度函数,各种形式的概率就是相对应的曲线下面积。

0fd464d63345885fc3529ca8741b76b6.png

(2)平均值和标准差

一谈到正态分布,我们自然就想到两个参数:平均值和标准差

45d915261494036ef486ecfc0fbe7e95.png

从此图可以看出,1)概率密度曲线在均值处达到最大,并且对称;2)均数的大小决定了曲线的位置,标准差的大小决定了曲线的胖瘦,标准差越小,意味着大多数变量值离均数的距离越短,因此大多数值都紧密地聚集在均数周围。3)绝大多数数据处于3个标准差以内,所以如果某个数据超出了3个标准差,可以判定为异常值,在数据清洗环节清除。

(3)查正态表求概率

接下来,我们通过一个例子来看如何通过查表法计算正态分布变量在某个区间的概率。

举例:某微信公众号的点赞数满足正态分布,已知点赞数的均值为μ,标准差为σ,求点赞数低于1.5的概率?

step1:确定概率范围 P(k < 1.5)

step2:求标准分

这里要讲一下为什么要求标准分z。因为我们的标准正态分布表是满足均值为0,标准差为1的正态分布的概率分布。所以其他类型的正态分布要经过标准化。这个过程并不会改变形状胖瘦,只是位置发生了变化。

d64b606f0c746f17336523fed4acbdb4.png

step3:查正态分布表得到概率。标准正态分布https://www.shuxuele.com/data/standard-normal-distribution-table.html

9deca4d24a696314e2716a7e96b22283.png

如果是求取其他范围的概率,可以进行思维转换,具体见下图:

a6294f9919a23199b09d76b427a8aa3b.png

· 幂律分布

为什么有了正态分布,还有出现幂律分布呢?是因为有些事件理论上是正态分布,真实却都遵循着幂律分布。

例如财富分布,极少部分人占据了绝大部分的社会财富,幂律分布其实更加贴近现实。

3b30179ed0fc42324f657abbc2a1bfa8.png

由于数据分析领域,常见的还是正态分布,这里就不过多展开讨论幂律分布。

学习各种概率分布,掌握统计概率思维,能够帮助我们在工作,生活中做出更加明智的决策。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
幂律分布是一种常见的概率分布模型,它描述了一些自然或社会现象的非常规规律性现象。幂律分布的特点是:随机变量的概率密度函数或概率质量函数与变量之间呈幂律关系。 在Python,可以使用scipy库进行幂律分布拟合。具体步骤如下: 1. 导入所需库:首先需要导入`scipy.stats`和`matplotlib.pyplot`模块。 2. 定义数据:将需要进行幂律拟合的数据存储在一个列表或数组。 3. 选择拟合的范围:根据数据的实际情况,选择进行拟合的范围。 4. 进行拟合:使用`scipy.stats`的`powerlaw`函数进行拟合拟合的方法可以选择最大似然估计。 5. 绘制结果:使用`plot`函数将原始数据和拟合结果绘制在一张图表上。 下面是一个示例代码,演示了如何进行幂律分布拟合: ```python import scipy.stats as stats import matplotlib.pyplot as plt # 定义数据 data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 进行拟合 fit = stats.powerlaw.fit(data) # 绘制结果 plt.hist(data, bins=10, density=True, alpha=0.5, color='blue') x = range(1, 11) plt.loglog(x, stats.powerlaw.pdf(x, *fit), 'r-', lw=2) plt.xlabel('X') plt.ylabel('Density') plt.show() ``` 这段代码首先导入了所需的库,然后定义了一个数据,接着使用`powerlaw.fit`函数进行拟合,最后使用`loglog`函数将原始数据以及拟合结果绘制在同一张图表上。这里定义的数据是一个简单的例子,实际可以根据需求进行更改。 通过上述步骤,我们就可以在Python对数据进行幂律分布拟合,并可视化展示拟合结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值