假设我有大量包含(无序)元素组合的集合,并且我想确定哪些元素倾向于一起出现。
例如
给定以下集合:
{a,e,g}
{a,e,h}
{a,e,i}
{b,f,j}
{b,f,k}
{b,f,l}
{d,c,m}
{d,c,n}
{d,c,o}
两个元素倾向于出现在同一集合中的元素对将具有更短的距离:
# Low-distance pairs:
{a,e}, {b,f}, {d,c}
# Medium-distance pairs
{a,g}, {b,j}, {d,m}, ...
# High-distance pairs:
{g,h}, {j,n}, {b,f}, ...
目前
我正在使用自定义距离度量来实现 DBSCAN。我在两个元素之间使用以下距离度量:
d(a,b) = 1 - numsets(a, b) / (numsets(a,!b) + numsets(b,!a))
其中d(a,b)
表示元素之间的距离a
和b
。Whilenumsets
表示有多少个集合满足某些条件:
numsets(a, b)
- 包含a
和的集合的数量b
numsets(a,!b)
- 包含a
但不包含的集合数b
这个解决方案应该可以实现目标,但它不是一个很好的解决方案,我在 SE 上找不到这个问题。在解决问题方面,有没有更合理的距离度量?在实施方面,有没有更好的方法来做到这一点?