【问题标题】:Algorithm to to Cluster Similar Strings in Python?在 Python 中聚类相似字符串的算法?
【发布时间】:2018-08-12 14:07:49
【问题描述】:

我正在编写一个脚本,该脚本当前包含多个 DNA 序列列表(每个列表都有不同数量的 DNA 序列),我需要根据汉明距离相似性对每个列表中的序列进行聚类。我目前的实现(目前非常粗略)提取列表中的第一个序列并计算每个后续序列的汉明距离。如果它在一定的汉明距离内,它会将其附加到一个新列表中,该列表稍后用于从原始列表中删除序列,并将相似的序列存储在 defaultdict 中。在下面查看我当前的代码实现:

def hamming_dist(sequence1, sequence2):
"""
Calculates the hamming distance between 2 sequences
"""
    assert len(sequence1) == len(sequence2)
    return sum(sequence1 !=sequence2 for sequence1,sequence2 \
    in itertools.izip(sequence1,sequence2))


def group_sequences(sequences_list):
    trash_sequences = []
    main_sequence = sequences_list[0]
    clustered_sequence = defaultdict(list)
    while len(sequences_list) > 1:
        for sequence in sequences_list:
            ham_dist = hamming_dist(main_sequence,sequence)
            if hamming_dist < 30:
                trash_sequences.append(sequence)

        for similar_sequences in trash_sequences:
            sequences_list.remove(similar_sequences)
            clustered_sequence[main_tcr].append(similar_sequences)
    else:
        clustered_sequence[main_sequence].append(None)
    return clustered_sequence

显然这不是最好或最有效的方法,即使使用此实现,我的脚本中仍然存在一些错误。我通读了 StackOverflow/StackExchange 问题,看看其他人是否遇到过我的问题,在我发现的类似问题中,许多其他人提到了使用 K-Means 算法、马尔可夫聚类方法、层次聚类等算法。我对这些方法中的任何一种都不太熟悉,除了需要数字而不是字符串的 K-means 方法。

您建议我实施哪种聚类方法来将相似的 DNA 序列聚类在一起,以及实施您首选方法的最佳方法?任何建议将不胜感激!

【问题讨论】:

    标签: python string algorithm cluster-analysis bioinformatics


    【解决方案1】:

    入门的最佳选择是层次聚类

    它很容易理解,它允许任何距离,并且即使数据本身难以可视化,它也可以将聚类可视化为一棵树。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      • 2013-02-24
      • 2011-04-04
      • 2010-10-01
      • 1970-01-01
      • 2015-04-05
      • 1970-01-01
      相关资源
      最近更新 更多