计算距离和相似度的常用算法

相似度是衡量多个数据对象之间相似的数值,通常位于0-1之间。
相异度与之对应,0-与数据集有关,可能超过2。

常用计算距离和相似度的方法:
①欧几里得距离/欧氏距离
衡量的是多维空间中各个点的之间的绝对距离。是比较直观常见的相似度算法。
欧氏距离越小,相似度越大;欧氏距离越大,相似度越小。比较符合人类记忆,距离越小越像。(啊这是我看到过欧几里得最简单的公式了呜呜
欧几里得公式
代码实现:

#输入:x,y为维度相同的包含各特征值的list
#输出:输入值x,y的欧氏距离
def dis_euc(x, y):
    return sum([(x[i]-y[i])**2 for i in range(len(x))])**0.5

②明科夫斯基距离(欧氏距离和曼哈顿距离的推广)
又叫明氏距离或闵式距离。下面公式中,p=1时为曼哈顿距离公式,p=2时为欧式距离公式,p取无穷时的极限情况下,可以得到切比雪夫距离
明科夫斯基距离
代码实现:

#输入:x,y为维度相同的包含各特征值的list,p为int
#输出:输入值x,y的明可夫斯基距离
def dis_man(x, y, p):
    return sum([(x[i]-y[i])**p for i in range(len(x)])**(1/p)

③余弦距离
就是求两个向量夹角的余弦值,其相似性范围为-1到1,方向相反为-1,方向相同为1,相互独立为0。
余弦距离
代码实现:

#输入:x,y为维度相同的包含各特征值的list
#输出:输入值x,y的余弦相似度
def sim_cos(x, y):
    num = sum([x[i]*y[i] for i in range(len(x))])
    den = sum([x[i]**2 for i in range(len(x))])**0.5\
     *sum([y[i]**2 for i in range(len(y))])**0.5
    return num / den

④杰卡德相似系数/Jaccard相似度
两个集合A和B的交集元素在A、B的并集中所占的比例,称为两个集合的杰卡德相似系数,用负号J(A,B)表示。
J(A,B) = |A ∩ B| / |A∪B|
另外1−J(A,B)是杰卡德距离,它用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度,概念与杰卡德相反就是惹。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
字符串相似度算法是用来比较两个字符串之间的相似程度的算法常用的字符串相似度计算方法有编辑距离算法、余弦相似度算法、Jaccard相似度算法等。其中,编辑距离算法是一种常用的字符串相似度计算方法,它通过计算两个字符串之间的最小编辑距离来衡量它们的相似程度。编辑距离指的是将一个字符串转换成另一个字符串所需的最少操作次数,包括插入、删除、替换三种操作。 编辑距离算法的实现可以采用动态规划的方法,具体步骤如下: 1. 初始化一个二维数组,数组的行数为第一个字符串的长度加1,列数为第二个字符串的长度加1。 2. 将第一行和第一列的值分别初始化为0到列数和0到行数。 3. 从第二行和第二列开始,遍历整个二维数组,计算每个位置的值。具体计算方法如下: - 如果第一个字符串的当前字符等于第二个字符串的当前字符,则该位置的值等于左上角位置的值。 - 否则,该位置的值等于左上角、左边、上边三个位置中的最小值加1。 4. 遍历完整个二维数组后,右下角的值即为两个字符串之间的最小编辑距离。 除了编辑距离算法,余弦相似度算法和Jaccard相似度算法也是常用的字符串相似度计算方法。余弦相似度算法通过计算两个向量之间的夹角余弦值来衡量它们的相似程度,适用于文本分类、信息检索等领域。Jaccard相似度算法则通过计算两个集合的交集与并集之间的比值来衡量它们的相似程度,适用于推荐系统、社交网络等领域。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值