Python:单链接聚类算法

Python:单链接聚类算法,python,algorithm,Python,Algorithm,我是Python新手,我正在寻找一个简单、简单的单链接集群Python算法的示例,该算法基于创建邻近矩阵并从中删除节点。我知道有些软件包像numpy,但我宁愿避免使用它们。 我在网上搜索过,但找不到任何简单到可以理解的代码,以便以后自己复制 从具有级别L(0)=0和序列号m=0的不相交聚类开始 根据d[(r),(s)]=min d[(i),(j)],找到当前聚类中最相似的一对聚类,例如,对(r),(s),其中最小值在当前聚类中的所有聚类对上 增加序列号:m=m+1。将簇(r)和(s)合并到单个簇

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

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

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

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

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

如果所有对象都在一个簇中,请停止。否则,请转至步骤2

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

这就是我到目前为止所做的:

比较 创建矩阵 以下是我试图比较的序列:


seqlist={“人类”:“黑猩猩”:“人类”:“黑猩猩”:“西方塔尔西亚人”:“西方塔尔西亚人”:“人类”:“人类”:“老鼠”:“黑猩猩”:“兔子”:“西方塔尔西亚人”:“西方塔尔西亚人”:“西方塔尔西亚人”:“西方塔尔西亚人”:“西方塔尔西亚人”:“西方塔尔西亚人”:“西方塔尔西亚人”:“西方塔尔西亚西亚人”:“西方塔尔西亚人”:“西方塔尔西亚人”:“西方塔尔西亚西亚人”:“西方塔尔西亚塔尔西亚人”:“西方塔尔西亚西亚西亚人”:“老鼠”:“MGDAEAGKIFKKIFKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK“MGDVEKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKPNLHG”,“蜜蜂”:“AGDPEKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK.在scipy.spatial模块中查找函数pList

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


请参见

这个问题似乎离题了,因为它是一个请求,例如代码对不起,我自己做了第一部分,创建了矩阵,但不知道如何从那里重新定位。有没有更好的方法来重新表述它?@Kaporus kanateris既然你已经写了这个问题的部分解决方案,你应该将它发布在这个页面上n我们可以找出还需要做什么。只是添加了我到目前为止所做的一切。
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