如何“反转”频率并保持其概率分布?

2024-03-29 11:39:17 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个频率列表。你知道吗

class 1 => 9
class 2 => 5
class 3 => 6
class 4 => 100

将其转换为概率,其中总和=#总发生率
0.075、0.0417、0.05、0.83

假设有500个类,我的目标是从这500个类中随机选择n个数,比如说20个,概率与频率不成正比。你知道吗

所以,我希望类1(频率=9)比类2(频率为5)和类3(频率为6)有更多被选中的概率,但比类4(频率为100)要小。同样的逻辑也适用于其他类。你知道吗

另外,我希望这些类被选中的概率是成比例的。第4班(83%)比第1班(7.5%)更可能被选中。同样,同样的逻辑也适用于其他类。你知道吗

回到我实际处理的问题,我有大约3000个类,其中95%的类的频率概率约为0.1%。少数5%的人说40%20%3%。(在这5%中,范围相当大,即使是这一组中最小的也明显大于其他95%)。除此之外,我还需要从

因此,我不能真正使用蒙特卡罗方法,当生成的随机数高于类概率时,我选择阈值并选择类。你知道吗

我朋友建议我们从1中减去这些数字。所以低概率现在有更高的变化被选中。但因为95%的概率很低。按照我朋友的建议去做,谁比谁都能保证95%的人几乎肯定地被选中。你知道吗


Tags: 方法目标列表朋友逻辑概率建议比例
1条回答
网友
1楼 · 发布于 2024-03-29 11:39:17

这很粗糙,但你可以这样做:

a = random.random()

if (a < 0.075) 
    print('1')

if (a >= 0.075 && a < 0.075 + 0.0417):
    print('2')

#etc...

将概率转换为变量列表,并在其中运行循环。然后做20次。这样行吗?你知道吗

相关问题 更多 >