在多个列表中循环以计算概率得分



我有4个类似于以下列表的列表。这些列表包含来自4个不同分类器的标签预测。由于这是一个多标签分类问题,每个实例最多接收5个标签(1表示存在标签,0表示不存在标签(。

a = [[0, 1, 1, 1, 1],  [1, 0, 0, 1, 1],  [0, 1, 0, 0, 1]]
b = [[0, 0, 0, 1, 1],  [0, 0, 0, 1, 0],  [1, 0, 1, 0, 1]]
c = [[1, 0, 1, 1, 1],  [0, 0, 0, 1, 1],  [0, 0, 1, 0, 1]]
d = [[1, 0, 1, 1, 1],  [0, 0, 0, 1, 0],  [0, 1, 1, 0, 1]]

我想基于4个分类器的预测来计算每个标签被分配给每个实例的概率,即接收标签的概率。为了实现我的目标,我尝试了以下代码:

probs = []
for p in zip(a, b, c, d):
for s in p:
x = (sum(s)) / 4
count.append(x)
print(probs)

有了这个代码,我得到了下面的输出,这不是我需要的。

[1.0, 0.5, 1.0, 1.0, 0.75, 0.25, 0.5, 0.25, 0.5, 0.75, 0.5, 0.75]

我的目标输出是:

probs = [[0.5,0.25,0.75,1.0,1.0], [0.25,1.0,1.0,1.0, 0.5], 
[0.25,0.5,0.75,1.0,1.0]]

注意,如果所有分类器都为某个实例分配了相同的标签,那么无论它们是0还是1(存在还是不存在(,概率都应该是1.0。我知道这并不复杂,我只是不知道该怎么做。谢谢

尝试:

a = [[0, 1, 1, 1, 1], [1, 0, 0, 1, 1], [0, 1, 0, 0, 1]]
b = [[0, 0, 0, 1, 1], [0, 0, 0, 1, 0], [1, 0, 1, 0, 1]]
c = [[1, 0, 1, 1, 1], [0, 0, 0, 1, 1], [0, 0, 1, 0, 1]]
d = [[1, 0, 1, 1, 1], [0, 0, 0, 1, 0], [0, 1, 1, 0, 1]]

out = []
for p in zip(a, b, c, d):
out.append([])
for r in zip(*p):
v = sum(r) / 4
out[-1].append(1.0 if v == 0.0 else v)
print(out)

打印:

[
[0.5, 0.25, 0.75, 1.0, 1.0],
[0.25, 1.0, 1.0, 1.0, 0.5],
[0.25, 0.5, 0.75, 1.0, 1.0],
]

最新更新