聚类是一种无监督的机器学习算法,可根据相似性或模式将不同的对象、数据点或观察结果组织和分类为不同的组或聚类。在机器学习中使用聚类的方法多种多样,从数据集的初步探索到监控正在进行的过程,不一而足。您可以使用它对新数据集进行探索性数据分析,以了解潜在趋势、模式和异常值。另外,您可能有一个较大的数据集,需要将其拆分成多个数据集,或使用降维技术进行缩减。在这种情况下,聚类可以作为预处理的一个步骤。聚类的例子可以包括音乐流派、不同的用户群、市场细分的关键部分、服务器聚类上的网络流量类型、社交网络中的好友群组或许多其他种类的类别。聚类过程可以只使用数据的一个特征,也可以使用数据中存在的所有特征。
将聚类看作是试图找到数据中的自然分组,以了解可能存在的类别以及这些类别的定义,是很有帮助的。聚类可以帮助您找到数据点之间的潜在关系,了解不同类别之间有哪些共同的特征或特性。根据所使用的聚类算法,您可以从数据中删除异常值或将其标记为异常值。聚类还有助于异常检测,它可以检测出哪些数据点不在一个聚类中,或仅与一个聚类有微弱关联,因而可能是数据生成过程中的异常点。
聚类还可以通过减少数据维数来降低大型数据集的复杂性。如果您发现类别仅由两个或三个特征定义,您或许可以去除无关特征或使用 PCA 等降维技术。聚类在创建数据集的可视化方面也非常有用,可以查看数据的新特性以及聚类之间的密度和关系。
聚类算法有时被区分为硬聚类和软聚类,前者是指每个数据点只属于一个聚类,并具有二进制值,即要么在某个聚类中,要么不在某个聚类中;后者是指每个数据点被赋予属于每个已识别聚类的概率。没有最好的聚类过程,您需要选择最符合您的需求和您正在处理的数据的方法。
了解采用 AI 的障碍,特别是缺乏 AI 治理和风险管理解决方案。
注册以获取有关基础模型的指南
有许多不同的聚类算法,因为有多种定义聚类的方法。不同的方法适用于不同类型的模型,具体取决于输入数据的大小、数据的维度、类别的严格程度以及数据集中的聚类数量。值得注意的是,一种算法可能对一个数据集效果很好,而对另一个数据集效果很差。本节将讨论五种常用的聚类方法。还有光谱聚类或均值偏移聚类等其他技术,不在本文讨论范围之内。
基于中心点的聚类是一种聚类方法,它根据数据集中心点之间的距离将数据集划分或分成相似的组。每个聚类的中心点(或中心)是聚类中所有点的平均值或中位数,具体取决于数据。
最常用的基于中心点的聚类技术之一是 K 均值聚类算法。K 均值假定每个聚类的中心点通过与中心点的距离(通常是欧氏距离)来定义聚类。要初始化聚类,您需要提供一个预期的聚类数目,也就是 K 均值中的“K”,然后算法会尝试在数据中找到与该数目相匹配的合理聚类。通过迭代最小化每个点与其分配的聚类中心点之间的总距离,确定给定数据集中的最佳 k 个聚类。
K 均值是一种硬聚类方法,这意味着每个数据点都被分配到一个单独的聚类中,聚类成员资格没有相关概率。如果聚类的大小大致相同,而且整个数据中没有明显的异常值或密度变化,那么 K 均值就能很好地发挥作用。当数据维度较高或聚类的大小或密度差异较大时,K 均值通常不能很好地发挥作用。K 均值对异常值也特别敏感,因为它试图根据聚类中所有值的平均值来建立中心点,因此很容易出现过度拟合,将异常值包括在内。
K 均值的另一种基于中心点的方法是 K 中心点法。中心点是一个数据集或数据集内一个聚类的代表对象,其与聚类中其他对象的距离之和最小。该算法不使用任意的中心点作为图的中心,而是使用单个数据点作为聚类的中点或中心来创建聚类。由于 K 均值算法使用的是现有数据点而不是任意中心点,因此对异常值的敏感度较低。
分层聚类有时也称为基于连接性的聚类,它根据数据点属性的邻近性和连接性将数据点组合在一起。这种方法根据数据点在所有维度上的相互接近程度来确定聚类。其原理是,距离较近的物体比距离较远的物体之间的关系更为密切。与 K 均值不同的是,无需预先指定聚类的数量。相反,聚类算法会在每个层级创建一个聚类图网络。该网络是分层的,也就是说,其中任何一个节点都只有一个父节点,但可能有多个子节点。分层聚类可以用树枝图来表示,以帮助直观地总结和组织已发现的聚类及其可能包含的层次结构。
进行分层聚类分析有两种方法:
凝聚层次: 凝聚层次聚类是一种自下而上的方法,它从单个数据点开始,通过计算当前层次上所有聚类的邻近矩阵来连续合并聚类,从而创建一个树状结构。一旦创建了一级聚类,且所有聚类都没有聚类间相似性或聚类间相似性较低,该算法就会转移到新创建的聚类集,并重复该过程,直到层次图顶部出现一个根节点。在如何合并这些聚类方面,可以有多种选择,但在聚类的质量和效率方面需要进行权衡。在单链接聚类中,两个聚类中任意一对数据点之间的最短距离被用作相似性度量。在全对链接中,使用的是所有数据点对的平均值,而在采样链接中,使用的是两个聚类中数据点的采样来计算平均距离。在中心点链接中,使用的是中心点之间的距离。聚类方法面临的一个挑战是,它们可能会出现链接,即较大的聚类自然会偏向于与其他点的距离更近,因此会不断变大,并吸引更多数据点进入其聚类。另一个缺点是,聚类方法在构建层次结构时可能比分割方法慢得多。
分割式: 在分割式分层聚类方法中,采用自上而下的方法将数据点连续分割成树状结构。第一步是使用 K 均值等平面聚类方法将数据集分成若干个聚类。然后,使用平面聚类方法对平方误差之和(SSE)最大的聚类进行进一步分区。算法会在达到单个节点或某个最小 SSE 时停止。分割式分区在树的层次结构和不同聚类的平衡程度方面都提供了更大的灵活性。不一定要有一棵不同节点深度完全平衡的树,也不一定要有一棵每个分支的度数都正好为 2 的树。这样就可以构建一个树形结构,在平衡节点深度和节点权重(节点中的数据点数量)时进行不同的权衡。分割式分层聚类可能比凝聚层次聚类更快,尤其是当数据不需要一直构建到单个数据点的树时。
基于分布的聚类,有时也称作概率聚类,是根据数据点的概率分布将其归类。此方法假定有一个过程为创建聚类中心的数据的每个维度生成正态分布。它与基于中心点的聚类不同,因为它不使用像欧几里得距离或曼哈顿距离那样的距离度量。相反,基于分布的方法则是在每个维度上寻找一个定义明确的分布。聚类均值是各维度高斯分布的均值。基于分布的聚类是一种基于模型的聚类方法,因为它需要在每个维度上多次拟合分布来查找聚类,这意味着在处理大型数据集时,计算成本会很高。
一种常用的基于分布的聚类方法是通过期望最大化创建高斯混杂模型(GMM)。GMM 之所以被命名为 GMM,是因为假设每个聚类都是由高斯分布(通常称为正态分布)定义的。
考虑一个具有两个不同聚类 A 和 B 的数据集,它们均由两个不同的正态分布定义:一个沿 x 轴,一个沿 y 轴。期望最大化法首先对每个轴上的两个分布进行随机猜测,然后通过两个步骤的交替进行迭代改进:
期望值: 将每个数据点分配到每个聚类,并计算它来自聚类 A 和聚类 B 的概率。
最大化: 根据每个数据点在聚类中的可能性,更新定义每个聚类的参数、加权平均位置和方差-协方差矩阵。然后重复“期望值”步骤,直到方程收敛于为每个聚类观察到的分布。
每个数据点都被赋予与一个聚类相关的概率。这意味着,通过期望值最大化进行聚类是一种软聚类方法,一个给定点可能与不止一个聚类有概率关联。 这在某些情况下是合理的,一首歌可能有点民谣,有点摇滚,或者用户可能更喜欢西班牙语的电视节目,但有时也喜欢看英语的节目。
基于密度的聚类是通过检测点集中的区域以及点被空旷或稀疏区域分隔的区域来实现的。基于中心点的方法(如 K 均值)或基于分布的方法(如期望值最大化)不同,基于密度的聚类可以检测出任意形状的聚类。当聚类没有围绕特定位置或分布进行定义时,这将非常有用。与 K 均值和分层聚类等其他聚类算法不同,基于密度的算法可以发现数据中任何形状、大小或密度的聚类。基于密度的聚类还能区分属于某个聚类的数据点和应被标记为噪声的数据点。在处理有噪声或异常值的数据集时,或者当我们事先不知道数据中的聚类数量时,基于密度的聚类尤其有用。
DBSCAN 是一个聚类算法的示例,它采用基于密度的方法进行聚类。它采用基于密度的空间聚类方法,以用户传入的密度创建聚类,该密度以空间中心点为中心。紧邻中心点的区域被称为邻域,DBSCAN 尝试定义具有指定密度的聚类邻域。对于每个聚类,DBSCAN 将定义三种类型的数据点:
核心点:如果数据点周围包含的点数至少与用户指定的最小点数相同,则该数据点为核心点。
边界点:如果数据点周围的邻域包含的数据点数量少于最小值,但该数据点周围的邻域包含一个核心点,则该数据点为边界点。
离群点:如果一个数据点既不是核心点也不是边界点,那么它就是离群点。本质上,这是“其他”类别。
HDBSCAN 是 DBSCAN 的一个变体,它不需要设置任何参数;这使得它比原来的 DBSCAN 更加灵活。HDBSCAN 对数据中的噪声和异常值不太敏感。此外,DBSCAN 有时也难以识别密度不均匀的聚类。这是 HDBSCAN 的主要动机,因此它能更有效地处理不同密度的聚类。
基于网格的聚类算法不像前四种方法那样常用,但在其他聚类算法性能可能不佳的高维聚类中很有帮助。在这种方法中,算法将高维数据集分割成单元格。每个单元都被分配一个唯一的标识符,称为单元 ID,单元内的所有数据点都被视为同一聚类的一部分。
基于网格的聚类是一种分析大型多维数据集的有效算法,因为它减少了搜索近邻所需的时间,而搜索近邻是许多聚类方法的常见步骤。
一种流行的基于网格的聚类算法被称为 STING,即 STatistical INformation Grid(统计信息网格)。在 STING 中,空间区域被划分为矩形单元和若干个不同分辨率的单元。高层单元被划分为多个低层单元。STING 可以非常高效地计算数据集极其庞大的大数据场景中的聚类,因为它只需将数据集迭代分割成更精细的网格,并评估该网格内的点数。STING 的一个缺点是,聚类的边界需要水平或垂直定义,该算法无法检测到非矩形的聚类边界。
另一种基于网格的算法是 Clustering In Quest 或 CLIQUE 算法,它在处理高维数据时尤为强大。CLIQUE 结合了基于网格和基于密度的聚类方法。在该算法中,数据空间被划分为一个网格,网格单元内点的相对密度会被比较,密度相似的子空间会被合并。这种方法可以在所有感兴趣的子空间中找到密集的单元,然后衡量是否应将相似的集群连接在一起。这意味着 CLIQUE 可以检测高维数据中任意形状的聚类。
聚类分析有多种评估指标,如何选择合适的指标取决于聚类算法的类型和相应的数据集。评估指标一般可分为两大类:外在指标和内在指标。
内在指标是聚类分析的评估指标,只使用数据集内的信息。在处理无标记数据时,这些功能会很有帮助。分析的质量完全取决于数据点之间的关系。当我们没有数据的先验知识或标签时,就可以使用它们。常见的内在指标包括:
剪影得分:该指标衡量每个数据点相对于其所在聚类和所有其他聚类的相似性和不相似性。指标值的范围是从 -1 到 +1。数值越高,表明该对象与自己的聚类匹配度越高,与邻近聚类的匹配度越低。
DB 指数:该指标计算聚类内距离与聚类间距离的比率。指数得分越低,聚类性能越好。
Calinski-Harabasz 指数:这也被称为方差比标准,用于衡量聚类间方差和聚类内方差的比率。Calinski-Harabasz 比率越高,聚类的定义就越明确。
这些评估指标可以帮助我们比较不同聚类算法和模型的性能,优化聚类参数,验证聚类结果的准确性和质量。
外在指标使用基本事实或外部信息来评估聚类算法性能的有效性。这就需要某种形式的标签数据,以确认每个数据点所属的类别或聚类。在这种情况下,您可以将聚类分析的准确性与分类准确性中常用的指标进行比较。常见的外在指标包括:
F-得分(也称 F-指标):该指标通过将提议的聚类与基本事实进行比较时的精确度和召回率来确定聚类算法的准确性。F-得分越高越好。
纯度:该指标衡量的是正确分配到所属同一类别或聚类的数据点的比例。纯度越高越好。
边缘指数:这是衡量聚类算法的真实标签和预测标签之间相似度的指标,范围在 0 到 1 之间。数值越大,表示聚类性能越好。
信息差异(也称共享信息距离):它衡量两个聚类之间损失和获得的信息量。这可以是在地面实况聚类和算法生成的聚类之间,也可以是在两个不同的聚类之间。数字越小越好,因为这表明两个聚类结果之间的距离越小。
在许多应用程序领域,聚类都是数据挖掘或探索性数据分析的重要工具,我们在此仅列举一小部分应用领域,以说明这类分析的重要性。
通过测量哪些数据点未包含在聚类分析所定义的聚类结构中,聚类有助于发现异常。属于较小或非常稀疏的聚类的数据点或者距离其分配的聚类较远的数据点可以被视为异常。基于密度的方法,如期望最大化法,可用于将高密度区域的数据点识别为正常数据点,将低密度区域的数据点识别为异常数据点。
在试图了解可能存在哪些客户角色或市场子集时,聚类可以成为帮助进行客户细分的有力工具。您可以将人口统计数据与客户行为数据结合起来,找出哪些特征与购买模式最常相关。
图像像素的聚类方式多种多样,可以帮助将图像切割成不同的部分,从而将前景与背景分割开来,利用颜色和亮度的相似性检测物体,或将图像分割成感兴趣的区域以便进一步处理。对于图像,聚类方法处理图像中的像素,并在图像中定义代表聚类的区域。
聚类分析可以从多个方面帮助处理文档。文档可按相似性分组,以显示哪些文档彼此最为相似。这可以基于文档长度、词频分布或其他各种量化文档关键特征的方法。另一个常见用例是根据关键字频率、句子长度或术语分布来分析文档的各章节聚类。这有助于进行文档摘要或将较大的文档分解成较小的数据集,以便进一步分析。