东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 2753|回复: 0
打印 上一主题 下一主题

[课堂笔记] 余弦距离如何计算?

[复制链接]

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14438
QQ
跳转到指定楼层
楼主
发表于 2020-6-8 10:35:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式



  1. # 余弦距离

  2. import numpy as np


  3. def cosine_distance(a, b):
  4.     if a.shape != b.shape:
  5.         raise RuntimeError("array {} shape not match {}".format(a.shape, b.shape))
  6.     if a.ndim==1:
  7.         # 向量的模 长度 欧式距离
  8.         a_norm = np.linalg.norm(a)
  9.         b_norm = np.linalg.norm(b)
  10.     elif a.ndim==2:
  11.         a_norm = np.linalg.norm(a, axis=1, keepdims=True)
  12.         b_norm = np.linalg.norm(b, axis=1, keepdims=True)
  13.     else:
  14.         raise RuntimeError("array dimensions {} not right".format(a.ndim))
  15.     similiarity = np.dot(a, b.T)/(a_norm * b_norm)
  16.     dist = 1. - similiarity
  17.     return dist


  18. a = np.array([1, 2, 3])
  19. b = np.array([4, 5, 6])
  20. # 余弦相似度的取值范围在-1到1之间。完全相同时数值为1,相反反向时为-1,正交或不相关是为0
  21. # 余弦距离 = 1- 余弦相似度
  22. # 欧式距离用于相似度检索更符合直觉。因此在使用时,需要将余弦相似度转化成类似于欧氏距离的余弦距离
  23. print("向量的余弦距离:", cosine_distance(a, b))

  24. aa = np.array([[1, 2, 3], [4, 5, 6]])
  25. bb = np.array([[3, 2, 4], [5, 8, 9]])

  26. print("矩阵的余弦距离:", cosine_distance(aa, bb))
复制代码


让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|人工智能工程师的摇篮 ( 湘ICP备2020019608号-1 )

GMT+8, 2024-5-7 05:22 , Processed in 0.170813 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表