0

我正在做一个贝叶斯概率项目,我需要根据新信息调整概率。我还没有找到一种有效的方法来做到这一点。我要做的是从不同场景的等概率列表开始。前任。有 6 个人:E、T、M、Q、L 和 Z,他们各自的初始被选中概率表示为

myList=[.1667, .1667, .1667, .1667, .1667, .1667]

新信息显示,按字母顺序排在前三分之一的人共有 70% 的机会被选中。制作了一个新列表,按名称的字母顺序(E、L、M、Q、T、Z)排序,其中仅包含新信息。(.7/.333=2.33, .3/.667=.45)

    newList=[2.33, 2.33, .45, .45, .45, .45)

我需要一种方法来将 newList 与 myList 相同,这样我就可以在列表理解中乘以正确的值,并达到调整概率。拥有一个一致的顺序很重要,因为该过程将重复多次,每次都有不同的标准(元音,最接近 P 等),并且在一个包含大约 1000 个项目的列表中。每个 newList 可以改为一个 newDictionary,然后一旦创建了调整条件,就可以将它们排序到一个列表中,但是转换多个字典似乎效率低下。是吗?有没有一种简单的方法可以做到这一点我完全错过了?

谢谢!

4

2 回答 2

1

对于它的价值,您可以为 Python 中的方法的速度做的最好的事情是使用 numpy 而不是标准类型(因此您将使用预编译的 C 代码来执行算术运算)。这将导致速度急剧增加。无论如何,Numpy 数组都有固定的顺序,语法更直接地适用于数学运算。您只需要考虑如何将操作表示为矩阵操作。例如你的例子:

myList = np.ones(6) / 6.
newInfo = np.array( [.7/2, .7/2, .3/4, .3/4, .3/4, .3/4] )
result = myList * newInfo

由于两个向量都有单位和,因此无需标准化(我不确定您在示例中做了什么,我承认,所以如果我错过了一个微妙之处,请告诉我),但如果您确实需要它是微不足道的:

result /= np.sum(result)
于 2012-11-26T13:00:08.697 回答
0

尝试将您的信息存储为元组列表:

bayesList = [('E', 0.1667), ('M', 0.1667), ...]

你的列表理解可以是

newBayes = [(person, prob * normalizeFactor) for person, prob in bayesList]

在设置列表理解之前计算了您的 normalizeFactor

于 2012-11-22T06:27:55.083 回答