当前位置:   article > 正文

计算Jaccard相似性

jaccard相似度计算

简介

Jaccard相似性是一种常见的接近度测量,用于计算两个对象之间的相似性,例如两个文本文件。Jaccard相似性可以用来寻找两个二进制向量之间的相似性,或者寻找两个集合之间的相似性。在需要度量二进制变量之间的相似程度,Jaccard便是可用的度量之一。

它常被用于以下场景:

  • 文本挖掘:根据两个文本文件中使用相同术语数量,找到两个文本文件之间的相似度

  • 电子商务:从一个有数千名顾客和数百万件商品的市场数据库中,通过他们的购买历史找到相似的顾客

  • 推荐系统: 电影推荐算法采用Jaccard系数来寻找相似的客户。

338c19ea20866a594876c105c5c57b8f.png

计算

对于集合来说,它的计算公式如下

d5e5a788dcb4d2fac93b947b4d2d2c47.png

21b304387b89bc8658d6214d5158f3a8.png

对于二进制变量来说,有对称和非对称两种计算方式,但是普遍使用的是非对称的计算方式:

a: A==1&B==1的元素数量

b: A==1&B==0的元素数量

c: A==0&B==1的元素数量

d: A==0&B==0的元素数量

其中非对称的算法:

12341b0efb9639af537ab98341c7718e.png

对称算法是将d加入到分子分母。这里并将未d考虑在内,原因是我们只对同为1的元素感兴趣,如果同为0的元素如果过多,分母太大则会稀释结果使其不敏感。例如想考察两个顾客超市购买物品的相似性,超市可能有成千上万种物品,对于两个顾客来说大部分未购买(值为0),如果将其纳入计算,会使得不准确。

5e50ccfa1521cf75927718bf46da3c85.png

e06e197a1ce2e3e0a8dd206a4eaeef26.png

56dc8a59cb68ab756796655336b6f865.png

另外一个经常用的指数就是Dice,它的计算将a的权重增加,a替换为2a即可。由于计算时权重增加,Dice比Jaccard获得的相似性更高,距离更小。Dice和Jaccard可以直接换算:

c471d0965da8f8bea43ae9cf60029224.png

在实际计算中的是非相似性(也就是距离),获得的值相当于1-J或者1-D

  1. mat = matrix(c(1, rep(0, 9), rep(1, 4), rep(0, 6)), ncol = 2)
  2. > mat
  3. [,1] [,2]
  4. [1,] 1 1
  5. [2,] 0 1
  6. [3,] 0 1
  7. [4,] 0 1
  8. [5,] 0 0
  9. [6,] 0 0
  10. [7,] 0 0
  11. [8,] 0 0
  12. [9,] 0 0
  13. [10,] 0 0
  14. stats::dist(t(mat), method='binary') #需要转置
  15. 1
  16. 2 0.75
  17. arules::dissimilarity(t(mat), method = 'jaccard')
  18. 1 2
  19. 1 0.00 0.75
  20. 2 0.75 0.00
  21. arules::dissimilarity(t(mat), method = 'dice')
  22. 1 2
  23. 1 0.0 0.6
  24. 2 0.6 0.0

参考资料:

https://stats.stackexchange.com/questions/238684/what-are-the-difference-between-dice-jaccard-and-overlap-coefficients

https://www.learndatasci.com/glossary/jaccard-similarity/

c2692531cb8065d5e16063362ec4aec5.png

cb24f3a49b16b4957126ffe655c3b352.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/241486
推荐阅读
相关标签
  

闽ICP备14008679号