聚类成对距离矩阵

问题描述 投票:0回答:1

所以假设我有一个预先计算的距离矩阵


    1       2       3       4       5
1   0.000   1.154   1.235   1.297   0.960   
2   1.154   0.000   0.932   0.929   0.988
3   1.235   0.932   0.000   0.727   1.244
4   1.297   0.929   0.727   0.000   1.019
5   0.960   0.988   1.244   1.019   0.000

实际上是 100,000 x 100,000 个项目(实际上是分子)的大小。 距离是分子的相似性,0表示基本相等,2表示完全不同。我的目标是将这些化合物聚类成类似化合物的组,并能够挑选每个聚类中“最具代表性”的成员进行进一步分析。 尽管有很多聚类算法,我试图理解它们并让它们工作,但我仍然失败了。我既不知道该选哪个,也不知道如何运行它们的“教程”。

作为一名化学信息学专家,对我来说最有吸引力的结果类似于球体(和质心),类似于球体排斥聚类/Taylor-Butina 聚类。 我将非常高兴收到任何意见、提示或任何指向我的方向或有用的资源。 我试图让 SparseHC 工具运行,它做了一些事情,但由于缺乏文档(或者我缺乏对论文中底层算法和数学的理解),结果对我没有帮助。 非常非常感谢!

python cluster-analysis chemistry distance-matrix
1个回答
0
投票

也许,AgglomerativeClustering 可以解决您的问题。

data = [
[0.000,  1.154,  1.235,  1.297,  0.960],  
[1.154,  0.000,  0.932,  0.929,  0.988],
[1.235,  0.932,  0.000,  0.727,  1.244],
[1.297,  0.929,  0.727,  0.000,  1.019],
[0.960,  0.988,  1.244,  1.019,  0.000]
]

# If you have an idea about how many clusters you are expecting:
from sklearn.cluster import AgglomerativeClustering
clusterer = AgglomerativeClustering(n_clusters=3, metric="precomputed", linkage="average", distance_threshold=None)
clusters = clusterer.fit_predict(data)
print(clusters)
>> array([2, 0, 0, 0, 1])


# If you do NOT have an idea on how many clusters you are expecting. 
# then you need to define a distance_threshold
from sklearn.cluster import AgglomerativeClustering
clusterer = AgglomerativeClustering(n_clusters=None, metric="precomputed", linkage="average", distance_threshold=None)
clusters = clusterer.fit_predict(data)
print(clusters)
>> array([2, 3, 4, 1, 0])
© www.soinside.com 2019 - 2024. All rights reserved.