栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

计算欧式距离和余弦相似度

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

计算欧式距离和余弦相似度

本文介绍Python计算欧式距离和余弦相似度。为了余弦相似度需要使用欧式距离,我们首先介绍欧式距离。

欧式距离

欧式距离标识两个向量之间的距离,计算公式如下:

欧式距离 = Σ ( A i − B i ) 2 sqrt{Σ(A_i-B_i)^2} Σ(Ai​−Bi​)2 ​

python计算欧式距离,可以使用numpy.linalg.norm函数:

# 导入包
import numpy as np
from numpy.linalg import norm

# 定义向量
a = np.array([2, 6, 7, 7, 5, 13, 14, 17, 11, 8])
b = np.array([3, 5, 5, 3, 7, 12, 13, 19, 22, 7])

# 计算两个向量的欧式距离
norm(a-b)

# 12.409673645990857

输出结果显示两个向量的欧式距离为:12.409673645990857

如果两个向量长度不等,函数会产生警告:

import numpy as np
from numpy.linalg import norm


a = np.array([2, 6, 7, 7, 5, 13, 14])
b = np.array([3, 5, 5, 3, 7, 12, 13, 19, 22, 7])


norm(a-b)

# 产生错误信息,不能广播
# ValueError: operands could not be broadcast together with shapes (7,) (10,) 

也可以针对数据框的列计算欧式距离:

import pandas as pd 
import numpy as np
from numpy.linalg import norm

# 定义数据框
df = pd.DataFrame({'points': [25, 12, 15, 14, 19, 23, 25, 29],
                   'assists': [5, 7, 7, 9, 12, 9, 9, 4],
                   'rebounds': [11, 8, 10, 6, 6, 5, 9, 12]})

# 在 'points' 和 'assists' 两列之间计算欧式距离
norm(df['points'] - df['assists'])

# 40.496913462633174
余弦相似度

余弦相似度用向量空间中两向量夹角的余弦值作为衡量两个向量间差异程度。余弦值越接近1,表明两个向量的夹角越接近0度,则两个向量越相似。

计算公式如下:

余弦相似度= Σ A i B i / ( Σ A i 2 Σ B i 2 ) { ΣA_iB_i /(sqrt{ΣA_i^2}sqrt{ΣB_i^2}}) ΣAi​Bi​/(ΣAi2​ ​ΣBi2​ ​)

下面介绍如何使用NumPy库计算两个向量的余弦相似度。

from numpy import dot
from numpy.linalg import norm

# 定义数组
a = [23, 34, 44, 45, 42, 27, 33, 34]
b = [17, 18, 22, 26, 26, 29, 31, 30]

# 计算余弦相似度
cos_sim = dot(a, b)/(norm(a)*norm(b))

cos_sim

0.965195008357566

norm函数计算欧式距离,dot计算向量点积。

对于更长数组长度也可以使用该方法:

import numpy as np
from numpy import dot
from numpy.linalg import norm

# 定义数组
a = np.random.randint(10, size=100)
b = np.random.randint(10, size=100)

# 计算余弦相似度
cos_sim = dot(a, b)/(norm(a)*norm(b))

cos_sim

0.7340201613960431

最后需要说明的是,如果长度不一致仍会报错。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983651.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号