【问题标题】:Algorithm to align numerical sequences对齐数字序列的算法
【发布时间】:2017-05-14 22:31:41
【问题描述】:


假设我有两个数字数据序列:
S1 : 1,6,4,9,8,7,5 和 S2 : 6,9,7,5
而且我想找到左右和左右两种意义上的序列比对。
所以我在询问之前使用了 2 种技术,但我实际上使用了匈牙利算法,但它不是顺序的,所以它没有给出好的结果
而且我使用了 Needleman–Wunsch 算法的修改版本,但我认为我可能做错了或其他什么,我已经挖掘了至少 4 个月的时间来寻找任何可以帮助我的东西,但我只找到了可能有帮助的遗传算法,但我想知道是否存在我可能还没有看到的算法?
因此,正式提出我的问题:你将如何对齐两个 数字(整数或双精度)序列?

【问题讨论】:

  • 您的问题中显示的 2 个序列的预期输出是什么?您如何获得该输出的解释是什么?
  • 您是否应该尝试找出您迄今为止编写的代码(通过调试)有什么问题,而不是废弃它并要求采用不同的方法?
  • @Dukeling 假设这将是一个数组,其中我们将拥有匹配最佳的元素(不是真正的完美匹配),但至少可能是最近的元素,所以这个例子是随机的,它会给出一个完美匹配,例如 ([2,1],[4,2],[6,3],[7,4]) 左元素是 S1 序列的索引,匹配右元素是S2 从中我将计算这两个序列之间的距离,这实际上是不匹配元素的总和 + 匹配元素的绝对减法的总和
  • @Dukeling 我不会要求另一种方法,如果我不判断没有工作错误的方法先生,但我不是提议使用它的人,我一直非常努力地寻找另一种我找不到的方法,所以这就是为什么我希望找到有知识的人,我无法接触到,甚至可以帮助我,甚至只是给我一个提示,这样我就可以继续寻找解决方案
  • 这听起来与the longest common subsequence problem 非常相似。如果您需要有关该部分的帮助,您需要具体而准确地定义如何比较非精确匹配以确定最佳匹配。

标签: algorithm sequence-alignment


【解决方案1】:

我相信您可以通过以下方式实现您的目标:

import string
from Bio import pairwise2
from Bio.pairwise2 import format_alignment

seq1 = "1649875"
seq2 = "6975"

numDict = {}
for x in range(0,10):
    for y in range(0,10):
        numDict[(str(x),str(y))] = -abs(x-y)
#print(numDict)

for a in pairwise2.align.globalds(seq1, seq2, numDict, -3, -1):
    print(format_alignment(*a)) #prints alignment with best score

#for a in pairwise2.align.globalms(seq1, seq2, 5, -5, -3, -1):
    print(format_alignment(*a))

globalds 对齐允许您使用自定义字典(在本例中,我创建了一个包含 1-9 范围内数字的字典,并在配对时找到了它们差异的绝对值)。如果你只想要一个统一的是/否评分系统,你可以做一些类似 globalms 的事情,其中​​成功是 +5,失败是 -5。请注意,我建议在执行对齐时使用间隙惩罚。还要熟悉“全局”和“本地”对齐方式。关于 Pairwise2 biopython 模块的更多信息可以在这里找到:http://biopython.org/DIST/docs/api/Bio.pairwise2-module.html

【讨论】:

  • 感谢您的回答,但即使数字不同,我实际上也在寻找对齐方式,因为该序列实际上是一个浮点序列,但我想要一个更全局的解决方案,我实际上发现它只是忘记了分享它,所以我使用了Wunsch Needleman Algorithm,它适应了我的具体问题,并将我刚刚自然完成的数据与绝对值和 max(seq) + 1 的差距进行了比较,我不知道为什么 +1它对我来说就是这样,我将不得不进一步搜索如何改进它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 2011-08-14
  • 1970-01-01
  • 2012-12-13
  • 1970-01-01
  • 2012-02-25
相关资源
最近更新 更多