机器学习:无监督学习之聚类
之前学习的回归和分类一般属于监督式学习,接下来学习一下无监督学习,因为聚类任务一般都是通过无监督学习来实现的,所以我们本文主要讲解聚类任务。
聚类算法概述
在机器学习中,不涉及深度学习的无监督聚类算法主要通过挖掘数据的相似度、密度、分布或空间结构实现自动分组,以下是最常见的几类及其核心特点:
一、基于划分的聚类算法
这类算法直接将数据划分为预设数量的簇,通过优化 “簇内紧凑、簇间分散” 的目标函数迭代求解。
1. Kmeans(K - 均值聚类)
核心思想:
手动指定簇数 K,随机选择 K 个初始 “质心”(簇中心);
迭代:将每个样本分配到最近的质心所在簇,再计算新的质心(簇内样本均值);
直到质心稳定或迭代结束。
优点:简单高效,适合大规模数据,时间复杂度低(O (n),n 为样本数);
缺点:需提前确定 K 值,对初始质心敏感,仅适用于凸形簇(如球形),对噪声和异常值敏感;
适用场景:客户分群、简单图像颜色聚类、文本主题初步分组。
2. K-medoids(K - 中心聚类)
核心思想:改进 Kmeans,用簇中 “实际样本”(而非均值)作为质心,减少异常值影响。
优点:抗噪声能力强于 Kmeans;
缺点:计算效率低于 Kmeans(需比较样本间距离),仍需指定 K;
适用场景:含少量异常值的中小规模数据(如用户行为数据分群)。
3. PAM(围绕中心点的划分)
核心思想:K-medoids 的经典实现,通过最小化 “簇内样本到中心的距离总和” 优化,更稳健但计算成本高。
适用场景:小规模数据(如几十到几百样本)的聚类。
二、基于密度的聚类算法
通过数据的 “密度分布” 划分簇,能识别任意形状的簇,且可自动排除噪声。
1. DBSCAN(密度聚类)
核心思想:
定义 “核心点”:半径 ε 内至少包含 MinPts 个样本的点;
核心点通过 “密度可达” 关系形成簇,非核心点且不被核心点覆盖的为噪声。
优点:无需指定簇数,能处理任意形状簇(如环形、月牙形),抗噪声能力强;
缺点:对参数 ε(半径)和 MinPts 敏感,高维数据中 “密度” 定义模糊(距离失效);
适用场景:空间数据聚类(如地理位置分群)、含噪声的复杂形状数据(如传感器数据异常检测)。
2. OPTICS(有序点识别聚类结构)
核心思想:DBSCAN 的改进,通过计算 “可达距离” 生成聚类顺序图,可在不同密度下识别簇,减少对参数的依赖。
优点:能发现不同密度的簇,参数鲁棒性更强;
缺点:结果解读较复杂,计算效率低于 DBSCAN;
适用场景:数据密度差异大的场景(如既有密集簇也有稀疏簇)。
3. Mean Shift(均值漂移)
核心思想:通过 “密度梯度上升” 找到数据分布的峰值(密度最大点),样本向最近峰值 “漂移”,最终形成簇。
优点:无需指定簇数,能处理任意形状簇,对噪声不敏感;
缺点:计算耗时(需迭代漂移),依赖核函数带宽(影响邻域范围);
适用场景:目标跟踪(视频中物体聚类)、图像分割(复杂纹理场景)。
三、基于层次的聚类算法
通过构建 “层次树”(树状图)实现聚类,可分为 “自底向上”(凝聚式)和 “自顶向下”(分裂式)。
1. 层次凝聚聚类(Agglomerative Clustering)
核心思想:
初始每个样本为一个簇,迭代合并最相似的两个簇(通过簇间距离度量,如单链接、全链接、平均链接);
直到所有样本合并为一个簇或达到预设簇数。
优点:无需指定簇数,可通过树状图直观展示层次关系;
缺点:计算复杂度高(O (n³)),不适合大规模数据,合并后无法拆分;
适用场景:小规模数据的层次化分组(如生物物种分类、文本主题层级聚类)。
2. BIRCH(平衡迭代减少聚类)
核心思想:通过 “聚类特征树(CF Tree)” 压缩数据,适合超大规模数据(百万级样本),速度极快。
优点:内存效率高,可处理海量数据;
缺点:对高维数据效果差,适合低维、凸形簇;
适用场景:大规模数据的初步聚类(如日志数据快速分组)。
四、基于模型的聚类算法
假设数据服从某种概率分布,通过拟合模型参数实现聚类。
1. GMM(高斯混合模型)
核心思想:假设数据由 K 个高斯分布混合生成,通过 EM 算法估计每个分布的参数(均值、协方差),样本属于概率最高的分布对应的簇。
优点:能输出样本属于每个簇的概率(软聚类),适合近似高斯分布的数据;
缺点:需指定 K,对非高斯分布数据拟合差,易陷入局部最优;
适用场景:语音识别(声学特征聚类)、基因表达数据分析(假设基因表达服从高斯分布)。
五、基于网格的聚类算法
将数据空间划分为网格单元,通过网格内样本密度聚类,计算效率极高。
1. STING(统计信息网格)
核心思想:将数据空间递归划分为多层网格,每个网格存储统计信息(如样本数、均值),通过网格间的统计特性判断簇。
优点:速度快(时间复杂度与数据量无关,仅依赖网格数);
缺点:精度依赖网格粒度,不适合高维数据(网格数量爆炸);
适用场景:低维、大规模空间数据(如地图坐标聚类)。
六、其他经典聚类算法
1. 谱聚类(Spectral Clustering)
核心思想:将数据映射到低维空间(通过拉普拉斯矩阵特征值分解),再用 Kmeans 聚类,适合非线性可分数据。
优点:能处理复杂形状簇,理论基础扎实;
缺点:计算复杂度高(依赖矩阵分解),对参数敏感;
适用场景:图像分割、社交网络社区发现(节点聚类)。
2. HDBSCAN(层次密度聚类)
核心思想:DBSCAN 的改进,自动调整半径 ε,通过 “密度层次树” 发现不同密度的簇,参数鲁棒性更强。
优点:解决 DBSCAN 对参数的依赖,保留密度聚类的优势;
缺点:计算成本高于 DBSCAN;
适用场景:替代 DBSCAN 的大多数场景,尤其数据密度差异大时。
总结:算法选择依据
数据特点 推荐算法 大规模、凸形簇 Kmeans、BIRCH 任意形状簇、含噪声 DBSCAN、HDBSCAN、Mean Shift 中小规模、层次化结构 层次凝聚聚类 近似高斯分布数据 GMM 高维、非线性可分数据 谱聚类(需先降维) 低维、空间数据 STING、DBSCAN 这些算法均不涉及深度学习,完全基于传统机器学习的统计方法或几何原理,是处理无标签数据聚类的基础工具。实际应用中需结合数据规模、维度、分布形状和业务目标选择,并通过评估指标(如轮廓系数、Calinski-Harabasz 指数)验证效果。
我们这里主要讲述Kmeans和Mean Shift这两种算法
Kmeans
Kmeans(K - 均值聚类)是机器学习中最经典的无监督学习算法之一,用于将无标签数据自动划分为 K 个不同的簇(类别)。它基于样本间的 “距离”(通常是欧氏距离)进行聚类,目标是让簇内数据尽可能相似,簇间数据尽可能不同。以下是其核心概念、流程和特点的详细介绍:
一、核心思想与原理
核心目标: 将 n 个样本划分到 K 个簇中,使得每个样本属于离其最近的簇中心(质心),并最小化 簇内误差平方和(Inertia):
“均值” 的含义: 每个簇的中心是该簇所有样本在特征空间中的平均值(例如二维空间中,质心是所有点的坐标平均值)。
二、算法流程(以欧氏距离为例)
初始化: 随机选择 K 个样本作为初始质心(Cluster Centroid)。
分配样本: 计算每个样本到 K 个质心的距离,将样本分配到距离最近的质心所在的簇。
更新质心: 重新计算每个簇内所有样本的均值,作为新的质心。
迭代收敛: 重复步骤 2 和 3,直到质心不再显著移动(或达到最大迭代次数)。
三、关键参数与优化
K 值的选择:
需手动指定,常用方法:
肘部法(Elbow Method):绘制不同 K 值对应的 Inertia 曲线,选择 “拐点”(斜率突然变缓的点);
轮廓系数(Silhouette Coefficient):评估簇内凝聚度和簇间分离度,值越大越好。
初始化方法:
随机初始化可能导致局部最优,推荐使用 Kmeans++(初始质心尽可能远,加速收敛)。
距离度量:
常用欧氏距离,也可根据数据类型选择曼哈顿距离、余弦相似度等。
四、优缺点与适用场景
优点:
原理简单,实现高效,适合大规模数据;
时间复杂度低(O (nKt),n 为样本数,K 为簇数,t 为迭代次数);
可扩展性强,支持并行计算。
缺点:
需手动指定 K 值,且对结果影响大;
仅适用于凸形簇(如球形),对非凸形状(如环形、月牙形)效果差;
对初始质心敏感,可能陷入局部最优;
对噪声和异常值敏感(均值易受极端值影响);
高维数据效果差(维度灾难导致距离度量失效)。
适用场景:
客户分群(如 RFM 模型);
图像分割(如按颜色聚类像素);
文本聚类(如新闻主题分组);
数据预处理(如特征压缩)。
五、改进与变种
K-medoids(K - 中心点聚类): 用簇内实际样本(而非均值)作为中心,抗噪声能力更强。
Mini-Batch Kmeans: 每次迭代仅用一小部分样本更新质心,大幅提升效率,适合超大规模数据。
Kernel Kmeans: 通过核函数将数据映射到高维空间,处理非线性可分的数据。
二分 Kmeans(Bisecting Kmeans): 递归地将一个簇分为两个,直到达到 K 个簇,减少局部最优问题。
六、与其他聚类算法的对比
算法 Kmeans DBSCAN 层次聚类 簇数 K 需手动指定 自动发现 可灵活选择 簇形状 仅凸形 任意形状 任意形状 对噪声敏感 是 否 是 计算复杂度 O (nKt),高效 O (n²),中等 O (n³),高 适用数据规模 大规模 中小规模 小规模 七、代码示例(Python)
from sklearn.cluster import KMeans from sklearn.datasets import make_blobs import matplotlib.pyplot as plt # 生成模拟数据(3个簇) X, _ = make_blobs(n_samples=300, centers=3, cluster_std=0.60, random_state=0) # 初始化Kmeans模型 kmeans = KMeans(n_clusters=3, init='k-means++', max_iter=300, random_state=0) # 拟合数据并预测簇标签 y_pred = kmeans.fit_predict(X) # 可视化结果 plt.scatter(X[:, 0], X[:, 1], c=y_pred, s=50, cmap='viridis') plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=200, c='red', marker='x') plt.title('Kmeans Clustering (K=3)') plt.show()执行结果如下:
总结
Kmeans 是聚类算法的入门选择,适合快速处理大规模数据并发现 “自然分组”。但其依赖手动调参(K 值)和数据分布(凸形簇),实际应用中需结合数据特性选择更合适的算法(如 DBSCAN、高斯混合模型)。
Mean Shift
Mean Shift(均值漂移)是一种基于密度的无监督聚类算法,通过迭代寻找数据分布的 “密度峰值”(局部最大值)来实现自动聚类。它无需预设簇的数量,能识别任意形状的簇,且对噪声不敏感,广泛应用于计算机视觉(如目标跟踪)、图像处理等领域。以下是其核心原理、流程和特点的详细介绍:
优缺点与适用场景
优点:
无需预设簇数量,自动发现数据中的簇结构;
能识别任意形状的簇(如环形、月牙形),不局限于凸形;
对噪声和离群点不敏感(通过核函数加权降低影响);
理论基础扎实,基于非参数密度估计。
缺点:
计算复杂度高(O (n²),n 为样本数),对大规模数据效率低;
对核带宽参数敏感,需谨慎选择;
无法处理密度差异大的簇(可能漏检低密度区域的簇)。
适用场景:
计算机视觉中的目标跟踪(如视频中人脸 / 车辆的持续定位);
图像分割(如按颜色 / 纹理聚类像素);
异常检测(识别远离高密度区域的样本);
数据分布探索(发现数据的多峰结构)。
代码示例如下:
from sklearn.cluster import MeanShift, estimate_bandwidth from sklearn.datasets import make_blobs import matplotlib.pyplot as plt import numpy as np # 生成模拟数据(2个簇,形状不规则) X, _ = make_blobs(n_samples=300, centers=2, cluster_std=0.80, random_state=0) # 自动估计核带宽(关键参数) bandwidth = estimate_bandwidth(X, quantile=0.2, n_samples=50) # 初始化Mean Shift模型 ms = MeanShift(bandwidth=bandwidth, bin_seeding=True) # 拟合数据并预测簇标签 ms.fit(X) labels = ms.labels_ cluster_centers = ms.cluster_centers_ # 获取簇数量 n_clusters_ = len(np.unique(labels)) # 可视化结果 plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis') plt.scatter(cluster_centers[:, 0], cluster_centers[:, 1], s=200, c='red', marker='x') plt.title(f'Mean Shift Clustering (Estimated clusters: {n_clusters_})') plt.show()执行结果:
变种与扩展
Hierarchical Mean Shift: 通过不同带宽的迭代,发现不同尺度下的簇结构,适合多层次数据。
Kernelized Mean Shift: 使用核技巧将数据映射到高维空间,增强非线性聚类能力。
Fast Mean Shift: 通过近似算法(如 KD 树)加速邻域搜索,提升大规模数据处理效率。
总结
Mean Shift 是一种优雅的密度聚类算法,特别适合无需先验知识、需识别复杂形状簇的场景。但其计算开销较大,对参数敏感,实际应用中需权衡效率与效果。对于大规模数据,可考虑使用 Mini-Batch Kmeans 或 DBSCAN 等更高效的算法。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐







所有评论(0)