我想对给定距离的点进行聚类,但奇怪的是,似乎 scipy 和 sklearn 聚类方法都不允许指定距离函数。
例如,在 sklearn.cluster.AgglomerativeClustering
中,我唯一可以做的就是输入一个亲和矩阵(这将非常占用内存)。为了构建这个非常矩阵,建议使用 sklearn.neighbors.kneighbors_graph
,但我不明白如何指定两点之间的距离函数。有人可以启发我吗?
最佳答案
所有 scipy 层次聚类例程都将接受一个自定义距离函数,该函数接受两个指定一对点的 1D 向量并返回一个标量。例如,使用 fclusterdata
:
import numpy as np
from scipy.cluster.hierarchy import fclusterdata
# a custom function that just computes Euclidean distance
def mydist(p1, p2):
diff = p1 - p2
return np.vdot(diff, diff) ** 0.5
X = np.random.randn(100, 2)
fclust1 = fclusterdata(X, 1.0, metric=mydist)
fclust2 = fclusterdata(X, 1.0, metric='euclidean')
print(np.allclose(fclust1, fclust2))
# True
metric=
kwarg 的有效输入与 scipy.spatial.distance.pdist
的相同.
关于python - 如何指定聚类的距离函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33721996/