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

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(使用前将#替换为@)

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

  • 用 Java 创建迷宫求解算法

    我被分配了用 Java 创建迷宫求解器的任务 这是任务 Write an application that finds a path through a maze The maze should be read from a file A
  • Exposé 布局算法

    我正在制作一些项目 其布局类似于 Mac OS X 在 Expos 中对窗口所做的操作 它适应项目的长宽比和可用区域的长宽比 基本上 可用区域分为行和列 每个单元格 行和列的交集 中放置一个项目 这些项目必须保持其纵横比 此处width h
  • 缩短文本并仅保留重要句子

    德国网站 nandoo net 提供了缩短新闻文章的可能性 如果使用滑块更改百分比值 文本会发生变化并且某些句子会被遗漏 您可以在这里看到它的实际效果 http www nandoo net read article 299925 http
  • 如何在给定目标索引数组的情况下对数组进行就地排序?

    你如何对给定的数组进行排序arr in place给定目标索引数组ind 例如 var arr A B C D E F var ind 4 0 5 2 1 3 rearrange arr ind console log arr gt B E
  • 如何查找给定字符串中仅出现一次的第一个字符[关闭]

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

    Programming Pearls 第一版第 120 页介绍了从 N 个整数总体中选择 M 个等概率随机元素的算法 InitToEmpty Size 0 While Size lt M do T RandInt 1 N if not Me
  • 将嵌套字典中的所有键从camelCase转换为snake_case

    我有一本类似这样的字典 firstName abc lastName xyz favoriteMovies Star Wars The lone ranger favoriteCountries country China capitalC
  • 如何从一组重叠的圆计算多边形集?

    这个问题是一些计算细节的扩展这个问题 https stackoverflow com questions 1667310 combined area of overlapping circles 假设有一组 可能重叠的 圆 并且希望计算这组
  • 如何将一组重叠范围划分为不重叠范围?

    假设您有一组范围 0 100 一 0 75 b 95 150 c 120 130 d 显然 这些范围在某些点上重叠 您将如何剖析这些范围以生成不重叠范围的列表 同时保留与其原始范围相关的信息 在本例中为范围后面的字母 例如 运行算法后的上述
  • 找到一系列间隔的最有效分组

    我有一个应用程序 其中有一系列不重叠的固定宽度间隔 每个间隔都有一个给定的键 每个间隔具有相同的宽度 并且可以存在连续的间隔 本质上 我想以最小化单独间隔的数量的方式对间隔和键进行分组 这可以通过合并具有相同键的连续间隔或查找匹配间隔并将它
  • 寻找将集合映射到整数的双射函数

    对于任意两个序列 a b 其中 a a1 a2 an 且 b b1 b2 bn 0a b具有相同的元素 而不关心它们的顺序 例如 如果 a 1 1 2 3 b 2 1 3 1 c 3 2 1 3 则 f a f b f a f b 我知道有
  • 由周期表元素形成的最大单词的算法

    我想为以下问题场景编写一个算法 根据元素周期表元素的名称 找到可以组成的最大单词 符号如Na Ne等应被视为单个元素 这是在一家知名公司的求职面试中被问到的 有人可以帮我解决这个问题吗 我认为更好的方法是检查字典中的每个单词 看看是否可以从
  • 时间复杂度和运行时间有什么区别?

    时间复杂度和运行时间有什么区别 它们是一样的吗 运行时间是指程序运行所需的时间 时间复杂度是对输入大小趋于无穷大时运行时间渐进行为的描述 您可以说运行时间 是 O n 2 或其他什么 因为这是描述复杂性类和大 O 表示法的惯用方式 事实上
  • 在 C++ 中通过引用传递 std 算法谓词

    我正在尝试从 a 中删除元素std list并保留已删除元素的一些统计信息 为此 我使用列表中的remove if 函数 并且我有一个谓词 我想使用这个谓词来收集统计数据 这是谓词的代码 class TestPredicate privat
  • Karasuba算法递归过多

    我正在尝试用 c 实现 Karasuba 乘法算法 但现在我只是想让它在 python 中工作 这是我的代码 def mult x y b m if max x y lt b return x y bm pow b m x0 x bm x1
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • C 埃及分数

    古埃及人仅使用以下形式的分数1 n因此任何其他分数都必须表示为这些单位分数的总和 而且 所有单位分数都是不同的 在C或Java中使任何分数成为埃及分数 总和越少越好 的好方法是什么 可以使用什么算法 分支定界 a 例如 3 4 1 2 1
  • 在常数空间中创建 1..N 的随机排列

    我正在寻找枚举固定空间中数字 1 N 的随机排列 这意味着我无法将所有数字存储在列表中 原因是 N 可能非常大 超过可用内存 我仍然希望能够一次遍历这样一个数字的排列 只访问每个数字一次 我知道对于某些 N 可以这样做 许多随机数生成器随机
  • 测量两个字符串之间相似性的有效方法是什么? (编辑距离使堆栈太深)

    所以 我从这个开始 http en wikibooks org wiki Algorithm Implementation Strings Levenshtein distance Ruby http en wikibooks org wi
  • 具有 2 个属性的背包算法。如何在 3d 数组中实现它?

    当有超过 1 个属性时 我无法理解背包问题 当有 1 个属性时 我必须编写一个使用具有 2 个属性的背包算法的程序 老师告诉我们 它必须在 3d 数组中完成 错误的实现将导致 O 2 n 处理时间 我无法想象这样的数组会是什么样子 假设这是

随机推荐