Rou*_*mar 29 python probability
我一直在尝试编写一个在中间使用softmax激活功能的程序.
现在,我有一个这样的概率列表:
P[0.10,0.25,0.60,0.05]
Run Code Online (Sandbox Code Playgroud)
P中所有变量的总和始终为1.
考虑到附加概率,我想要一种方法来选择列表的索引.或者,换句话说,返回的函数
0 - 10% of the time
1 - 25% of the time
2 - 60% of the time
3 - 5% of the time
Run Code Online (Sandbox Code Playgroud)
我完全不知道从哪里开始.任何帮助,将不胜感激.:)
Sal*_*ali 45
你可以通过numpy轻松实现这一目标.它有一个接受概率参数的选择函数.
np.random.choice(
['pooh', 'rabbit', 'piglet', 'Christopher'],
5,
p=[0.5, 0.1, 0.1, 0.3]
)
Run Code Online (Sandbox Code Playgroud)
Jus*_*eel 11
基本上,制作累积概率分布(CDF)数组.基本上,给定指数的CDF值等于P中等于或小于该指数的所有值的总和.然后生成0到1之间的随机数并进行二分搜索(如果需要,可以进行线性搜索).这是一些简单的代码.
from bisect import bisect
from random import random
P = [0.10,0.25,0.60,0.05]
cdf = [P[0]]
for i in xrange(1, len(P)):
cdf.append(cdf[-1] + P[i])
random_ind = bisect(cdf,random())
Run Code Online (Sandbox Code Playgroud)
当然你可以用类似的东西生成一堆随机索引
rs = [bisect(cdf, random()) for i in xrange(20)]
Run Code Online (Sandbox Code Playgroud)
生产
[2, 2, 3, 2, 2, 1, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 2, 2]
Run Code Online (Sandbox Code Playgroud)
(结果将会,并且应该有所不同).当然,对于如此少的可能索引而言,二元搜索是不必要的,但绝对推荐用于具有更多可能索引的分布.
这个问题相当于从分类分布中抽样。这种分布通常与多项分布混为一谈,后者对来自分类分布的多个样本的结果进行建模。
在 numpy 中,很容易使用numpy.random.multinomial从多项分布中采样,但不存在特定的分类版本。但是,它可以通过使用一次试验从多项分布中采样,然后在输出中返回非零元素来实现。
import numpy as np
pvals = [0.10,0.25,0.60,0.05]
ind = np.where(np.random.multinomial(1,pvals))[0][0]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31881 次 |
| 最近记录: |