两个数据集或数组之间的相似性

2024-03-18

假设我有一个如下所示的数据集:

{A:1, B:3, C:6, D:6}

我还有其他集合的列表来比较我的特定集合:

{A:1, B:3, C:6, D:6},  
{A:2, B:3, C:6, D:6},  
{A:99, B:3, C:6, D:6},  
{A:5, B:1, C:6, D:9},  
{A:4, B:2, C:2, D:6}

我的条目可以可视化为一个表格(有四列,A、B、C、D 和 E)。

如何找到最相似的集合? 对于此示例,第 1 行是完美匹配,第 2 行紧随其后,而第 3 行则相距甚远。

我正在考虑计算一个简单的增量,例如:Abs(a1 - a2) + Abs(b1 - b2) + etc也许会得到一个相关值 http://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient#Mathematical_properties对于具有最佳增量的条目。

这是一个有效的方法吗? 这个问题的名字是什么?


“距离”或“相似性”可以指这类问题。

Simply calculating the sum of absolute difference, as you've done, should work fairly well. This is called the Manhattan distance https://en.wikipedia.org/wiki/Taxicab_geometry. In mathematical terms, it would be: x ∈ (a,b,c,d) Abs(x1 - x2).

尽管最好的措施实际上取决于您想要什么行为。

Ratio可能是一个更好的主意。

考虑类似的事情1000000, 5, 5, 5 vs 999995, 5, 5, 5 and 1000000, 0, 5, 5.

根据上面的公式,第一个与第二个和第三个具有相同的相似度。

如果这不是所希望的(如999995可以认为非常接近1000000, while 0可以认为离5),计算每个距离时应除以两者中的最大值。

x ∈ (a,b,c,d) [ Abs(x1 - x2) / max(x1, x2) ]

这会将每个数字置于 0 和 1 之间,即值之间的百分比差异。

这意味着,对于上面的例子,我们会考虑1000000, 5, 5, 5 and 999995, 5, 5, 5非常相似(因为上面的总和将是|1000000-999995|/1000000 + 0 + 0 + 0 = 0.000005) and 1000000, 5, 5, 5 and 1000000, 0, 5, 5将被认为更加不同(因为总和将是|0+5|/5 + 0 + 0 + 0 = 1).

如果可能为负值,公式需要适当更新。您需要根据您要解决的问题来决定如何处理该问题。应该10 to 0或多或少不同于(或等同于)5 to -5?

元素可以在任何程度上互换吗?

考虑类似的事情A=1, B=2, C=3, D=4 and A=4, B=1, C=2, D=3.

虽然每个单独的元素都发生了变化,但该集合仍然包含1, 2, 3, 4每个元素简单地移动 1 个位置(除了4).

对于某些问题,这根本不重要,上面的内容与从A=1, B=11, C=21, D=31 to A=2, B=12, C=22, D=32。对于其他问题,它可能非常相关。

对于字符串或数组等序列,插入、删除或移动元素的想法可能是有意义的。如果是这样,您会想看看编辑距离 https://en.wikipedia.org/wiki/Edit_distance,其中常见的一个是编辑距离 https://en.wikipedia.org/wiki/Levenshtein_distance。您可能还想考虑修改它以考虑各个值的差异有多大(但这并不是微不足道的)。

对于像一套的东西,元素是可以互换的,但元素上实际上并没有严格的顺序({1, 2, 3}是相同的{3, 1, 2})。如果是这种情况,最简单的方法可能是对值进行排序并仅使用编辑距离。您还可以以某种方式同时循环遍历这两个值,这将使您可以更轻松地考虑值之间的差异。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

两个数据集或数组之间的相似性 的相关文章

  • 用于整数分区的优雅 Python 代码 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我尝试编写代码来解决标准整数分区问题 维基百科 http en wikipedia org wiki Partition 28numb
  • 基数首先排序最重要的还是最不重要的,哪个更快?

    我一直在研究基数排序实现 到目前为止粘贴在下面的代码 代码是用 Java 编写的 但在 C C 中应该也能正常工作 正如您从实现中看到的 我首先执行最高有效位 即整数的第 31 位 这似乎更快 因为一旦子组完成 就不再需要迭代 例如 打个比
  • 数组中的重复元素[重复]

    这个问题在这里已经有答案了 这有点与this https stackoverflow com questions 2605766 how to find a duplicate element in an array of shuffled
  • 为什么我的 Project Euler Problem 12 算法这么慢?

    我已经在 Scala 中为 PE P12 创建了解决方案 但速度非常非常慢 有人可以告诉我为什么吗 如何优化这个 calculateDevisors 简单的方法和calculateNumberOfDivisors 除数函数具有相同的速度 i
  • 找到不(必要)与二进制矩阵中的图像边界对齐的最大矩形

    我在用这个解决方案 https stackoverflow com questions 2478447 find largest rectangle containing only zeros in an nn binary matrix在
  • 直观地执行不同的排序算法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 图像算法上的物体计数

    我又接到学校任务了 这次 我的老师给我的任务是创建算法来计算图片上有多少只鸭子 该图与此类似 我想我应该使用模式识别来搜索上面有多少只鸭子 但我不知道每只鸭子适合哪种图案 我认为你可以通过分割鸭嘴并计算鸭嘴的数量来解决这个问题连接的组件 h
  • 快速排序应用程序中这些交换代码行的目的是什么?

    我试图理解快速排序的实现或应用程序以找到第 k 个最小元素 这是我试图理解的代码 public int quicksort int a int start int end int k if start lt end int pivot pa
  • 用于计算三角函数、对数或类似函数的算法。仅限加减法

    我正在修复 Ascota 170 古董机械可编程计算机 它已经开始工作了 现在我正在寻找一种算法来展示其功能 例如计算三角或对数表 或类似的东西 不幸的是 从数学运算来看 计算机只能进行整数的加减法 从 1E12到1E12的55个寄存器 甚
  • 计算具有 3 个循环的算法的复杂度

    我尝试解决以下练习 以下代码片段最坏情况运行时间的增长顺序是什么 作为 N 的函数 int sum 0 for int i 1 i lt N i for int j 1 j lt i i j for int k 1 k lt j j k s
  • 填充体积算法

    我有一个具有一定尺寸长度 宽度 高度的盒子 我有不同长度 宽度 高度的物品 是否有现有的算法可以确定放入盒子中的最佳物品 这称为装箱 切割库存 背包问题 并且是 NP 难问题 一般来说 您只能通过使用启发式方法获得近似解 请参见示例 htt
  • 关于Marching Cubes算法的澄清

    关于Marching Cubes 我对其算法和实现有一些疑问 我已经阅读了 Marching Cubes 的 Paul Bourke 优秀文章以及网站上可用的源代码 但是 我在理解以及如何以自己的方式实现算法方面仍然遇到了一些问题 问题如下
  • 自动跟踪算法

    我正在尝试写一个simple跟踪例程来跟踪电影中的某些点 本质上我有一系列 100 帧长的电影 在黑暗背景上显示一些亮点 我每帧有大约 100 150 个点 它们在电影的过程中移动 我想跟踪它们 所以我正在寻找一些有效的 但可能不会过度实施
  • Python Pandas:沿一列比较两个数据帧,并返回另一个数据帧中两个数据帧的行内容

    我正在处理两个 csv 文件并作为数据框 df1 和 df2 导入 df1 有 50000 行 df2 有 150000 行 我想将 df2 的 时间 与 df1 求时间差并返回所有列的值 对应相似的行 保存在df3中 时间同步 例如 35
  • 数独算法,暴力破解[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • “包含字符串”的快速索引

    在我的应用程序中 我有多达数百万个短字符串 大部分短于 32 个字符 我想实现一个带有附加列表的搜索框 该列表仅包含包含在搜索框中输入的整个字符串的元素 如何预先建立索引来快速找到此类字符串 所有排序的 STL 容器都会检查整个字符串 对于
  • 我应该对算法使用递归还是记忆化?

    如果我可以选择使用递归或记忆来解决问题 我应该使用哪一个 换句话说 如果它们都是可行的解决方案 因为它们提供了正确的输出并且可以在我正在使用的代码中合理地表达 那么我什么时候会使用其中一个而不是另一个 它们并不相互排斥 您可以同时使用它们
  • 为什么这个算法的Big-O复杂度是O(n^2)?

    我知道这个算法的大O复杂度是O n 2 但我不明白为什么 int sum 0 int i 1 j n n while i lt j sum 即使我们设定了j n n一开始 我们在每次迭代期间递增 i 并递减 j 因此最终的迭代次数不应该比n
  • 如何光栅化旋转矩形(通过 setpixel 在 2d 中)

    我有四个 2d 顶点 A B C D 的旋转矩形 我需要在像素缓冲区中 有效地 光栅化 绘制它 使用 setpixel x y 颜色 怎么做 我正在尝试使用一些代码 例如 convertilg a b c d do up down left
  • 如何计算 3D Morton 数(交织 3 个整数的位)

    我正在寻找一种快速计算 3D Morton 数的方法 这个网站 http www graphics stanford edu seander bithacks html InterleaveBMN有一个基于幻数的技巧来处理 2D Morto

随机推荐