我正在寻找Dynamic Time Warping和Needleman-Wunsch algorithm之间的差异。
基本上,他们都找到了对齐分数。我需要计算短字符串序列(<20个字符)之间的对齐(相似性)分数,并且有几千个字符串。 我无法弄清楚两种算法之间的差异,并决定选择哪一种算法。有人可以清楚我的差异吗? 谢谢。
答案 0 :(得分:9)
这两种算法都使用动态编程来确定顺序数据的对齐方式。这里的主要区别在于如何确定i,j
的分数
在动态时间扭曲中,费用(由i, j
的函数确定)会添加到集合(i-1, j)
,(i-1, j-1)
,(j, i-1)
的最小值。
在NW中,采用集合(i-1, j) + weight
,(i-1, j-1) + S(Ai, Bi)
,(j, i-1) + weight
的最大值,以便通过在相似度矩阵中查找来确定S(A, B)
。
如果您想通过可枚举空间进行对齐并且可以创建相似性矩阵(例如蛋白质序列或单词),请使用NW,但是,如果您要对齐无法建立相似性矩阵的数据(比如时间序列),并且需要使用一个函数,请使用DTW。
对齐可能是一件棘手的事情,你可能需要调整参数以使事情正确。
祝你好运。答案 1 :(得分:2)
动态时间扭曲(DTW)和Needleman-Wunsch算法(NW)之间的根本区别在于对齐中的序列元素。
DTW的一个基本假设是一个序列是一个&#34;时间扭曲的&#34;另一个版本,就目标序列拉伸(一对多对齐),浓缩(多对一对齐)或非扭曲(一对一对齐)而言源序列。
因此,DTW与 gap 的概念不兼容,其中一个序列中的一个或多个元素不与另一个序列中的任何元素匹配(一对一或无 - - 一个对齐)。相比之下,NW明确地考虑了间隙,并且惩罚不是要插入/删除的元素的函数。
如果您需要对齐字符序列,DTW仅适用于序列严格&#34;时间扭曲的不太可能的情况。彼此的版本,例如&#34;哇&#34;和&#34; wwooowww&#34;。只要一个序列包含的元素不能被解释为拉伸另一个序列的结果,例如&#34;哇&#34; vs&#34; wwooowww !!!&#34;,DTW不合适,因为它迫使你定义插入&#34;!&#34;的成本。就相对于&#34; w&#34;的距离而言或者&#34; o&#34;。
答案 2 :(得分:1)
如何使用Jarowinkler进行相似性测量,使用Levenshtein测量距离(最小版本数)