K-Means 聚类算法

K-means 是一种聚类算法,且对于数据科学家而言,是简单且热门的无监督式机器学习 (ML) 算法之一。

什么是 K-Means?

无监督式学习算法尝试在无标记数据集中“学习”模式,发现相似性或规律。常见的无监督式任务包括聚类和关联。K-means 等聚类算法试图通过分组对象来发现数据集中的相似性,与不同集群间的对象相似性相比,同一集群中对象之间的相似性更高。使用最小距离、数据点密度、图形或各种统计分布等标准将其分组为集群。 

K-means 通过最小化几何点之间的平均距离将相似数据点分组成集群。为此,它以迭代方式将数据集分为非重叠子组(或集群)的固定数量 (K),其中每个数据点均属于集群中心均值最近的集群。 

为何选择 K-Means?

K-means 是一种聚类算法,部署后可用于发现数据中尚未明确标记的组。目前,它已广泛应用于各种商业应用,包括:

  • 客户分割:可以对客户进行分组,以便更好地定制产品。
  • 文本、文档或搜索结果聚类:分组以查找文本中的主题。
  • 图像分组或图像压缩:图像或颜色相似的组。
  • 异常检测:从集群中找出不相似的地方或异常值
  • 半监督式学习:将集群与一组较小的已标记数据和监督式机器学习相结合,以获得更有价值的结果。

K-Means 的工作原理

K-means 算法能够识别数据集中一定数量的中心,而中心属于特定集群所有数据点的算术平均值。然后,算法将每个数据点分配给最近的集群,因为其尝试保持尽可能小的集群(K-means 中的“means”是指计算数据平均值或查找中心的任务)。同时,K-means 尝试保持其他集群尽可能不同。

在实践中,其工作原理如下:

  • K-means 算法首先将所有坐标初始化为“K”集群中心。(K 值是一个输入变量,位置也可以作为输入变量。)

  • 每经过一次算法,每个点都会分配给其最近的集群中心。

每经过一次算法,每个点都会分配给其最近的集群中心。

  • 然后,集群中心会被更新为在该经过中分配给其的所有点的“中心”。这是通过重新计算集群中心作为各自集群中点的平均值来实现的。
  • 算法会重复执行,直到上次迭代的集群中心发生最小变化。

如果集群呈现一致的球形形状,说明 K-means 在捕获结构和进行数据推理方面非常有效。但是,如果集群呈现更复杂的几何形状,那就说明算法在数据聚类方面做得不好。K-means 的另一个缺点是,该算法不允许彼此距离较远的数据点共享同一集群,而不管它们是否属于该集群。K-means 本身不会从数据中了解到集群数量,而是必须预先定义信息。最后,当集群之间出现重叠时,K-means 无法确定如何分配重叠位置的数据点。

适用于数据科学家的 K-Means

由于其内在的简单性以及在无监督机器学习操作中的普及,K-means 在数据科学家中大受青睐。尽管该算法存在局限性,但其在数据挖掘操作中的适用性允许数据科学家利用该算法从业务数据中衍生出各种推理,实现更准确的数据驱动决策。它被广泛认为是数据科学家最具商业重要性的算法之一。

使用 GPU 加速聚类

聚类在各种应用程序中发挥着关键作用,但由于数据量不断增加,其正面临着计算挑战。解决计算难题的极具前景的解决方案之一,即使用 GPU 进行并行计算。

在架构方面,CPU 仅由几个具有大缓存内存的核心组成,一次只可以处理几个软件线程。相比之下,GPU 由数百个核心组成,可以同时处理数千个线程。GPU 具有大规模并行性,并且显存访问带宽优势显著,因此十分适用于加速数据密集型分析。  

CPU 与 GPU 的区别。

 

GPU 加速的端到端数据科学

基于 CUDA 构建的 RAPIDS 开源软件库套件使您能够完全在 GPU 上执行端到端数据科学和分析流程,同时仍然使用 Pandas 和 Scikit-Learn API 等熟悉的界面。

RAPIDS cuML 的机器学习算法和数学基元遵循熟悉的类似于 scikit-learn 的 API。单块 GPU 和大型数据中心部署均支持 K-means、XGBoost 等主流算法。针对大型数据集,相较于同等功效的 CPU,这些基于 GPU 的实施方案能够以 10 到 50 倍的速度更快地完成任务。

完全在 GPU 上执行端到端数据科学和分析流程

借助 RAPIDS GPU DataFrame,数据可以通过一个类似 Pandas 的接口加载到 GPU 上,然后用于各种连接的机器学习和图形分析算法,而无需离开 GPU。这种级别的互操作性是通过 Apache Arrow 这样的库实现的。这可加速端到端流程(从数据准备到机器学习,再到深度学习)。

RAPIDS 支持在许多热门数据科学库之间共享设备内存。这样可将数据保留在 GPU 上,并省去了来回复制主机内存的高昂成本。