我想对给定距离的点进行聚类,奇怪的是,似乎 scipy 和 sklearn 聚类方法都不允许指定距离函数。
例如,在sklearn.cluster.AgglomerativeClustering
,我唯一可以做的就是输入一个亲和力矩阵(这将非常占用内存)。为了构建这个矩阵,建议使用sklearn.neighbors.kneighbors_graph
,但我不明白如何指定两点之间的距离函数。有人可以启发我吗?
所有 scipy 层次聚类例程都将接受自定义距离函数,该函数接受指定一对点的两个一维向量并返回一个标量。例如,使用fclusterdata https://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.fclusterdata.html#scipy.cluster.hierarchy.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 http://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.spatial.distance.pdist.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)