我想对我拥有的对象执行K-均值聚类,但是这些对象并未描述为空间中的点,即按objects x features
数据集。但是,我能够计算任何两个对象之间的距离(它基于相似度函数)。因此,我处理了距离矩阵objects x objects
。
我之前已经实现了K-means,但这是通过点数据集输入实现的。而且在没有输入距离矩阵的情况下,我不清楚如何将群集更新为没有点表示的群集“中心”。通常如何做?为此,是否存在K均值或方法的版本?
我想对我拥有的对象执行K-均值聚类,但是这些对象并未描述为空间中的点,即按objects x features
数据集。但是,我能够计算任何两个对象之间的距离(它基于相似度函数)。因此,我处理了距离矩阵objects x objects
。
我之前已经实现了K-means,但这是通过点数据集输入实现的。而且在没有输入距离矩阵的情况下,我不清楚如何将群集更新为没有点表示的群集“中心”。通常如何做?为此,是否存在K均值或方法的版本?
Answers:
显然,k-means需要能够计算均值。
但是,它有一个众所周知的变体,称为k-medoids或PAM(围绕Medoids分区),其中medoid是群集最中心的现有对象。K-medoids仅需要成对的距离。
您正在准确地描述内核 -means 的问题设置;当您无法将数据点表示为欧几里得向量时,但是如果您仍然可以计算(或定义)两个数据点之间的内积,则可以对算法进行核化。以下网页简要介绍了该算法:
这个内核技巧是统计学和机器学习中非常流行且基本的想法。
如果您有兴趣,BernhardSchölkopf和Alexander J. Smola 所著的《与内核学习》一书将是非常好的介绍。
Max Welling的这张纸条看起来非常不错;另外,如果您使用的是R,则可以查看此R包。
MDS可能是解决问题的一种方法,但它不能直接攻击您要解决的问题;而内核k均值则可以。
@gung绝对正确,建议您将多维缩放(MDS)作为创建 points X dimensions
距离矩阵之外数据的初步工具。我只添加一些笔画。K-均值聚类意味着欧式距离。MDS将为您提供三维点坐标,从而保证您的欧式距离。您应该使用度量MDS并请求尽可能大的尺寸数,因为您的目的是最大程度地减少重新压缩数据的错误,而不是将其映射为2D或3D。
如果您手头没有MDS软件,但是拥有一些矩阵功能(例如特征值分解或奇异值分解),该怎么办?然后,您可以自己制作简单的度量MDS -Torgerson MDS,也称为主坐标分析(PCoA)。这有点“扭曲”主成分分析。尽管它很简单,但这里我将不对其进行描述。您可以在许多地方(例如在此处)阅读有关它的信息。
最后,可以直接编写“用于距离矩阵输入的K均值”,而无需调用或编写执行PCoA或其他度量MDS的函数。我们知道,(a)与质心的平方偏差之和等于成对平方的欧几里得距离的总和除以点数;(b)知道如何从距离矩阵中计算聚类质心之间的距离;(c),我们进一步知道平方和在K 均值中如何相互关联。所有这些加在一起使得编写您想要的算法简单而又不复杂。人们应该记住,K均值仅用于欧几里得距离/欧几里德空间。对于非欧几里得距离,请使用K型medoids或其他方法。
关于群集和MDS,我建议以下资源:
这些参考文献还很好地涵盖了二进制和连续数据的相似性和距离函数(接近度度量)主题。