与 HDBSCAN 相比,k-means 对运行时的期望有什么优势吗?

机器算法验证 聚类 k-均值 层次聚类 数据库扫描
2022-03-29 20:42:42

我最近了解了HDBSCAN(一种相当新的聚类方法,在 scikit-learn 中尚不可用),并且对它的出色表现感到非常惊讶。下图说明了 HDBSCAN 的前身——DBSCAN——已经是唯一在不同聚类任务样本上完美执行的算法:

聚类

使用 HDBSCAN,您甚至不需要设置 DBSCAN 的距离参数,使其更加直观。我自己已经在一些自定义聚类任务上进行了尝试,它的性能总是比我迄今为止尝试过的任何其他算法都好。

所以我的问题是:除了计算时间之外,k-means 仍然优于所有,是否有任何情况下 k-means 可能更胜一筹?例如高维数据,还是奇怪的集群组合?老实说,我真的什么都想不出来……

2个回答
  1. 随机化可能很有价值。您可以多次运行 k-means 以获得不同的可能集群,因为并非所有集群都很好。使用 HDBSCAN,您将始终再次获得相同的结果。

  2. 分类器:k-means 产生一个明显且快速的最近中心分类器来预测新对象的标签。在 HDBSCAN 中正确标记新对象并不明显

  3. 无噪音。许多用户不(想)知道如何处理数据中的噪音。K-means 给出了一个非常简单易懂的结果:每个对象都恰好属于一个集群。使用HDBSCAN,对象可以属于0个簇,簇实际上是一棵树而不是扁平的。

  4. 性能和近似值。如果你有一个庞大的数据集,你可以随机抽取一个 k-means 样本,统计数据表明你会得到几乎相同的结果。对于 HDBSCAN,尚不清楚如何仅将其与数据子集一起使用。

但不要误会我的意思。恕我直言,k-means 非常有限,难以使用,并且经常在不适当的问题和数据上使用不当。我很欣赏 HDBSCAN 算法(以及原始的 DBSCAN 和 OPTICS)。在地理数据上,这些方法比 k-means 好一千倍。K-means 完全被过度使用(因为太多的课程除了 k-means 什么都不教),而 mini-batch k-means 是 k-means 的最差版本,当你的数据适合时使用它没有意义内存(因此应该从 sklearn 恕我直言中删除)。

是的,有一个例子:iris 数据集几乎完美地通过 k-means 对它的三个类进行聚类,而 hdbscan 很可能无法恢复这三个类。当然你需要知道有三个类。

然而,我认为这个任务不是聚类的目的——它是某种“无监督分类”任务,基本上是无稽之谈。然而,不幸的是,大量的研究人员正在这样评估他们的论文(如“尝试聚类是否可以恢复标签”)。原因很简单:评估无监督学习本质上是困难的——我知道,因为我是一名聚类自己的研究人员。所以这本质上是无效的,但易于理解的“评估方法”。如果有人对这方面的更多信息感兴趣,我可以提供,但我不确定目前是否有人关心。

从科学上讲,没有“好”或“坏”的聚类技术。首先,根据对“集群”的不同定义,只有不同的技术。但是,k-means 遵循的定义通常不是您想要的定义 - 这就是为什么 k-means 通常不是您想要的方法,因此 k-means 的使用是有限的。这个定义非常自以为是。事实上,看起来我什至不确定我是否将 k-means 称为聚类方法,或者更确切地说是矢量量化方法——正如许多其他人所说的那样。

在这里,我们看到了 k-means 的一个非常有用的应用(坦率地说,我会使用 k-means):镶嵌空间。由于 k-means 也非常快,因此它对于某种“多维直方图”或“预聚类”以加快速度和此类事情非常有用。不幸的是,这通常意味着您想要一个大的“k”,然后 k-means 变得很慢(二次运行时),这违背了目的。幸运的是,这就是双树发挥作用的地方——即使对于较大的“k”,它们也能够使 k-means 变得更快。