独行

自律即自由

动态时间规整( DTW )


一、DTW( Dynamic Time Warping)

• 按照距离最近的原则,构建两个序列元素之间的对应的 关系,评估两个序列的相似性。

• 要求

(1)单向对应,不能回头
(2)一一对应,不能有空
(3)对应之后,距离最近

二、算法实现

三、代码实现

# from dtw import dtw

import numpy as np

def dis_abs(x, y):
    return abs(x-y)[0]
    
def estimate_twf(A,B,dis_func=dis_abs):
    
    N_A = len(A)
    N_B = len(B)
    
    D = np.zeros([N_A,N_B])
    D[0,0] = dis_func(A[0],B[0])
    
    # 左边一列
    for i in range(1,N_A):
        D[i,0] = D[i-1,0]+dis_func(A[i],B[0])
    # 下边一行
    for j in range(1,N_B):
        D[0,j] = D[0,j-1]+dis_func(A[0],B[j])
    # 中间部分
    for i in range(1,N_A):
        for j in range(1,N_B):        
            D[i,j] = dis_func(A[i],B[j])+min(D[i-1,j],D[i,j-1],D[i-1,j-1])
            
    # 路径回溯
    i = N_A-1
    j = N_B-1
    count =0
    d = np.zeros(max(N_A,N_B)*3)
    path = []
    while True:
        if i>0 and j>0:
            path.append((i,j))
            m = min(D[i-1, j],D[i, j-1],D[i-1,j-1])
            if m == D[i-1,j-1]:
                d[count] = D[i,j] - D[i-1,j-1]
                i = i-1
                j = j-1
                count = count+1
                
            elif m == D[i,j-1]:
                d[count] = D[i,j] - D[i,j-1]
                j = j-1
                count = count+1
    
            elif m == D[i-1, j]:
                d[count] = D[i,j] - D[i-1,j]
                i = i-1
                count = count+1
                
        elif i == 0 and j == 0:
            path.append((i,j))
            d[count] = D[i,j]
            count = count+1
            break
        
        elif i == 0:
            path.append((i,j))
            d[count] = D[i,j] - D[i,j-1]
            j = j-1
            count = count+1
        
        elif j == 0:
            path.append((i,j))
            d[count] = D[i,j] - D[i-1,j]
            i = i-1
            count = count+1
            
    mean = np.sum(d) / count
    return mean, path[::-1],D
    
    
if __name__=="__main__":
    a = np.array([1,3,4,9,8,2,1,5,7,3])
    b = np.array([1,6,2,3,0,9,4,1,6,3])
    a = a[:,np.newaxis]
    b = b[:,np.newaxis]
    dis,path,D = estimate_twf(a,b,dis_func=dis_abs)
    print(dis)
    print(path)
    print(D)
    
    # print(a.shape)
    # print(dtw.__file__)
    # print("-------")
    # f = dis_abs
    # out = f(a,b)
    # print("-------")
    # print(out)

四、算法应用

• 计算两个序列之间的相似性 (取dis) 动作识别:

A : 录制动作时传感器数据    B:测试动作时传感器数据

• 获取匹配特征对 (取path) Voice conversion

A :说话人A的特征 B: 说话人B的特征

• 选择不同的dis 语音识别/英文发音质量检测

A :语音特征 B:文本序列标签 dis = 概率分布

上一篇
先验概率与后验概率(贝叶斯公式)
下一篇
Linux服务器放通端口
评论
还没有评论
    发表评论 说点什么
    • 分类

      • 凸优化
      • 学习笔记
      • 数学基础
    • 近期文章

      • 机器学习中的不等式
      • 卷积神经网络卷积层后一定要跟激活函数吗?
      • Bilevel Optimization Reformulations
      • 最小二乘问题
      • 常用命令

    装修网装修要做那些三室两厅一卫简装图水电装修开槽找装修网站70平装修多少钱精装新房装修装修简装花多少钱北京装饰 装修公司装修多少钱起上海仓库装修136平米装修预算表亮马装饰苏州前十强装修公司45平一室一厅装修图小型理发店简装效果图2020版装修合同贵州装修装饰工程公司特色饭店装修设计赤峰家装宁波公装空鹰装饰长春有名的装饰公司房屋装修测量简装毛坯房台州装修报价五十平简装需要多少钱家庭客厅简装毛坯房简装多少钱每平米安徽雄师装饰矿棉装饰吸音板香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声汪小菲曝离婚始末卫健委通报少年有偿捐血浆16次猝死单亲妈妈陷入热恋 14岁儿子报警雅江山火三名扑火人员牺牲系谣言手机成瘾是影响睡眠质量重要因素男子被猫抓伤后确诊“猫抓病”中国拥有亿元资产的家庭达13.3万户高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了男孩8年未见母亲被告知被遗忘张家界的山上“长”满了韩国人?倪萍分享减重40斤方法许家印被限制高消费网友洛杉矶偶遇贾玲何赛飞追着代拍打小米汽车超级工厂正式揭幕男子被流浪猫绊倒 投喂者赔24万沉迷短剧的人就像掉进了杀猪盘特朗普无法缴纳4.54亿美元罚金周杰伦一审败诉网易杨倩无缘巴黎奥运专访95后高颜值猪保姆德国打算提及普京时仅用姓名西双版纳热带植物园回应蜉蝣大爆发七年后宇文玥被薅头发捞上岸房客欠租失踪 房东直发愁“重生之我在北大当嫡校长”校方回应护栏损坏小学生课间坠楼当地回应沈阳致3死车祸车主疑毒驾事业单位女子向同事水杯投不明物质路边卖淀粉肠阿姨主动出示声明书黑马情侣提车了奥巴马现身唐宁街 黑色着装引猜测老人退休金被冒领16年 金额超20万张立群任西安交通大学校长王树国卸任西安交大校长 师生送别西藏招商引资投资者子女可当地高考胖东来员工每周单休无小长假兔狲“狲大娘”因病死亡外国人感慨凌晨的中国很安全恒大被罚41.75亿到底怎么缴考生莫言也上北大硕士复试名单了专家建议不必谈骨泥色变“开封王婆”爆火:促成四五十对测试车高速逃费 小米:已补缴天水麻辣烫把捣辣椒大爷累坏了

    装修网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化