仅使用距离矩阵而不是按特征点数据执行K均值(或其近亲)聚类


22

我想对我拥有的对象执行K-均值聚类,但是这些对象并未描述为空间中的点,即按objects x features数据集。但是,我能够计算任何两个对象之间的距离(它基于相似度函数)。因此,我处理了距离矩阵objects x objects

我之前已经实现了K-means,但这是通过点数据集输入实现的。而且在没有输入距离矩阵的情况下,我不清楚如何将群集更新为没有点表示的群集“中心”。通常如何做?为此,是否存在K均值或方法的版本?


您是什么意思,没有描述为要点?
2014年

Answers:


24

显然,k-means需要能够计算均值

但是,它有一个众所周知的变体,称为k-medoids或PAM(围绕Medoids分区),其中medoid是群集最中心的现有对象。K-medoids仅需要成对的距离。


21

您正在准确地描述内核 -means 的问题设置;当您无法将数据点表示为欧几里得向量时,但是如果您仍然可以计算(或定义)两个数据点之间的内积,则可以对算法进行化。以下网页简要介绍了该算法:k

内核均值页面k

这个内核技巧是统计学和机器学习中非常流行且基本的想法。

Wiki页面上的内核技巧

如果您有兴趣,BernhardSchölkopf和Alexander J. Smola 所著的《与内核学习》一书将是非常好的介绍。

Max Welling的这张纸条看起来非常不错;另外,如果您使用的是R,则可以查看此R包

MDS可能是解决问题的一种方法,但它不能直接攻击您要解决的问题;而内核k均值则可以。


我想添加更多链接,但是由于声誉低而不能。Max Welling 笔记中的这张笔记看起来非常不错。另外,如果您使用的是R,则可以看看此R包
d_ijk_stra 2012年

(+1)欢迎光临本站。我已经将您评论中的链接添加到帖子正文中,并将链接添加到Schölkopf和Smola文本中。
主教

9

@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或其他方法。

一个类似的问题


7

我当然不知道它是如何“正常”完成的,从记录来看,我对聚类分析不了解很多。但是,您是否熟悉多维缩放?(这是Wiki 另一个参考,您可以在“ 标签下搜索CV 。)“多维尺度”采用成对距离的矩阵,这听起来像您的情况。从MDS中,您可以获取对象在最低维度空间中的位置,以充分表示它们。我猜您可以使用这些位置进行后续的聚类分析,例如k均值;或者,一旦有了输出,就可能不再需要CA。

我不知道,如果你使用R,但这里是心理测试,其中包括R.希望MDS上一节,有助于任务的视图。


4

k

对于您的情况,您基本上需要做的是:

  1. D
  2. DijDji
  3. Dc
  4. Sc=12Dc
  5. ScScS~c
  6. S~c=VΛV
  7. n1X=VΛ1/2

n


所描述的步骤无异于我在回答中提到的主坐标分析。
ttnphns 2012年

请举例说明您的第5步。从S个矩阵元素减去最后一个(负)特征值似乎无助于使S正半定。
ttnphns 2012年

@ttnphns:基本上是PCA,是的,但是它不需要度量距离。不幸的是,对步骤5的描述很遗憾,感谢您发现它。现在清楚了吗?
blubb

从所有特征值中减去负特征值的总和,然后恢复S矩阵等效于从S的对角元素中减去该总和。这一点使S成为正(半)定数,但是...
ttnphns 2012年

......但这种方式在某种意义上非常糟糕的结果欧几里德数据X生产欧式距离D_new这是远,从原来的不同点D.因此,我不建议你5步中似乎要好得多简单地组负特征值设为0,然后跳到步骤7。或者,稍微好一点的方法:将负特征值设置为0,重新缩放正特征值,使它们的和为原始值(= trace(S)),然后跳至步骤7。这就是它的样子对我来说。
ttnphns

2

您也可以将数据视为网络,并且可以使用许多可用的网络群集算法中的一种。为此,您可能需要在边缘权重上应用阈值,并将距离转换为相似度。它不是“统计”的处理方式,但是开始时集群分析是一个未明确说明的问题,并且作为探索性工具,网络集群算法的性能非常好。


2

我不知道为什么它在文献中如此罕见,但是@gung和@ttnphns建议的解决方案(首先使用主坐标分析将成对距离投影到欧几里得空间中,例如,如果使用R,则通过包进行投影,然后以通常的方式进行K均值)很简单,不需要专门的算法。我个人用它这里嵌入在优化框架和它的工作相当不错。


1

关于群集和MDS,我建议以下资源:

这些参考文献还很好地涵盖了二进制和连续数据的相似性和距离函数(接近度度量)主题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.