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