所以假设我有一个预先计算的距离矩阵
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 工具运行,它做了一些事情,但由于缺乏文档(或者我缺乏对论文中底层算法和数学的理解),结果对我没有帮助。 非常非常感谢!
也许,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])