我正在尝试使用变量之间的相关距离来自定义一个分层聚类过程,并且我需要评估聚类质量。但是,我在python中找到的所有聚类质量评估方法都是面向观察的,并且不使用距离矩阵作为输入。
例如,sci-kit learn、SciPy或clusteval中可用的聚类评估分数不提供如何使用距离矩阵作为输入来计算以下基于距离的质量度量:
1.戴维斯-布尔丁指数
1.卡林斯基哈拉巴斯
1.剪影
你有任何解决方案来访问集群质量使用自定义的距离指标在层次聚类?
基于距离矩阵的层次聚类
DistanceMatrix = 1-abs(pipe6.Stats())
N = DistanceMatrix.shape[0]
score = []
for K in range(2, N-1):
hclus = skclus.FeatureAgglomeration(n_clusters=K,
linkage="complete",
metric="precomputed")
hclus.fit(DistanceMatrix)
clusters = hclus.labels_
Quality = metrics.davies_bouldin_score(X=DistanceMatrix,
labels=clusters)
score.append(Quality)
2条答案
按热度按时间6tdlim6h1#
使用Silhouette,您可以使用
metric=precomputed
并传递距离矩阵。7dl7o3gd2#
一个可能的解决方案是使用
sklearn.cluster
模块中的FeatureAgglomeration
类,它可以在预先计算的距离矩阵上执行层次聚类。然后,您可以使用sklearn.metrics
模块中的davies_bouldin_score
函数(该函数可以接受距离矩阵作为输入)来评估聚类质量。下面是实现这种方法的代码示例:
另一种可能的解决方案是使用
scipy.cluster.hierarchy
模块中的linkage
函数,该函数也可以对预先计算的距离矩阵执行分层聚类。但是,您需要将冗余的方阵转换为压缩向量形式,该形式仅包含矩阵的上三角元素。您可以使用scipy.spatial.distance
模块中的squareform
函数来执行此转换。然后,您可以使用任何接受观测向量数组作为输入的聚类质量度量,例如来自sklearn.metrics module
的silhouette_score
或calinski_harabasz_score
。下面是实现这种方法的代码示例: