计算位串/信号之间的相似度

信息处理 离散信号 信号分析 互相关
2022-02-10 20:01:56

我有一个项目,我正在尝试有效地比较二进制数据序列以确定它们的相似程度。基本上,一个序列可能如下所示:1001010010100011110...

我自己花了一段时间试图想出一种方法来解决它,因为我自己解决这样的问题很有趣,并且实际上取得了一些进展。不幸的是,我想出的一切都没有奏效。考虑替换(翻转的位)的解决方案很容易,但让我一直在处理插入或删除的位,即:100101 -> 1000101

试图在网上找到一个解决方案一直把我带到这里,我不断地遇到互相关这个词。我还在时间序列的维基百科页面上看到了许多有趣的链接,用于计算相似度。不幸的是,目前我还不清楚很多数学运算,我无法有效地通过并区分适合我情况的技术。

所以我有两种不同的方法来解决我有兴趣了解的问题:

1) 你会推荐什么方法来计算两个位序列(通常长度为 50 到 150 位)之间的相似性,这种方法对替换、插入和删除具有鲁棒性?

2)我不确定这是可能的,但是是否有某种距离度量我可以为每个信号独立计算,这将允许我将它们组合在一起并实际进行直接的成对比较?

对于 1,我觉得互相关可能是正确的方法,但我还没有过去只是在 R 中插入序列并查看它如何识别滞后。我知道编辑距离会起作用,但最终会想要更有效的东西。最终,我将尝试将数十亿个这些组合在一起。

谢谢

1个回答

您确实应该研究生物信息学中使用的序列比对方法。这些可能会因插入/删除和不匹配而受到惩罚。大小为 2 的二进制字母表和大小为 4 的 DNA 字母表不需要使用不同的算法,如果逐元素比较导致“匹配”或“不匹配”,并且不匹配会受到惩罚。查看基于动态规划的Needleman–Wunsch 算法

一些 DNA/蛋白质序列比对算法(例如MAFFT)使用快速傅里叶变换 (FFT) 来加速残基特性的互相关以近似匹配计算。