离散相似度量的算法

Cub*_*bed 4 algorithm comparison machine-learning similarity

鉴于我有两个列表,每个列表包含一个公共超集的单独子集,是否有算法给我一个相似性度量?

例:

A = {John,Mary,Kate,Peter}和B = {Peter,James,Mary,Kate}

这两个名单有多相似?请注意,我不知道常见超集的所有元素.

更新:我不清楚,我可能以一种草率的方式使用'set'这个词.我很抱歉.澄清:秩序很重要.如果相同的元素在列表中占据相同的位置,则我们对该元素具有最高的相似性.相似性降低了相同元素的距离越远.如果元素仅存在于其中一个列表中,则相似性甚至更低.

我甚至可以添加额外的维度,即较低的指数具有更大的价值,因此aa [1] == b [1]的价值超过[9] == b [9],但这主要是因为我很好奇.

dou*_*oug 13

杰卡德指数(又名Tanimoto系数)正是用于记载在OP的问题用例.

Tanimoto coeff,tau,等于Nc 除以 Na + Nb - Nc,

tau = Nc / (Na + Nb - Nc)
Run Code Online (Sandbox Code Playgroud)
  • Na,第一组中的项目数

  • Nb,第二组中的项目数

  • Nc,两组的交集,或者a和b共有的唯一项的数量

这里的Tanimoto编码为Python函数:

def tanimoto(x, y) :
  w = [ ns for ns in x if ns not in y ]
  return float(len(w) / (len(x) + len(y) - len(w)))
Run Code Online (Sandbox Code Playgroud)