欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > python数据分析,模拟概率论问题的库,特别是条件概率。使用特定的PMF或PDF创建自定义的单一或联合分布以获取概率表并基于概率函数生成数据也很有用

python数据分析,模拟概率论问题的库,特别是条件概率。使用特定的PMF或PDF创建自定义的单一或联合分布以获取概率表并基于概率函数生成数据也很有用

2024/10/24 10:26:04 来源:https://blog.csdn.net/zhangfeng1133/article/details/140291667  浏览:    关键词:python数据分析,模拟概率论问题的库,特别是条件概率。使用特定的PMF或PDF创建自定义的单一或联合分布以获取概率表并基于概率函数生成数据也很有用

介绍

这是一个模拟概率论问题的库,特别是条件概率。使用特定的PMF或PDF创建自定义的单一或联合分布以获取概率表并基于概率函数生成数据也很有用。

如何安装?

pip install pprobs

概率模拟器

它模拟概率论问题,尤其是条件概率。

示例1

我们想通过定义一些事件来获得一些信息。

  • P(A) = 0.3
  • P(B) = 0.2
  • P(A^B) = 0.1
  • A and B are dependent
  • P(A+B) = ? , P(A|B) = ?
from pprobs.simulation import Simulatorspace = Simulator()space.add_event('A', 0.3)
space.add_event('B', 0.2)
space.add_event('A^B', 0.1)prob_1 = space.get_prob('A+B') # A+B means union of A and B
prob_2 = space.get_prob('A|B')print(prob_1, prob_2) # 0.4  0.5

示例2

在100名跑车购买者中,40人购买了报警系统,30人购买了斗式座椅,20人购买了报警系统和斗式座椅。如果一个随机选择的汽车购买者买了一个报警系统,他们也买了桶形座椅的概率是多少?

经过统计显示

  • P(SEAT) = 0.3
  • P(ALARM) = 0.4
  • P(SEAT ^ ALARM) = 0.2
  • P(SEAT | ALARAM) = ?
from pprobs.simulation import Simulatorspace = Simulator()space.add_event('SEAT', 0.3).add_event('ALARM', 0.4) # We can also add events sequentially in a line (chaining) 
space.add_event('SEAT^ALARM', 0.2) # A^B means intersection of A & Bprint(space.get_prob('SEAT|ALARM')) # 0.5

示例3

总共有1%的人有某种遗传缺陷。90%的基因检测发现缺陷(真阳性)。9.6%的测试是假阳性。如果一个人的测试结果是阳性,那么他们真的有基因缺陷的几率有多大?

经过统计显示

  • P(GEN_DEF) = 0.01
  • P(POSITIVE|GEN_DEF) = 0.9
  • P(POSITIVE|GEN_DEF!) = 0.096
  • P(GEN_DEF|POSITIVE) = ?
space = Simulator()space.add_event('GEN_DEF', 0.01)
space.add_event('POSITIVE|GEN_DEF', 0.9) # A|B means A given B
space.add_event('POSITIVE|GEN_DEF!', 0.096) # A! means complement of Aprint(space.get_prob('GEN_DEF|POSITIVE')) # 0.0865

实例4

鲍勃明天有一个重要的会议,他必须在早上准时到达办公室。他的一般交通方式是开车,在正常情况下(没有汽车故障),他准时到达的概率是0.3。他可能有汽车故障的概率是0.2。如果汽车出了问题,他将不得不乘火车,而10列火车中只有2列能让他准时到达办公室。

经过黑客地球

  • P(ON_TIME|CAR_OK) = 0.3
  • P(ON_TIME|CAR_OK!) = 2/10 => Go by train
  • P(CAR_OK!) = 0.2
  • P(ON_TIME) = ?
space = Simulator()space.add_event('ON_TIME|CAR_OK', 0.3)
space.add_event('ON_TIME|CAR_OK!', 2/10)
space.add_event('CAR_OK!', 0.2)prob = space.get_prob('ON_TIME') # Probability of ON_TIMEprint(prob) # 0.28

分布模拟器

使用特定的PMF或PDF创建自定义的单一或联合分布对于获取概率表和基于概率函数生成数据非常有用。

示例1

假设我们有一个具有特定PMF的离散随机变量。我们希望基于这个变量生成许多数据。正如您在第二个示例中看到的,1的概率最大,复制次数最多,4的概率最小,复制次数较少。

from pprobs.distribution import Discrete# First 
def pmf(x):return 1 / 6dist = Discrete(pmf, [1, 2, 3, 4, 5, 6]) # The second is the sample space of our PMFprint(dist.generate(15)) # [4, 3, 1, 6, 5, 3, 5, 3, 5, 4, 2, 5, 6, 1, 6]# Second
def pmf(x):return 1 / xdist = Discrete(pmf, [1, 2, 3, 4])
print(dist.generate(15)) # [1, 2, 1, 1, 1, 4, 3, 1, 1, 3, 2, 4, 1, 2, 2]

示例2

假设我们有一个特定PDF的连续随机变量。

from pprobs.distribution import Continuousdef pdf(x):if x > 1:return x / x ** 2return 0dist = Continuous(pdf, [1, 6]) # The second is the sample interval of our PDFprint(dist.generate(15)) # [2.206896551724138, 4.103448275862069, ..., 5.655172413793104, 6.0]

示例3

假设我们有一个具有特定PDF的连续联合变量。

from pprobs.distribution import Jointdef pdf(x, y):if x > 1:return 1 / (x * y)return 0dist = Joint(pdf, [1, 6], [3, 10]) # The second and third are the intervals of our PDFprint(dist.probability_table(force=20)) # if force gets more, many number will generate
输出:

X/Yx=3.0X=3.7...X=10
X=1.00.0000.000...0.000
...............
X=6.00.0550.044...0.016
print(dist.get_prob(3.5, 3.5)) # 0.081 is P(X=3.5, Y=3.5)
print(dist.get_prob([1, 6], 4)) # 0.041 is P(Y=4) because X includes its whole domain
print(dist.get_prob(2.1, [1, 4])) # 0.206 is P(X=2.1, Y in [1, 4])

实例4

假设我们有一个具有特定PMF的离散联合变量。

from pprobs.distribution import Jointdef pmf(x, y):if x > 1:return 1 / (x * y)return 0dist = Joint(pmf, range(1, 6), range(6, 10)) # The second and third are the sample space of our PMFprint(dist.probability_table()) 
输出:

X/YY=6Y=7Y=8Y=9
X=10.0000000.0000000.0000000.000000
X=20.0833330.0714290.0625000.055556
X=30.0555560.0476190.0416670.037037
X=40.0416670.0357140.0312500.027778
X=50.0333330.0285710.0250000.022222
print(dist.get_prob(2, range(6, 10))) # 0.272 is P(X=2)
print(dist.get_prob(2, 6)) # 0.083 is P(X=2, Y=6)

谢谢你在Github上给我一颗星。mokar2001 (MohammadReza KarimiNejad) · GitHub

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com