python - 如何指定聚类的距离函数?

标签 python scipy scikit-learn hierarchical-clustering

我想对给定距离的点进行聚类,但奇怪的是,似乎 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/

相关文章:

python - "TemplateSyntaxError: Invalid filter:";基于 django 文档的自定义 django 模板过滤器已损坏,但模板标签正常工作

python - 不可变的 numpy 数组

python - 是否可以在 scikit learn 中使用复数作为目标标签?

python - LightGBM-分类指标无法处理二进制和连续目标的混合

python - 在网格上查找小部件(tkinter)

python - 使用命令行垂直分割csv文件

python - 如何禁用 Gtk 上的所有默认按键

python - 定义在 odeint 中使用的谐振子函数

python - 为什么我的 sklearn MDS(多维缩放)可视化看起来如此无信息(完美的圆形和圆形)?

python - `r2_score` 的 `scikit-learn` 与 R^2 计算明显不匹配