我想要对齐一对定时测量系列。我有 注释器判断和标记信号和想要的模糊事件 以最佳方式匹配他们的时间和事件。输入是四列: 一个注释器的事件发生时间和标签,以及时间和 另一个注释器的标签。例如(作为行):
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
困难的部分是知道在哪里插入间隙。
如果需要,我可以只做数字对齐和单独对齐 标签对齐,然后以某种方式合并它们。我知道有 字符对齐算法(例如在遗传学中)并且必须存在 时间序列对齐算法。
欢迎任何建议。
答案 0 :(得分:1)
您的问题与Levenshtein distance问题非常相似,您可以在那里调整相同的算法。
首先定义您的成本函数。
然后,在二次表上运行动态编程:对于每个i
和j
计算ans[i][j]
,这就是&#39;对齐成本&#39;来自第一个注释器的第一个i
事件和来自第二个注释器的第一个j
事件。这可以通过三种方式完成:
i
和j
,然后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])
您应该选择最少三个选项。