概览
聚类算法 - 概述
Section titled “聚类算法 - 概述”聚类是无监督机器学习中的核心技术。与数据具有预定义标签的有监督学习不同,聚类算法处理未标记数据。其目标是自动发现数据中自然的组或“簇”(clusters),使得同一簇内的数据点彼此之间比与不同簇中的数据点更相似。
想象你有一堆不同的水果,但没有任何标签。聚类就像根据它们的特征(颜色、形状、大小)将这些水果分堆——苹果一堆,橙子一堆,香蕉一堆。算法事先不知道什么是“苹果”;它只是识别相似物品的组。
“簇”和“相似性”的定义取决于所使用的算法和选择的距离度量(例如,欧氏距离、曼哈顿距离)。不同的算法对数据结构做出不同的假设,可能导致不同的、但同样有效的聚类结果。
例如,一些算法可能会识别球形的数据点组,而另一些算法可能会找到不规则形状的簇或基于密度的组。
常见的聚类方法
Section titled “常见的聚类方法”聚类算法可以根据它们形成簇的方式进行分类:
划分方法 (Partitioning Methods)
Section titled “划分方法 (Partitioning Methods)”这些方法将数据划分为预先指定的数量 (k) 的不重叠的簇。它们通常从一个初始划分开始,然后通过在簇之间移动数据点进行迭代细化,直到满足某个标准(例如,最小化簇内方差)。最著名的例子是 K-Means。其他方法包括 K-Medoids (PAM) 和 CLARANS。
层次方法 (Hierarchical Methods)
Section titled “层次方法 (Hierarchical Methods)”这些方法构建簇的层次结构,通常表示为称为树状图 (dendrogram) 的树形图。主要有两种类型:
- 凝聚式 (Agglomerative / 自下而上): 从每个数据点作为一个单独的簇开始,然后迭代合并最近的一对簇,直到只剩下一个簇(或指定数量)。常见的链接标准(衡量簇之间距离的方法)包括 Ward、平均、完全和单链接。
- 分裂式 (Divisive / 自上而下): 从所有数据点都在一个簇中开始,然后递归地将其分裂成更小的簇,直到每个点都在自己的簇中或满足停止标准。不如凝聚式方法常见。
示例包括 凝聚层次聚类 (Agglomerative Clustering)(在 Scikit-learn 中可用)以及 BIRCH 和 CURE 等算法。
基于密度的方法 (Density-Based Methods)
Section titled “基于密度的方法 (Density-Based Methods)”这些方法将簇定义为数据点的密集区域,由稀疏区域分隔。它们可以找到任意形状的簇,并且对噪声(离群点)鲁棒。它们不需要事先指定簇的数量。最著名的是 DBSCAN (Density-Based Spatial Clustering of Applications with Noise)。OPTICS 是另一个示例。
基于网格的方法 (Grid-Based Methods)
Section titled “基于网格的方法 (Grid-Based Methods)”这些方法将数据空间量化为有限数量的单元格,形成网格结构。聚类操作在网格上执行,使其速度快且独立于数据对象的数量,特别适用于大型数据集。示例包括 STING 和 CLIQUE。
基于模型的方法 (Model-Based Methods)
Section titled “基于模型的方法 (Model-Based Methods)”这些方法假设数据是由概率分布的混合产生的(例如,高斯分布)。它们尝试找到这些分布对数据的最佳拟合,其中每个分布代表一个簇。高斯混合模型 (Gaussian Mixture Models, GMM) 是一个主要示例。
评估聚类性能
Section titled “评估聚类性能”评估聚类质量比评估有监督模型更具挑战性,因为我们通常缺乏真实标签 (ground truth labels)。然而,存在几种基于某些几何或统计属性评估聚类结果质量的指标。这些指标有助于比较不同的聚类算法或不同的参数设置(例如 K-Means 中的簇数量 ‘k’),从而找到合适的结果。
评估指标可分为:
- 外部度量 (Extrinsic Measures): 需要真实标签(在纯无监督场景中很少可用,但在基准测试中有用)。示例:调整兰德指数 (Adjusted Rand Index, ARI)、归一化互信息 (Normalized Mutual Information, NMI)。
- 内部度量 (Intrinsic Measures): 不需要真实标签。它们根据数据和簇本身的结构进行评估,通常衡量紧密度(簇内点之间的接近程度)和分离度(簇之间的距离)。示例:轮廓系数 (Silhouette Score)、戴维斯-布尔丁指数 (Davies-Bouldin Index)、卡林斯基-哈拉巴斯指数 (Calinski-Harabasz Index)。
让我们看两个常见的内部度量:
轮廓系数 (Silhouette Score)
Section titled “轮廓系数 (Silhouette Score)”轮廓系数衡量数据点与其自身簇的相似程度(内聚性),并与它到其他簇的相似程度(分离性)进行比较。它为每个样本计算一个轮廓系数,然后取平均值。
单个点 ‘i’ 的公式为:s(i) = (b(i) - a(i)) / max(a(i), b(i))
a(i): 点 ‘i’ 到同一簇中所有其他点的平均距离。b(i): 点 ‘i’ 到最近邻居簇中所有点的平均距离。
平均轮廓系数的解释:
- 接近 +1: 表示簇密集且分隔良好。点远离邻居簇。
- 接近 0: 表示簇重叠或点非常接近决策边界。
- 接近 -1: 表示点可能被分配到错误的簇。
在 Scikit-learn 中,使用 sklearn.metrics.silhouette_score(X, labels),其中 X 是数据,labels 是算法的簇分配结果。
戴维斯-布尔丁指数 (Davies-Bouldin Index)
Section titled “戴维斯-布尔丁指数 (Davies-Bouldin Index)”戴维斯-布尔丁指数衡量每个簇与其最相似簇的平均相似度比率。相似度定义为结合簇紧密度(簇内距离)和分离度(簇间距离)的度量。
解释:
- 值越低越好。 分数越接近零表示划分越好,意味着簇紧密且分隔良好。
它基于簇内散布与簇间分离的比率计算。在 Scikit-learn 中,使用 sklearn.metrics.davies_bouldin_score(X, labels)。
重要提示: 这些内部指标提供指导,但不保证在实际意义上簇的“正确性”。最好的聚类通常取决于具体的应用和领域知识。常见的做法是尝试不同的算法和参数设置(例如,改变 K-Means 的 ‘k’),并使用这些指标进行评估,以找到合适的结果。
更多评估指标,请参阅:https://scikit-learn.org/stable/modules/clustering.html#clustering-performance-evaluation
主要聚类算法
Section titled “主要聚类算法”让我们简要介绍一些最常用的聚类算法:
K-Means 聚类
Section titled “K-Means 聚类”可以说是最流行的聚类算法。它旨在将数据划分到 ‘k’ 个簇中,其中每个数据点属于距离最近的均值(簇质心)所在的簇。它假设簇是球形的且大小大致相等。需要事先指定 ‘k’。对初始质心位置和离群点敏感。要求特征进行缩放。
层次聚类 (Hierarchical Clustering / 凝聚式)
Section titled “层次聚类 (Hierarchical Clustering / 凝聚式)”自下而上构建簇的层次结构。不需要事先指定 ‘k’(层次结构可以在不同级别切割以获得不同数量的簇)。当数据中存在层次结构(如生物分类)时非常有用。对于大型数据集可能计算开销较大。不同的链接方法会影响生成的簇形状。通常建议进行缩放。
DBSCAN
Section titled “DBSCAN”一种基于密度的算法,将紧密排列的点分组在一起,并将低密度区域的点标记为离群点。可以找到任意形状的簇,并且不需要指定 ‘k’。需要设置两个参数:eps(样本之间最大距离,以便一个样本被视为另一个样本的邻居)和 min_samples(邻域中的样本数,以便点被视为核心点)。强烈建议进行缩放。
Mean-Shift
Section titled “Mean-Shift”另一种基于密度的算法,旨在发现数据点平滑密度中的“斑点”。它通过更新质心候选者使其成为给定区域(核)内点的均值来工作。它不需要事先指定簇的数量,因为簇数量是由算法确定的。计算可能密集。
我们将在后续章节探讨这些算法的实现和细节。
聚类在各个领域都有应用:
- 客户细分 (Customer Segmentation): 根据购买行为、人口统计学特征或网站互动将客户分组,用于定向营销。
- 异常检测 (Anomaly Detection): 识别不属于任何簇的离群点,对于欺诈检测或查找有缺陷的产品很有用。
- 图像分割 (Image Segmentation): 将具有相似颜色或纹理的像素分组,以将图像划分为有意义的区域。
- 文档分析 (Document Analysis): 根据内容将相似文档分组,用于主题建模或组织大型文本集合。
- 生物信息学 (Bioinformatics): 对具有相似表达模式的基因进行聚类,或对具有相关功能的蛋白质进行分组。
- 推荐系统 (Recommendation Systems): 将具有相似偏好的用户分组,以推荐同簇中其他人喜欢的项目。
- 数据压缩 (Data Compression): 通过簇质心表示数据点(向量量化)。