时间序列与连续和分类数据对齐

时间:2015-05-22 18:28:43

标签: algorithm

我想要对齐一对定时测量系列。我有 注释器判断和标记信号和想要的模糊事件 以最佳方式匹配他们的时间和事件。输入是四列: 一个注释器的事件发生时间和标签,以及时间和 另一个注释器的标签。例如(作为行):

annotator_1_times: .34, .39, .50, .68, .88

annotator_1_label:   A,   X,   Q,   L,   Z

annotator_2_times: .33, .41, .67, .90

annotator_2_label:   A,   X,   L,   X

注释器不一定具有相同数量的事件 解释相同的信号。预计一般的注释器都会有 相似但不相同的标签,以及相似但不相同的时间。

如何做到这一点取决于某种成本函数 - 什么会决定"坏"它暂时离开了 一定数量,并且两个标签不同意。

我的示例中的理想输出:

   annotator_1_times: .34, .39, .50, .68, .88

   annotator_1_label:   A,   X,   Q,   L,   Z

   annotator_2_times: .33, .41,  [], .67, .90    <-note gap inserted

   annotator_2_label:   A,   X,  [],   L,   X

东西我会事后做的:

time_mismatch_dif: .01, .02,  XX, .01, .02    <- for computing agreemt

label_mismatches_:   0,   0, ADD,   0, SUBST  <- for computing agreemt

困难的部分是知道在哪里插入间隙。

如果需要,我可以只做数字对齐和单独对齐 标签对齐,然后以某种方式合并它们。我知道有 字符对齐算法(例如在遗传学中)并且必须存在 时间序列对齐算法。

欢迎任何建议。

1 个答案:

答案 0 :(得分:1)

您的问题与Levenshtein distance问题非常相似,您可以在那里调整相同的算法。

首先定义您的成本函数。

然后,在二次表上运行动态编程:对于每个ij计算ans[i][j],这就是&#39;对齐成本&#39;来自第一个注释器的第一个i事件和来自第二个注释器的第一个j事件。这可以通过三种方式完成:

  • 对齐ij,然后ans[i][j]成为ans[i-1][j-1] + costAlignment(a[i],b[j])
  • 要么i和&#39;差距&#39;,那么ans[i][j]会变成ans[i-1][j] + costGap(a[i])
  • 要么j和&#39;差距&#39;,那么ans[i][j]会变成ans[i][j-1] + costGap(b[j])

您应该选择最少三个选项。