从列表计算条件概率

2024-03-28 23:45:17 发布

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

试图从给定的列表中计算条件概率。假设我有以下清单:

[[ 1, 0, 0, 0, 1, 5],
 [ 0, 1, 0, 1, 0, 3],
 [ 1, 0, 0, 0, 1, 5],
 [ 0, 0, 1, 1, 0, 2],
 [ 0, 0, 1, 0, 1, 1]]

每个“列”代表一个二进制属性,最后一个“列”代表类属性。要找到属性的条件概率,我需要计算P(X|Y)

在Python列表中,如何

  1. 如果属性是Y类,则计算该属性的频率数
  2. 计算课程的总频率

上述内容在熊猫中很容易实现,但我实际上不知道如何使用Python列表来解决它


Tags: 内容列表属性二进制代表概率条件课程
2条回答

frequency of the attribute given it is a Y class?

class_ = 3
attr_index = 1
attr_freq_given_cls = sum(a_list[attr_index]
                          for a_list in list_of_lists
                          if a_list[-1] == class_)

由于属性来自{0, 1},因此summing产生发生次数;用-1进行索引可以得到标签

count the total frequency for the class?

from collections import Counter
class_freqs = Counter(a_list[-1] for a_list in list_of_lists)

祝你好运,天真的贝斯:)

您可以按照以下思路构建数据结构:

from collections import defaultdict

d = defaultdict(lambda: defaultdict(lambda: [0, 0]))

for *values, key in matrix:
    for i, v in enumerate(values):
        d[key][i][v] += 1

然后计算条件概率,如下所示:

def prob(k, i):
    false, true = d[k][i]  # counts of vals 0/1 in col i for class k
    return true / (true + false)

>>> prob(5, 3)  # for class 5, column 3 is this likely to be 1
0.0
>>> prob(5, 4)
1.0

相关问题 更多 >