什么时候两个分区相同?
如果他们具有完全相同的成员,可能。
因此,如果您只想测试身份,则可以执行以下 *** 作:
用分区中 最小的 对象ID 替换每个分区ID 。
然后,当且仅当此表示形式相同时,两个分区才是相同的。
在上面的示例中,假设矢量索引1 .. 7是您的对象ID。然后我将得到规范形式
[ 1 1 1 4 4 6 7 ] ^ first occurrence at pos 1 of 1 in l_1 / 2 in l_2 ^ first occurrence at pos 4
对于l_1和l_2,而l_3规范化为
[ 1 1 1 4 4 6 6 ]
为了更加清楚,这是另一个示例:
l_4 = [ A B 0 D 0 B A ]
规范化为
[ 1 2 3 4 3 2 1 ]
因为簇“ A”的首次出现在位置1,“ B”在位置2等。
如果要测量两个聚类的 相似 程度,一种好的方法是查看对象对的precision / recall /
f1,当且仅当a和b属于同一聚类时,对象对(a,b)存在。
更新: 由于有人声称这是二次方的,因此我将进一步澄清。
要产生规范形式,请使用以下方法(实际的python代码):
def canonical_form(li): """ Note, this implementation overwrites li """ first = dict() for i in range(len(li)): v = first.get(li[i]) if v is None: first[li[i]] = i v = i li[i] = v return liprint canonical_form([ 1, 1, 1, 0, 0, 2, 6 ])# [0, 0, 0, 3, 3, 5, 6]print canonical_form([ 2, 2, 2, 9, 9, 3, 1 ])# [0, 0, 0, 3, 3, 5, 6]print canonical_form([ 2, 2, 2, 9, 9, 3, 3 ])# [0, 0, 0, 3, 3, 5, 5]print canonical_form(['A','B',0,'D',0,'B','A'])# [0, 1, 2, 3, 2, 1, 0]print canonical_form([1,1,1,0,0,2,6]) == canonical_form([2,2,2,9,9,3,1])# Trueprint canonical_form([1,1,1,0,0,2,6]) == canonical_form([2,2,2,9,9,3,3])# False
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)