python实现几种相似度计算方法

本文均将相似度值在0-1范围内

欧式距离

在这里插入图片描述
归一到0-1之间:
在这里插入图片描述
代码实现:

def euclid_sim(in_a, in_b):
    return 1 / (1 + linalg.norm(in_a - in_b))

皮尔逊相关系数

在这里插入图片描述
归一到0-1之间:
在这里插入图片描述
代码实现:

def pears_sim(in_a, in_b):
    return 0.5 + 0.5 * corrcoef(in_a, in_b)[0][1]

余弦相似度

在这里插入图片描述
归一到0-1之间:
在这里插入图片描述
代码实现:

def cos_sim(in_a, in_b):
    return 0.5 + 0.5 * float(in_a * in_b.T) / linalg.norm(in_a) / linalg.norm(in_b)

示例

from numpy import linalg, mat, corrcoef


def euclid_sim(in_a, in_b):
    return 1 / (1 + linalg.norm(in_a - in_b))


def pears_sim(in_a, in_b):
    return 0.5 + 0.5 * corrcoef(in_a, in_b)[0][1]


def cos_sim(in_a, in_b):
    return 0.5 + 0.5 * float(in_a * in_b.T) / linalg.norm(in_a) / linalg.norm(in_b)


def main():
    my_mat = mat([[2, 5, 2],
                  [0, 5, 4],
                  [0, 5, 2],
                  [4, 3, 1],
                  [4, 3, 2]])
    print(euclid_sim(my_mat[0, :], my_mat[4, :]))
    print(pears_sim(my_mat[0, :], my_mat[4, :]))
    print(cos_sim(my_mat[0, :], my_mat[4, :]))


if __name__ == '__main__':
    main()

输出

0.2612038749637414
0.5
0.9363930240887843

猜你喜欢

转载自blog.csdn.net/weixin_43793472/article/details/88638532
今日推荐