【发布时间】:2021-05-25 12:30:34
【问题描述】:
我有一组记录 ID 对,并且对于每一对,这些记录实际上属于彼此的相应概率。每对都是唯一的,但任何给定的 ID 都可能是多对的一部分。
例如:
import pandas as pd
df = pd.DataFrame(
{'ID_1': [1,1,1,2],
'ID_2': [2,4,3,3],
'w': [0.5,0.5,0.6,0.7]}
)
df
ID_1 ID_2 w
0 1 2 0.5
1 1 4 0.5
2 1 3 0.6
3 2 3 0.7
(请注意,由于问题的外部因素,并非每个 ID 都必须分配给每个其他 ID。可以包括这些对并给它们概率为 0。) 如何找到每个 ID 分配给另一个 ID 不超过一次的对集合(但允许根本不分配一个 ID),从而最大化对属于彼此的总体可能性。
我想要执行此操作的数据框非常大,因此将其设置为最大似然问题似乎有点过头了。我不是计算机科学家,但我认为可能有一种算法可以解决这个问题 - 在 python 中实现最佳。
我现在这样做的方式有点贪心,这可能不一定会导致最佳解决方案。我从排名最高的一对开始。我将它放入最后一组并删除所有涉及该组中任何 ID 的对。我以相同的方式继续从更新集中的下一个排名较低的对,直到没有剩下的对。
(抱歉,如果这实际上是此类问题的错误论坛。)
【问题讨论】: