Python:单链接聚类算法

时间:2014-03-13 22:52:09

标签: python algorithm

我是Python的新手,我正在寻找一个简单的单链接聚类python算法的例子,它基于创建一个邻近矩阵并从中删除节点。我知道有像numpy这样的包,但我宁愿避开它们 我在网上搜索过,但是找不到足够简单易懂的代码,以便之后自己复制。

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

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

增加序列号: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 = {" Human":" MGDVEKGKKIFIMKCSQCHTVEKGGKHKTGPNLHG"," Chimpanzee":" MGDVEKGKKIFIMKCSQCHTVEKGGKHKTGPNLHG"," Western tarsier" ;:" MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGXNLHG","鼠标":" MGDAEAGKKIFVQKCAQCHTVEKGGKHKTGPNLWG"," Rabbit":" MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGPNLHG"," ;狗":" MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGPNLHG","猪":" MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGPNLHG","鳄龟":" MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGPNLNG&#34 ;," Alligator":" MGDVEKGKKIFVQKCAQCHTVEKGGKHKTGPNLHG"," Honeybee":" AGDPEKGKKIFVQKCAQCHTIESGGKHKVGPNLYG",}

1 个答案:

答案 0 :(得分:1)

你应该看一下scipy包,它实现了几个层次聚类算法(参见scipy.cluster.hierarchy)。在scipy.spatial模块中查找函数pdist。

你应该可以从那里获得很多很好的用法示例。

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