有人能建议一些可以用距离矩阵作为输入的聚类算法吗?或者也可以基于距离矩阵来评估聚类“良好性”的算法?
此时我正在使用Kruskal算法(http://en.wikipedia.org/wiki/Kruskal%27s_algorithm)的修改将数据拆分为两个群集。但它有一个问题。当数据没有不同的簇时,算法仍将创建两个簇,其中一个簇包含一个元素,另一个簇包含所有其余元素。在这种情况下,我宁愿有一个包含所有元素的集群,另一个集群是空的。
是否有任何能够进行此类聚类的算法?
是否有任何算法可以估算群集的完成情况,甚至可以更好地估算数据中有多少个群集?
算法应仅适用于距离(相似度)矩阵作为输入。
答案 0 :(得分:2)
或者可以评估的算法 聚类的“善”也 基于距离矩阵?
KNN应该有助于评估聚类作业的“优点”。方法如下:
给定一个距离矩阵,每个点根据它所属的簇标记(其“簇标签”):
与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? 聚类是一个较大的区域,一种尺寸并不适合所有区域。