Jaccard 相似度

最近在分析模拟结果中团簇结构稳定性时使用到了Jaccard 相似度去衡量团簇结构的相似性。 Jaccard 相似度(Jaccard Similarity)是一种用于衡量两个集合之间相似性的指标,常用于数据挖掘、文本分析、生物信息学等领域。它通过计算两个集合的交集与并集的比例来量化相似性。

定义

Jaccard 相似度的公式为:

J a c c a r d   S i m i l a r i t y = ∣ A ⋂ B ∣ ∣ A ⋃ B ∣ Jaccard \ Similarity = \frac{|A\bigcap B|}{|A\bigcup B|} Jaccard Similarity=ABAB

A 和 B 是两个集合。

∣ A ⋂ B ∣ |A\bigcap B| AB是 A 和 B 交集的元素个数。

∣ A ⋃ B ∣ |A\bigcup B| AB是 A 和 B 并集的元素个数。

取值范围:

  • 0:两个集合没有交集,完全不相似。
  • 1:两个集合完全相同,完全相似。

应用场景

  1. 文本相似性分析:
  • 将文档表示为单词集合,计算文档之间的 Jaccard 相似度。
  • 例如:对比两篇文章的关键词相似性。
  1. 推荐系统:
  • 计算用户之间的兴趣集合相似度,用于个性化推荐。
  • 例如:基于用户购买历史的相似性推荐商品。
  1. 生物信息学:
  • 比较基因或蛋白质序列的相似性。
  • 例如:分析基因功能的重叠性。
  1. 数据去重:
  • 检测数据集中的重复记录。
  • 例如:删除重复的网页或文档。

示例

假设有两个集合:

  • A={1,2,3,4}A={1,2,3,4}
  • B={3,4,5,6}B={3,4,5,6}
  1. 计算交集:

A ∩ B = { 3 , 4 } ⇒ ∣ A ∩ B ∣ = 2 A∩B=\{3,4\}⇒∣A∩B∣=2 AB={3,4}⇒∣AB∣=2

  1. 计算并集:

A ∪ B = { 1 , 2 , 3 , 4 , 5 , 6 } ⇒ ∣ A ∪ B ∣ = 6 A∪B=\{1,2,3,4,5,6\}⇒∣A∪B∣=6 AB={1,2,3,4,5,6}⇒∣AB∣=6

  1. 计算 Jaccard 相似度:

J a c c a r d   S i m i l a r i t y = 2 6 = 1 3 ≈ 0.333 Jaccard\ Similarity=\frac{2}{6}=\frac{1}{3}≈0.333 Jaccard Similarity=62=310.333

Jaccard 距离

Jaccard 距离是 Jaccard 相似度的补集,用于衡量两个集合的差异性:

J a c c a r d   D i s t a n c e = 1 − J a c c a r d   S i m i l a r i t y Jaccard\ Distance=1−Jaccard\ Similarity Jaccard Distance=1Jaccard Similarity

  • 0:两个集合完全相同。
  • 1:两个集合完全不相似。

优点

  • 简单直观,易于计算。
  • 适用于稀疏数据(如文本中的单词集合)。
  • 不受集合大小的影响。

缺点

  • 仅考虑元素的存在与否,忽略了元素的频率或权重。
  • 对于元素顺序或结构敏感的数据(如序列数据),可能不够适用。

此外,还有余弦相似度,Dice 相似度,重叠系数等等衡量集合之间相似度的算法,他们各自有各自的优缺点和适用场景,后续会出一个完整版的。


本博客致力于分享知识与信息,部分内容可能引用了网络资源。我会尽力注明作者或来源。如果您认为本博客的内容存在侵权现象(包括但不限于版权、商标权等),请立即与我联系。

在OpenCVSharp4中,你可以通过以下几个步骤实现模板匹配并找到与模板相似度达到80%的目标区域,最后绘制最小包围矩形: 1. **加载图像和模板**[^4]: ```csharp Mat sourceImage = Cv2.ImRead("source_image.jpg", ImreadModes.Color); Mat templateImage = Cv2.ImRead("template_image.jpg", ImreadModes.Color); ``` 2. **创建一个相似度阈值(这里设置为80%)**[^5]: ```csharp double threshold = 0.8; // 相似度阈值 ``` 3. **执行模板匹配**[^6]: ```csharp Mat result; Cv2.matchTemplate(sourceImage, templateImage, result, Cv2.TM_CCOEFF_NORMED); ``` `TM_CCOEFF_NORMED`模板匹配算法会返回一个归一化的交叉相关系数矩阵。 4. **找到相似度大于阈值的位置**[^7]: ```csharp vector<Point> locations; Point minLocation, maxLocation; double minVal, maxVal; Mat minMaxLocResult(result.clone(), Mat()); Cv2.minMaxLoc(result, ref minVal, ref maxVal, ref minLocation, ref maxLocation); for (int y = 0; y < result.Rows; ++y) { for (int x = 0; x < result.Cols; ++x) { if (result.At<double>(y, x) > threshold * maxVal) { locations.push_back(Point(x, y)); } } } ``` `minMaxLoc`函数用于查找局部最大值的位置。 5. **计算最小包围矩形**[^8]: ```csharp Rect boundingBox; if (!locations.empty()) { boundingBox = boundingRect(locations); } ``` `boundingRect`函数用来找到多点集合的最小包围矩形。 6. **在源图像上绘制矩形**[^9]: ```csharp rectangle(sourceImage, boundingBox, Scalar(0, 0, 255), 2); ``` 这将在源图像上以红色绘制出最小包围矩形。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞扬的梦(´-ω-`)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值