转一篇相似度匹配的文章,写得不错!
DTW为(Dynamic Time Warping,动态时间归准)的简称。应用很广,主要是在模板匹配中,比如说用于孤立词语音识别,计算机视觉中的行为识别,信息检索等中。可能大家学过这些类似的课程都看到过这个算法,公式也有几个,但是很抽象,当时看懂了但不久就会忘记,因为没有具体的实例来加深印象。
这次主要是用语音识别课程老师上课的一个题目来理解DTW算法。
首先还是介绍下DTW的思想:假设现在有一个标准的参考模板R,是一个中号维的向量,即R = {R(1),R(2),......,R(M),......, R(M)},每个分量可以是一个数或者是一个更小的向量。现在有一个才测试的模板T,是一个ñ维向量,即T = {T(1),T(2), ......,T(N),......,T(N)}同样每个分量可以是一个数或者是一个更小的向量,注意中号不一定等于N,但是每个分量的维数应该相同。
由于中号不一定等于N,现在要计算ř和Ť的相似度,就不能用以前的欧式距离等类似的度量方法了。那用什么方法呢?DTW就是为了解决这个问题而产生的。
首先我们应该知道- [R中的一个分量R(米)和Ť中的一个分量T(N)的维数是相同的,它们之间可以计算相似度(即距离)。在运用DTW前,我们要首先计算R的每一个分量和T中的每一个分量之间的距离,形成一个M N的矩阵。(为了方便,行数用将标准模板的维数M,列数为待测模板的维数N )。
然后下面的步骤该怎么计算呢?用个例子来看看。
这个例子中假设标准模板 - [R为字母ABCDEF(6个),测试模板Ť为1234(4个).R和Ť中各元素之间的距离已经给出如下:
既然是模板匹配,所以各分量的先后匹配顺序已经确定了,虽然不是一一对应的。现在题目的目的是要计算出测试模板Ť和标准模板 - [R之间的距离。因为2个模板的长度不同,所以其对应匹配的关系有很多种,我们需要找出其中距离最短的那条匹配路径现假设题目满足如下的约束:当从一个方格(第(i-1,J-1)或者(ⅰ -1,j)的或者(I,J-1))中到下一个方格(I,J),如果是横着或者竖着的话其距离为d(I,J),如果是斜着对角线过来的则是2D(I,J)其约束条件如下图像所示:
其中克(I,J)表示2个模板都从起始分量逐次匹配,已经到了中号中的我分量和Ť中的Ĵ分量,并且匹配到此步是2个模板之间的距离。并且都是在前一次匹配的结果上加d(I,J)或者2D(I,J),然后取最小值。
所以我们将所有的匹配步骤标注后如下:
怎么得来的呢?比如说g(1,1)= 4,当然前提都假设是g(0,0)= 0,就是说g(1,1)= g(0,0)+ 2d(1 ,1)= 0 + 2 2 = 4。
克(2,2)= 9是一样的道理。首先如果从克(1,2)来算的话是克(2,2)= G(1,2)+ d(2,2)= 5 + 4 = 9,因为是竖着上去的。
如果从克(2,1)来算的话是克(2,2)= G(2,1)+ d(2,2)= 7 + 4 = 11,因为是横着往右走的。
如果从g(1,1)来算的话,g(2,2)= g(1,1)+2 d(2,2)= 4 + 2 4 = 12.因为是斜着过去的。
综上所述,取最小值为9。所有克(2,2)= 9。
当然在这之前要计算出克(1,1),G(2,1),G(1,2)。因此计算克(I,J)也是有一定顺序的。
其基本顺序可以体现在如下:
计算了第一排,其中每一个红色的箭头表示最小值来源的那个方向当计算了第二排后的结果如下:
最后都算完了的结果如下:
到此为止,我们已经得到了答案,即2个模板直接的距离为26. 我们还可以通过回溯找到最短距离的路径,通过箭头方向反推回去。如下所示:
到这里,估计大家动手算一下就会明白了。其实很简单,通过例子的学习后再回去看那些枯燥的理论公式就发现很容易了。
在实际应用中,比如说语音识别中的孤立词识别,我们首先训练好常见字的读音,提取特征后作为一个模板。当需要识别一个新来的词的时候,也同样提取特征,然后和训练数据库中的每一个模板进行匹配,计算距离。求出最短距离的那个就是识别出来的字了。
出处:http://www.cnblogs.com/tornadomeet</p></div>