You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular Metric for Shape Similarity(AMSS)的Python实现及近似方案咨询

关于Angular Metric for Shape Similarity(AMSS)的Python实现与近似方案

1. 优化的AMSS官方Python实现现状

目前没有被广泛认可的、经过工程优化的官方AMSS Python实现。AMSS的核心定义来自学术研究,开源生态里尚未有专门针对它的成熟库实现。

2. 用导数+DTW+余弦相似度近似AMSS的可行性

完全可行,且这个思路精准贴合AMSS的核心设计逻辑:

  • AMSS本质是衡量两条曲线的形状角度相似性,核心关注曲线的方向变化(导数)而非原始数值的绝对值;
  • 用导数序列表征曲线的局部方向特征,正好匹配AMSS对形状角度信息的提取需求;
  • 余弦相似度用于衡量两个导数向量的方向一致性,完美对应AMSS的角度相似性度量目标;
  • DTW(动态时间规整)解决了两条序列在时间轴上不对齐的问题,这也是形状相似性度量中的常见场景。

3. 你提供的代码是否为AMSS的良好近似

你的实现抓住了AMSS的核心要素,是一个合格的近似方案,但有几个细节可以优化,让它更贴近AMSS的原始定义:

  • 数值导数的稳定性:np.gradient对噪声敏感,若输入序列存在噪声,建议先对原始序列做平滑处理(比如scipy.signal.savgol_filter),再计算导数;
  • DTW路径约束:原始AMSS可能对序列对齐的路径有局部约束(比如限制相邻点的斜率),你可以给DTW添加窗口约束(比如Sakoe-Chiba窗口),通过dtw_path_from_metric的global_constraint参数实现;
  • 度量归一化:distance.cosine返回的是1 - 余弦相似度,范围是[0,2],最终的DTW距离是该值的累积和。若需要和AMSS原始度量的范围对齐,可对结果做归一化处理(比如除以序列长度)。

优化后的示例代码(添加平滑和窗口约束):

import numpy as np
from tslearn.metrics import dtw_path_from_metric
from scipy.spatial import distance
from scipy.signal import savgol_filter

def smoothed_gradient(x, window_length=5, polyorder=2):
    # 先平滑再计算导数,提升稳定性
    smoothed_x = savgol_filter(x, window_length, polyorder)
    return np.gradient(smoothed_x)

def amss_improved(x, y):
    dx = smoothed_gradient(x)
    dy = smoothed_gradient(y)
    # 添加Sakoe-Chiba窗口约束,窗口大小设为序列长度的10%
    window_size = max(len(dx), len(dy)) // 10
    return dtw_path_from_metric(dx, dy, metric=distance.cosine, 
                                global_constraint="sakoe_chiba", 
                                sakoe_chiba_radius=window_size)[1]

内容的提问来源于stack exchange,提问作者hfaila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 18:32:41