2个集合列表之间的距离度量

数据挖掘 距离 杰卡德系数
2022-02-27 20:33:38

我有 2 个集合列表,我想计算距离。

set1 = [
  {'A', 'B', 'C'},
  {'A', 'D', 'X'},
  {'X', 'A'}
]

set2 = [
  {'A', 'B', 'C', 'D'},
  {'A', 'X'},
  {'X', 'A', 'B'}
]

因此,如果集合的集合相等,我希望距离为 0,如果不相等,则我希望距离大于 0。

确切的距离并不重要,因为我最终会汇总比较多种方法来预测这个集合列表,所以我真的只需要一个相对距离。

我最初的想法是 Jaccard 距离的总和,但我不确定结果如何。

1个回答

更新

对于成对比较,计算每个 Jaccard 距离并取范数。

from numpy.linalg import norm

norm([ 1 - len(set.intersection(*p)) / len(set.union(*p)) for p in zip(set1,set2) ])
0.5335936864527374

OP

您可以计算 Jaccard 距离。

set1然后set2OP 中

sc = list(map(lambda st: { ''.join(s) for s in st }, [set1, set2]))
1 - len(set.intersection(*sc)) / len(set.union(*sc))
0.8

希望这可以帮助。