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)