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

标签 algorithm math cluster-analysis

谁能推荐一些可以将距离矩阵作为输入的聚类算法?或者也可以基于距离矩阵来评估聚类“优度”的算法?

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

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

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

算法应该只使用距离(相似度)矩阵作为输入。

最佳答案

Or the algorithm which can assess the "goodness" of the clustering also based on the distance matrix?

KNN 应该有助于评估聚类分配的“优度”。方法如下:

给定一个距离矩阵,每个点都根据它所属的集群(它的“集群标签”)进行标记:

  1. 根据 k 最近邻分类隐含的聚类标签测试每个点的聚类标签
  2. 如果 k 最近邻暗示了一个替代集群,则该分类点会降低该集群的整体“良好”评级
  3. 总结每个像素的“良好评级”贡献以获得整个集群的总“良好评级”

与 k-means 聚类分析不同,您的算法将返回有关分类不佳的点的信息。您可以使用该信息将某些点重新分配给新集群,从而提高集群的整体“优度”。

由于该算法对簇质心的位置一无所知,因此对全局簇密度一无所知,因此确保局部和全局密集的簇的唯一方法是运行该算法的范围k 值并找到一种排列方式,使 k 值范围内的优度最大化。

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

关于algorithm - 以距离矩阵为输入的聚类[评估]算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2939477/

相关文章:

python - 投注算法,特别是赢得赌注的算法?

algorithm - 等簇大小的 K-means 算法变体

用于混合数据类型(包括字符串)的 Java 矩阵库

c# - 为什么 Math.Round() 不支持 float ?

python - 缩放数据会降低聚类的质量

python - 寻找一种简单的校验和(或散列)算法,对最多 N 个字符的 ASCII 字符串无冲突

algorithm - 连通分量数

java - Node HMAC 结果不同于 Ruby 和 Java

JavaScript 从一个范围内随机选择/返回一个数字?

javascript - 获取数组中最多数量的严格均匀间隔的元素,最多可达 'N'