以距离矩阵为输入的聚类[评估]算法

时间:2010-05-30 16:38:21

标签: algorithm math cluster-analysis

有人能建议一些可以用距离矩阵作为输入的聚类算法吗?或者也可以基于距离矩阵来评估聚类“良好性”的算法?

此时我正在使用Kruskal算法(http://en.wikipedia.org/wiki/Kruskal%27s_algorithm)的修改将数据拆分为两个群集。但它有一个问题。当数据没有不同的簇时,算法仍将创建两个簇,其中一个簇包含一个元素,另一个簇包含所有其余元素。在这种情况下,我宁愿有一个包含所有元素的集群,另一个集群是空的。

是否有任何能够进行此类聚类的算法?

是否有任何算法可以估算群集的完成情况,甚至可以更好地估算数据中有多少个群集?

算法应仅适用于距离(相似度)矩阵作为输入。

3 个答案:

答案 0 :(得分:2)

  

或者可以评估的算法   聚类的“善”也   基于距离矩阵?

KNN应该有助于评估聚类作业的“优点”。方法如下:

给定一个距离矩阵,每个点根据它所属的簇标记(其“簇标签”):

  1. 针对k近邻分类隐含的群集标签测试每个点的群集标签
  2. 如果k近邻意味着另一个群集,则该分类点会降低群集的整体“良好”等级
  3. 总结每个像素的“良好评级”贡献,以获得整个群集的“良好评级”
  4. 与k-means聚类分析不同,您的算法将返回有关分类不佳的点的信息。您可以使用该信息将某些点重新分配给新的群集,从而提高群集的整体“良好性”。

    由于算法对集群质心的位置一无所知,因此,没有关于全局集群密度的任何信息,确保本地和全局密集的集群的唯一方法是运行该算法的范围k值并找到一种在k值范围内最大化良好性的排列。

    对于大量的积分,您可能需要优化此算法;可能有一个哈希表来跟踪相对于每个点的最近点。否则这个算法需要很长时间才能计算出来。

答案 1 :(得分:1)

可用于估计群集数量的一些方法是:

答案 2 :(得分:0)

scipy.cluster.hierarchy运行3个步骤,就像Matlab(TM)一样 clusterdata

Y = scipy.spatial.distance.pdist( pts )  # you have this already
Z = hier.linkage( Y, method )  # N-1
T = hier.fcluster( Z, ncluster, criterion=criterion )

这里linkage可能是修改后的Kruskal,dunno。 这SO answer (ahem)使用上述内容 作为聚类的度量,半径= rms到聚类中心的距离是快速合理的, 为2d / 3d点。

告诉我们您的Npt,ndim,ncluster,hier / flat? 聚类是一个较大的区域,一种尺寸并不适合所有区域。