使用非精确测量(模糊逻辑)查找一系列数据

2024-01-13

这是一个更复杂的后续问题:查找连续值的有效方法 https://stackoverflow.com/questions/8011330/efficient-way-to-look-up-sequential-values

Each Product可以有很多Segment行(千)。每个段都有position每个产品从 1 开始的列(1、2、3、4、5 等)和value可以包含任何值的列,例如(323.113、5423.231、873.42、422.64、763.1 等)。数据是只读的。

将产品视为一首歌,将片段视为歌曲中的一组音符可能会有所帮助。

给定一个连续片段的子集,例如歌曲的片段,我想识别产品的潜在匹配项。然而,由于测量中的潜在误差,子集中的片段可能not匹配数据库中的段exactly.

如何通过查找产品细分来识别候选产品最接近匹配我测量的细分的子集?另外,数据库是此类数据的最佳媒介吗?

-

以下是我如何解决这个问题的一些想法。请不要将这些视为确切的要求。我对任何类型的算法都持开放态度,以使这项工作尽可能最好。我认为需要有多个阈值变量来确定接近度。一种可能性可能是实施接近阈值和match临界点。

例如,给定这些值:

Product A contains these segments: 11,21,13,13,15.
Measurement 1 has captured: 20,14,14,15.
Measurement 2 has captured: 11,21,78,13.
Measurement 3 has captured: 15,13,21,13,11.

If a 接近阈值允许测量段比实际段高或低 1,则测量 1 可能与产品 A 匹配,因为尽管许多段不匹配exactly,它们在相对于实际值的接近阈值内。

If a match阈值允许具有 3 个或更多匹配的测量,测量 2 可能会返回产品 A,因为尽管其中一个段 (78) 远远超过邻近阈值,但它仍然以正确的顺序匹配 3 个段,因此在match临界点。

测量 3 与产品 A 不匹配,因为尽管所有测量的段都存在于实际段中,但它们不在接近度或匹配阈值内。

Update:其中一个答案要求我定义我的意思最接近匹配。我不太确定如何回答这个问题,但我会尝试通过继续歌曲的类比来解释。假设这些片段代表录制歌曲的最大频率。如果我再次录制同一首歌,它会是相似的,但由于背景噪音和录音设备的其他限制,一些频率会匹配,一些会接近,还有一些会相差很远。在这种情况下,您如何定义一个录音与另一个录音“匹配”的时间?这与我在这个问题中寻找使用的匹配逻辑相同。


根据您发布的信息,这可以通过 edmond 的 Flower V 完美匹配算法来解决。您可以最小化或最大化函数,它总是会找到最佳匹配。也许您可以使用带有 2 个循环的强力解决方案。关于edmond匹配算法的维基百科:http://en.wikipedia.org/wiki/Edmonds%27s_matching_algorithm http://en.wikipedia.org/wiki/Edmonds%27s_matching_algorithm

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

使用非精确测量(模糊逻辑)查找一系列数据 的相关文章

  • ASP SQL Server 连接

  • 在 Mysql 上使用 EntityManager JPA 运行脚本

    我正在尝试运行脚本 sql 文件 但由于我尝试了多种方法 因此出现多个错误 这是我的主要 sql 脚本 INSERT INTO Unity VALUES 11 paq 0 2013 04 15 11 41 37 Admin Paquete
  • 从一种数字系统转换为另一种数字系统后会有多少位数字

    主要问题 有多少位数字 让我解释 我有一个二进制数 11000000 十进制数是192 转换为十进制后 它有多少位 以十进制表示 在我的示例中 它是 3 位数字 但是 这不是问题 我在互联网上搜索并找到了一种用于整数部分的算法和一种用于小数
  • SQL Server - 将行连接到逗号分隔的列表中

    假设我有一个临时表 如下所示 Id Value 1 1 1 2 1 3 2 1 2 2 我希望我的桌子是这样的 Id ValueList 1 1 2 3 2 1 2 所以基本上我需要将我的值分组为逗号分隔的列表 我已经尝试过以下操作 SEL
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • SQL Server 2008 错误 233

    我正在使用以下 sql 脚本在 SQL Server 2008 中创建新登录名 CREATE LOGIN xyz WITH PASSWORD xyz DEFAULT DATABASE master DEFAULT LANGUAGE us e
  • 分组和切换列和行

    我不知道这是否会被正式称为枢轴 但我想要的结果是这样的 Alex Charley Liza 213 345 1 23 111 5 42 52 2 323 5 23 1 324 5 我的输入数据采用这种形式 Apt Name
  • 需要 SQL 查询澄清[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个由以下列组成的表 billid patientid doctorid fees 如何显示治疗多名患者的医生 尝试了以下代码并得到了
  • 选择多列 按一列分组 按计数排序

    我在Oracle中有以下数据集 c1 c2 c3 1A2 cat black 1G2 dog red B11 frog green 1G2 girl red 试图得到以下结果 基本上我首先尝试获取具有重复 c1 的行 c1 c2 c3 1G
  • 以 O(1) 计算汉明权重 [重复]

    这个问题在这里已经有答案了 在二进制表示中 汉明权重是 1 的数量 我偶然发现了网络并找到了一个 O 1 的答案 v v v gt gt 1 0x55555555 v v 0x33333333 v gt gt 2 0x33333333 in
  • 带有可变 WHERE 子句的批量 UPDATE 表

    我有一堆值对 foo1 bar1 foo2 bar2 我想做一堆更新 将 foo 列设置为 foo1 其中 bar 列为 bar1 我正在使用 psycopg2 在 Python 中执行此操作 我可以executemany与查询UPDATE
  • NVARCHAR 变量在Where 子句中不起作用

    在 SQL Server 我想是 2018 我不知道如何判断 中 我的变量不起作用WHERE的条款NVARCHAR 比较应该返回值 但它什么也没返回 如果我只是手动输入声明的文本 它会突然起作用并返回值 没有任何逻辑原因应该有任何不同 类型
  • postgresql:插入...(选择*...)

    我不确定它是否是标准 SQL INSERT INTO tblA SELECT id time FROM tblB WHERE time gt 1000 我正在寻找的是 如果 tblA 和 tblB 位于不同的数据库服务器中怎么办 Postg
  • 更好地理解 SQL Server 中的架构

    就像标题一样 我还是一个SQLServer菜鸟 当我创建表 Mytable 时 数据库中显示 dbo Mytable 但有人能让我更好地理解模式吗 另外 在 Server 2008 TSQL 一书中 Itzik 说 在你的数据库中 表属于模
  • SQL 使用另一列的键和最大值设置列

    我需要根据同一 ID 的 duration 列的最大值更新 max register 列 将值设置为 1 其他值设置为 0 初始表 Id duration max register 1 0 0 1 7 0 1 3 0 2 10 0 2 5
  • Oracle SQL 函数中可以有 commit 语句吗

    在 SQL 函数中使用 COMMIT 语句是否可能 有意义 从技术上来说 答案是肯定的 你can请执行下列操作 create or replace function committest return number as begin upd
  • 时间序列数据的自连接

    我需要一些帮助来完成我认为应该是相当简单的自连接查询 只需要将两条记录中匹配的开始时间和结束时间合并为一条记录 假设我的表中有以下内容 Time Event 08 00 Start 09 00 Stop 10 30 Start 10 45
  • 使用来自另一个数据库的选择查询更新 mysql 表

    我有两个数据库 我想用另一个数据库表中的值更新一个表 我正在使用以下查询 但它不起作用 UPDATE database1 table1 SET field2 database2 table1 field2 WHERE database1 t
  • Oracle:按月分区表

    我的解决方案 德语几个月 PARTITION BY LIST to char GEBURTSDATUM Month PARTITION p1 VALUES JANUAR PARTITION p2 VALUES Februar PARTITI
  • 在Oracle中使用IW和MM

    我使用 IW 表示每周结果 使用 MM 表示每月结果 但我总是收到错误 ORA 00979 not a GROUP BY expression 00979 00000 not a GROUP BY expression 我的疑问是这些 We

随机推荐