【问题标题】:Python: Single linkage clustering algorithmPython:单链接聚类算法
【发布时间】:2014-03-13 22:52:08
【问题描述】:

我是 Python 新手,我正在寻找一个基于创建邻近矩阵并从中删除节点的简单、简单的单链接聚类 Python 算法的示例。我知道有 numpy 之类的软件包,但我宁愿避免使用它们。
我在网上搜索过,但找不到任何简单到能够理解以便以后自己复制的代码。

从级别 L(0) = 0 且序列号 m = 0 的不相交聚类开始。

根据d[(r),(s)] = min d[(i),(j)] 找到当前聚类中最相似的聚类对,比如pair (r), (s)最小值在当前聚类中的所有聚类对上。

增加序列号:m = m + 1。将簇(r)和(s)合并为一个簇,形成下一个簇m。将此聚类的级别设置为 L(m) = d[(r),(s)]

通过删除与集群 (r) 和 (s) 对应的行和列并添加与新形成的集群对应的行和列来更新邻近矩阵 D。新集群之间的接近度,表示为 (r,s) 和旧集群 (k) 定义为 d[(k), (r,s)] = min d[(k),(r)], d[( k),(s)]。

如果所有对象都在一个集群中,请停止。否则,请转到第 2 步。

这些是维基百科中描述的步骤。我已经创建了距离矩阵,但不确定如何在那里进行。

这是我目前所拥有的:

比较

def comparison(protein1, protein2): 

  l = [i for i in range(len(protein1)) if protein1[i] != protein2[i]] 

  return len(l)

创建矩阵

def matrix (r1,r2):

  r = [] 
  for p1 in proteins: 
    r2 = [] 
    for p2 in proteins: 
      r2 += [comparison(p1, p2)] 
    r += [r2] 
  return r

这些是我要比较的序列:

seqlist = { “人”: “MGDVEKGKKIFIMKCSQCHTVEKGGKHKTGPNLHG”, “黑猩猩”: “MGDVEKGKKIFIMKCSQCHTVEKGGKHKTGPNLHG”, “西部眼镜猴”: “MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGXNLHG”, “鼠标”: “MGDAEAGKKIFVQKCAQCHTVEKGGKHKTGPNLWG”, “兔子”: “MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGPNLHG”, “狗” :“MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGPNLHG”,“猪”:“MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGPNLHG”,“鳄龟”:“MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGPNLNG”,“鳄鱼”:“MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGPNLHG”,“蜜蜂”,“AGGHKGKKVGPNV”

【问题讨论】:

  • 这个问题似乎是题外话,因为它是对示例代码的请求
  • 对不起,我自己完成了第一部分,创建了矩阵,但不知道如何从那里开始。有没有更好的改写方式?
  • @kapoios_kanateris 因为你已经写了这个问题的部分解决方案,你应该把它贴在这个页面上。然后我们就可以弄清楚还需要做什么。
  • 刚刚添加了我到目前为止所做的一切。

标签: python algorithm


【解决方案1】:

您应该查看 scipy 包,它实现了多个层次聚类算法(请参阅 scipy.cluster.hierarchy)。在 scipy.spatial 模块中查找函数 pdist。

你应该能够从那里得到很多很好的用法示例。

http://docs.scipy.org/doc/scipy/reference/cluster.hierarchy.html

【讨论】:

    猜你喜欢
    • 2013-11-26
    • 2019-04-28
    • 1970-01-01
    • 2016-04-08
    • 2020-07-31
    • 2021-07-21
    • 1970-01-01
    • 2021-12-14
    • 2011-12-11
    相关资源
    最近更新 更多