【2.7.2】集合相似性--谷本系数(Tanimoto Coefficient)
Tanimoto系数由Jaccard系数扩展而来,又称为广义Jaccard相似系数,计算方式如下:
$$ E_{j} (A,B)= \frac{A * B}{ ||A||^{2} + ||B||^{2} - A*B }$$
其中A、B分别表示为两个向量,集合中每个元素表示为向量中的一个维度,在每个维度上,取值通常是[0, 1]之间的值(如果取值是二值向量0或1,那么Tanimoto系数就等同Jaccard距离),A\cdot B表示向量乘积,||A||^2表示向量的模,即
$$ ||A||^2 = \sqrt{\sum_{i=1}^{n}{A_i^2}} $$
Tanimoto系数容易与余弦相似度混淆在Tanimoto系数计算公式中,如果把分母的A\cdot B去掉,并将||A||^2+||B||^2替换为(||A||^2)*(||B||^2),就转成了余弦相似度(cosine similarity)。
$$ similarity=cos(\theta )=\frac{A\cdot B}{||A||^2\times ||B||^2}=\frac{\sum_{i=1}^{n}{A_i\times B_i}}{\sqrt{\sum_{i=1}^{n}{(A_i)^2}}\times \sqrt{\sum_{i=1}^{n}{(B_i)^2}}} $$
Tanimoto系数Python实现
import numpy as np
def tanimoto_coefficient(p_vec, q_vec):
"""
This method implements the cosine tanimoto coefficient metric
:param p_vec: vector one
:param q_vec: vector two
:return: the tanimoto coefficient between vector one and two
"""
pq = np.dot(p_vec, q_vec)
p_square = np.linalg.norm(p_vec)
q_square = np.linalg.norm(q_vec)
return pq / (p_square + q_square - pq)
这里是一个广告位,,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn