聚类是什么?让数据自己按相似程度分成几群
聚类(Clustering)是一种把数据按照相似程度自动分组的方法:让同一组内的数据尽量相似,不同组之间的数据尽量不同。每一个组叫作一个簇。聚类不需要事先知道每个样本属于哪一类,也不需要带有标签的训练数据,因此它是无监督学习中最典型的任务。
聚类和分类的区别
分类是监督学习:事先已经知道有哪些类别,比如“猫”和“狗”,并且有大量标注好类别的样本,模型学习之后,把新样本分到已知的类别中去。聚类则是无监督的:事先并不知道数据可以分成哪些类,甚至不知道应该分成几类,完全由算法根据数据本身的特点去发现其中的分组结构。打个比方,分类像是按照图书馆已有的分类体系把新书上架;聚类则像是面对一大堆从未整理过的书,根据内容的相似程度,自己把它们分成几堆。
常用的聚类算法
K 均值:最经典、最常用的聚类算法。先指定要分成 K 个簇,随机选择 K 个中心点;然后把每个样本分配给离它最近的中心点;再把每个簇的中心更新为这个簇中所有样本的平均位置;重复这两个步骤,直到中心点不再变化。它简单高效,但需要事先指定簇的数量,对初始中心点的选择比较敏感,而且只擅长发现大致呈圆球状、大小相近的簇。
层次聚类:不需要事先指定簇的数量。它从每个样本自成一簇开始,每一步把最相似的两个簇合并起来,直到所有样本合并成一个簇,这个过程可以画成一棵树状图;然后根据需要,在某个高度上“切一刀”,得到想要数量的簇。也可以反过来,从一个大簇开始逐步分裂。
DBSCAN:一种基于密度的聚类算法,由 Martin Ester 等人在 1996 年提出。它把数据点分布密集的区域看作一个簇,能够发现任意形状的簇,不需要指定簇的数量,还能自动地识别出不属于任何簇的噪声点。
高斯混合模型:假设数据是由几个不同的正态分布混合而成的,用期望最大化算法估计每个分布的参数,给出每个样本属于各个簇的概率,是一种“软”的聚类。此外还有谱聚类、均值漂移等方法。
如何评价聚类的效果
由于没有标准答案,评价聚类的好坏比评价分类更困难。常用的内部指标有轮廓系数,它衡量每个样本与本簇其他样本的相似程度,以及与最近的其他簇的差异程度。选择 K 均值中簇的数量时,常用“肘部法”:画出不同 K 值下簇内误差的变化曲线,找到曲线开始变得平缓的那个拐点。最终,聚类的结果是否合理,往往还需要结合业务知识来判断。
应用
客户细分:根据消费习惯、年龄、偏好等把客户分成不同的群体,制定有针对性的营销策略。文档和新闻归类:把内容相似的新闻自动地聚在一起,形成话题。图像分割:把图像中颜色相近的像素归为一类。生物信息学:根据基因表达的模式对基因或细胞进行分组,比如在单细胞测序中发现新的细胞类型。异常检测:不属于任何簇、远离其他数据的点,可能就是异常。推荐系统:把兴趣相似的用户聚在一起。在大模型时代,人们还常常先用嵌入模型把文本转换成向量,再进行聚类,从大量的用户反馈、对话记录中发现主要的主题。