【模式识别与机器学习(16)】惰性学习kNN(聚类分析)【1】:基础概念与常见方法

「C++ 40 周年」主题征文大赛(有机会与C++之父现场交流!) 10w+人浏览 794人参与

本文内容一览(快速理解)

  1. 聚类分析是什么? 无监督学习方法,将相似对象分组,最大化簇内相似性、最小化簇间相似性,自动发现数据中的隐藏模式

  2. 聚类vs分类? 分类是监督学习(有类标),聚类是无监督学习(无类标);分类需要训练数据,聚类不需要;聚类结果动态,分类结果固定

  3. 如何计算相似性? 区间标度变量用欧氏距离或曼哈顿距离,分类变量用简单匹配系数或Jaccard系数,混合类型变量加权组合,需要标准化消除单位差异

  4. K-means如何工作? 随机选择k个初始中心,将对象分配到最近中心,重新计算中心,迭代直到收敛,算法简单快速但只能发现球状簇

  5. 如何选择K值? 肘部法则(WCSS下降速度变慢的点)或轮廓系数(选择系数最大的K值),也可以根据业务需求选择

  6. K-means的优缺点? 优点:算法简单、计算高效、结果直观;缺点:需要预先指定K值、只能发现球状簇、对离群点敏感

  7. 客户细分实战? 准备客户数据(年龄、收入、消费金额),标准化数据,使用欧氏距离计算相异度,K-means聚类(K=5),根据业务需求调整

  8. 如何选择聚类算法? 数据量大且需要快速聚类→K-means,数据有离群点→K-medoids,需要任意形状簇→DBSCAN,根据数据特点和应用需求选择

总结口诀

  • 聚类本质:无类标号 → 自动分组 → 最大化簇内相似性
  • 数据类型:区间标度→欧氏距离,分类→简单匹配,混合→加权组合
  • K-means:随机中心→分配对象→更新中心→迭代收敛
  • K值选择:肘部法则或轮廓系数,结合业务需求
  • 算法选择:大数据快速→K-means,离群点→K-medoids,任意形状→DBSCAN

 


一、聚类分析基本概念:什么是聚类

[!NOTE]
📝 关键点总结:聚类分析的核心是将相似对象分组,最大化簇内相似性、最小化簇间相似性,是无监督学习方法,不需要类标号就能自动发现数据中的模式。

核心特征

  • 无监督学习:不考虑数据类标号,通过聚类产生新类标号(自动分类)
  • 核心原则:最大化簇内相似性,最小化簇间相似性
  • 动态性:最优分组数一般未知,聚类结果是动态的
  • 应用场景:数据探索、模式发现、数据压缩、异常检测

与分类的区别:分类是监督学习(有类标),聚类是无监督学习(无类标);分类需要训练数据,聚类不需要;聚类结果动态,分类结果固定。

1.1 什么是聚类

问题:什么是聚类?

通俗理解:聚类就像把一堆水果按照相似性分组,比如把苹果、橙子、香蕉分别放在不同的篮子里,不需要事先知道有哪些种类,只需要根据水果的特征(颜色、形状、大小)自动分组。就像图书馆需要把书籍分类整理,聚类可以帮助我们发现数据中的规律和模式。

核心作用:将物理或抽象对象的集合划分成相似的对象类,发现数据中的隐藏模式和结构。

本质原理:聚类分析时不考虑数据类标号,而是通过聚类产生新类标号(自动分类)。对象根据最大化内部的相似性(similarity)、最小化类之间的相似性的原则进行聚类或分组(簇,cluster)。

在实际应用中,很多数据没有类标号,或者获取类标号成本很高,聚类可以自动发现数据中的模式,不需要人工标注。例如,在肤纹研究中,研究人员将中华56个民族梳理成南方和北方两大民族群,找到了民族肤纹的标志性群体,这就是聚类的应用。

实际应用示例:在客户分析中,可以根据客户的购买行为(年龄、收入、消费金额)自动将客户分成不同的群体,而不需要事先知道有哪些客户类型。在股票分析中,可以根据股票的价格波动模式自动将股票分成不同的行业组。

应用边界:适合无类标号的数据、需要发现隐藏模式的场景。但聚类结果可能不唯一,不同的相似性度量会产生不同的聚类结果。

决策标准:当数据没有类标号或获取类标号成本高时,用聚类;当需要发现数据中的隐藏模式时,用聚类;当需要数据探索和可视化时,用聚类。

 

1.2 为什么需要聚类

问题:为什么需要聚类?

通俗理解:就像图书馆需要把书籍分类整理,聚类可以帮助我们发现数据中的规律和模式,理解数据的结构。分类需要高昂的代价收集和标记大量训练元组集或模式,而聚类把数据集合划分成组(簇),然后给这些数量相对较少的组指定标号,成本更低。

核心作用:数据探索、模式发现、数据压缩、异常检测。

本质原理:分类需要高昂的代价收集和标记大量训练元组集或模式,而聚类把数据集合划分成组(簇),然后给这些数量相对较少的组指定标号,成本更低。

在实际应用中,获取有类标号的训练数据往往成本很高,而聚类可以自动发现数据中的模式,不需要人工标注。例如,在股票分析中,可以根据股票的价格波动模式自动将股票分成不同的行业组,而不需要事先知道有哪些行业。

实际应用示例:在图像分析中,可以根据图像的像素特征自动将图像分成不同的类别(如风景、人物、动物),而不需要人工标注。在文本分析中,可以根据文本的主题自动将文档分成不同的类别。

应用边界:适合数据探索、模式发现、数据压缩的场景。但聚类结果需要人工解释和验证。

决策标准:当获取类标号成本高时,用聚类;当需要探索数据中的模式时,用聚类;当需要数据压缩时,用聚类。

 

1.3 聚类vs分类

问题:聚类和分类有什么区别?

通俗理解:分类就像老师根据标准答案批改作业(有标准答案),聚类就像学生自己发现规律(没有标准答案)。分类需要训练数据,聚类不需要;聚类结果动态,分类结果固定

核心作用:理解聚类和分类的区别,选择合适的机器学习方法。

本质原理:分类是监督学习,有类标号,需要训练数据;聚类是无监督学习,无类标号,不需要训练数据。
与分类相比,聚类有如下特征:

  • 聚类过程与结果的动态性(最优分组数一般未知,可能没有关于聚类的任何先验知识,聚类结果是动态的);
  • 不同的相似性度量,不同的目的要求,产生的聚类结果是不一样的。

 

不同的应用场景需要不同的方法。当有类标号时,用分类;当无类标号时,用聚类。例如,对顾客分组促进童装销售时,孩子数是最重要属性,年收入和受教育水平相关,年龄和婚姻状况无关,这需要根据业务目标选择合适的相似性度量。

 

实际应用示例

  • 在邮件分类中,如果有大量已标注的邮件(垃圾邮件/正常邮件),用分类;如果没有标注,用聚类自动发现邮件类型。
  • 在客户分析中,如果有客户标签(VIP/普通),用分类;如果没有标签,用聚类自动发现客户群体。
     

应用边界:分类和聚类有不同的应用场景。但实际应用中,可以先聚类发现模式,再分类预测新样本。

决策标准:有类标号 → 分类;无类标号 → 聚类;需要预测新样本 → 分类;需要发现数据模式 → 聚类。

 


二、聚类分析中的数据类型:如何计算相似性

[!NOTE]
📝 关键点总结:聚类分析需要处理不同类型的数据,核心是计算对象之间的相异度,不同数据类型需要不同的相异度计算方法。

数据类型

  • 数据矩阵:对象-变量结构,用p个变量表示n个对象(二模矩阵)
  • 相异度矩阵:对象-对象结构,存储n个对象之间的相异度(一模矩阵)
  • 区间标度变量:粗略线性标度的连续变量(重量、高度、气温等)
  • 分类变量:标称变量(性别、颜色等)
  • 序数变量:有序的分类变量(等级、排名等)
  • 混合类型变量:包含多种类型的变量

相异度计算:区间标度变量用Minkowski距离(欧氏距离、曼哈顿距离),需要标准化;分类变量用简单匹配系数或Jaccard系数;序数变量先转换为区间标度变量;混合类型变量加权组合。

2.1 数据矩阵和相异度矩阵

问题:聚类分析中数据如何表示?

通俗理解:就像用表格记录学生的成绩,数据矩阵用行表示对象(学生),用列表示变量(科目),相异度矩阵记录对象之间的相似程度。数据矩阵存储原始数据,相异度矩阵存储对象之间的相似程度

本质原理

  • 数据矩阵(Data matrix)是对象-变量结构,用p个变量表示n个对象,是二模(two-mode)矩阵。数据矩阵适合存储原始数据。
  • 相异度矩阵(Dissimilarity matrix)是对象-对象结构,存储n个对象之间的相异度,是一模(one-mode)矩阵。相异度矩阵适合存储对象之间的相似程度,便于聚类算法使用

 

实际应用示例

  • 在图像聚类中,数据矩阵存储每张图像的像素值,相异度矩阵存储图像之间的相似程度。
  • 在文本聚类中,数据矩阵存储每个文档的词频,相异度矩阵存储文档之间的相似程度。

应用边界:相异度矩阵的计算复杂度是 O ( n 2 ) O(n^2) O(n2),对于大规模数据可能不适用。

决策标准:存储原始数据 → 数据矩阵;存储对象间相似程度 → 相异度矩阵;聚类算法通常使用相异度矩阵。

 

2.2 区间标度变量的相异度:为聚类提供相似性度量

区间标度变量(Interval-scaled variables)是一种粗略线性标度的连续变量,例如重量、高度、经纬度、气温等。选用的度量单位将影响聚类结果,需要进行标准化。常用的距离度量包括:

  • Minkowski距离 d ( i , j ) = ( ∣ x i 1 − x j 1 ∣ q + ∣ x i 2 − x j 2 ∣ q + . . . + ∣ x i p − x j p ∣ q ) 1 / q d(i,j) = (|x_{i1}-x_{j1}|^q + |x_{i2}-x_{j2}|^q + ... + |x_{ip}-x_{jp}|^q)^{1/q} d(i,j)=(xi1xj1q+xi2xj2q+...+xipxjpq)1/q
  • 曼哈顿距离 q = 1 q=1 q=1): d ( i , j ) = ∣ x i 1 − x j 1 ∣ + ∣ x i 2 − x j 2 ∣ + . . . + ∣ x i p − x j p ∣ d(i,j) = |x_{i1}-x_{j1}| + |x_{i2}-x_{j2}| + ... + |x_{ip}-x_{jp}| d(i,j)=xi1xj1+xi2xj2+...+xipxjp
  • 欧氏距离 q = 2 q=2 q=2): d ( i , j ) = ( x i 1 − x j 1 ) 2 + ( x i 2 − x j 2 ) 2 + . . . + ( x i p − x j p ) 2 d(i,j) = \sqrt{(x_{i1}-x_{j1})^2 + (x_{i2}-x_{j2})^2 + ... + (x_{ip}-x_{jp})^2} d(i,j)=(xi1xj1)2+(xi2xj2)2+...+(xipxjp)2

不同的距离度量适合不同的数据分布。欧氏距离适合数据分布均匀的情况,曼哈顿距离对离群点更鲁棒。

 

度量单位标准化,使不同变量具有相同的权重
由于不同变量的单位不同(如身高用厘米,体重用公斤),需要标准化(如z-score标准化)使不同变量具有相同的权重。

实际应用示例:在客户分析中,如果客户数据包含年龄(岁)、年收入(元)、年消费金额(元),由于单位不同,需要标准化后再计算距离。例如,年龄的范围是20-80岁,年收入的范围是10万-1000万,如果不标准化,年收入会主导距离计算。

 

应用边界:适合连续变量。但需要标准化,计算复杂度是 O ( n p ) O(np) O(np),其中n是对象数,p是变量数。

决策标准

  • 数据分布均匀 → 欧氏距离;
  • 数据有离群点 → 曼哈顿距离;需要快速计算 → 曼哈顿距离(计算更简单)。
  • 不同变量单位不同 → 标准化后再计算距离;

 

2.3 分类变量的相异度-用匹配程度来衡量相似性

分类变量(Categorical variables)是标称变量,例如性别、颜色、品牌等。

计算相异度的方法包括:

  • 简单匹配系数 d ( i , j ) = p − m p d(i,j) = \frac{p-m}{p} d(i,j)=ppm,其中p是变量总数,m是匹配的变量数
  • Jaccard系数(二元变量): d ( i , j ) = r + s q + r + s d(i,j) = \frac{r+s}{q+r+s} d(i,j)=q+r+sr+s,其中q是两个对象都是1的变量数,r是对象i是1而对象j是0的变量数,s是对象i是0而对象j是1的变量数

分类变量没有顺序关系,不能用距离度量,需要用匹配程度。

  • 简单匹配系数适合所有分类变量都同等重要的情况
  • Jaccard系数适合只关注两个对象都是1的情况(如购物篮分析)

实际应用示例:在购物篮分析中,如果两个客户都购买了商品A和B,但没有购买商品C,Jaccard系数会计算他们购买商品的相似程度。在文本分析中,如果两个文档都包含某些关键词,Jaccard系数会计算它们的相似程度。

决策标准

  • 所有分类变量同等重要 → 简单匹配系数;
  • 只关注共同特征 → Jaccard系数;
  • 二元变量 → Jaccard系数;
  • 需要加权 → 根据变量重要性设置权重。

 

2.4 混合类型变量的相异度

就像比较两个人,需要考虑多个方面(身高、性别、等级),混合类型变量包含多种类型的变量,需要分别计算再组合。加权组合可以平衡不同类型变量的影响,根据变量的重要性设置权重。

 

混合类型变量(Mixed-type variables)包含多种类型的变量(区间标度、分类、序数等)。
计算相异度的方法:对每种类型的变量分别计算相异度,然后加权组合。加权组合可以平衡不同类型变量的影响,根据变量的重要性设置权重。

例如, d ( i , j ) = ∑ f = 1 p δ i j ( f ) d i j ( f ) ∑ f = 1 p δ i j ( f ) d(i,j) = \frac{\sum_{f=1}^{p} \delta_{ij}^{(f)} d_{ij}^{(f)}}{\sum_{f=1}^{p} \delta_{ij}^{(f)}} d(i,j)=f=1pδij(f)f=1pδij(f)dij(f),其中 d i j ( f ) d_{ij}^{(f)} dij(f) 是变量f的相异度, δ i j ( f ) \delta_{ij}^{(f)} δij(f) 是指示变量(如果变量f对对象i和j都有效则为1,否则为0)。

 

实际应用示例:在客户分析中,如果客户数据包含年龄(区间标度)、性别(分类)、会员等级(序数),需要分别计算每种类型变量的相异度,然后加权组合。例如,如果年龄更重要,可以给年龄更高的权重。注意:权重设置需要领域知识,可能影响聚类结果。

决策标准

  • 混合类型变量 → 分别计算每种类型的相异度,然后加权组合;
  • 根据变量的重要性设置权重;
  • 如果变量缺失,用指示变量处理;
  • 需要平衡不同类型变量 → 使用归一化权重。

 


三、划分方法:K-means算法

[!NOTE]
📝 关键点总结:K-means是最常用的划分方法,通过迭代优化将数据分成K个簇,每个簇用质心表示,算法简单快速但只能发现球状簇,对离群点敏感。

核心机制

  • 初始化:随机选择k个对象作为初始簇中心
  • 分配:将每个对象分配到最近的簇中心
  • 更新:重新计算每个簇的中心(均值)
  • 迭代:重复分配和更新直到簇中心不再变化

决策标准:数据量大且需要快速聚类 → K-means;数据是球状分布 → K-means;需要预先指定簇数 → K-means;数据有离群点 → 不用K-means(用K-medoids)。

3.1 K-means算法原理

算法步骤

  1. 随机选择k个对象作为初始簇中心
  2. 将每个对象分配到最近的簇中心
  3. 重新计算每个簇的中心(均值)
  4. 重复步骤2-3直到簇中心不再变化

K-means算法简单快速,适合大规模数据。但只能发现球状簇,对离群点敏感,需要预先指定簇数k。

聚类结果是簇内的相似度高,而簇间的相似度低。簇的相似度是关于簇中对象的均值度量,可以看做是簇的质心(Centroid)或中心(centre of gravity)。

实际应用示例:在客户细分中,如果要将100万客户分成5个群体,K-means会随机选择5个客户作为初始中心,然后将每个客户分配到最近的中心,重新计算5个中心,不断重复直到中心不再变化。最终得到5个客户群体,每个群体用质心(平均年龄、平均收入、平均消费金额)表示。

决策标准

  • 数据量大且需要快速聚类 → K-means;
  • 数据是球状分布 → K-means;
  • 需要预先指定簇数 → K-means;
  • 数据有离群点 → 不用K-means(用K-medoids)。

算法复杂度:时间复杂度 O ( n k t ) O(nkt) O(nkt),其中n是对象数,k是簇数,t是迭代次数。空间复杂度 O ( n + k ) O(n+k) O(n+k)

 

3.2 K-means的优缺点

算法简单快速,但需要预先指定K值,只能发现球状簇,对离群点敏感,容易被异常点影响

K-means的优点包括:

  • 算法简单:易于理解和实现
  • 计算效率高:适合大规模数据,时间复杂度 O ( n k t ) O(nkt) O(nkt)
  • 结果直观:每个簇用质心表示,易于解释

缺点包括:

  • 需要预先指定簇数k:但最优k值通常未知
  • 只能发现球状簇:不能发现任意形状的簇(如环形、月牙形)
  • 对离群点敏感:离群点会影响簇中心的位置
  • 初始簇中心的选择会影响最终结果可能陷入局部最优

 

K-means的设计目标是快速聚类,因此牺牲了灵活性(只能发现球状簇)和鲁棒性(对离群点敏感)。对于需要发现任意形状簇或数据有离群点的场景,需要使用其他算法(如DBSCAN、K-medoids)。

 
实际应用示例

  • 在图像分割中,如果图像中的物体是圆形或接近圆形,K-means效果好;如果物体是环形或月牙形,K-means效果差。
  • 在客户分析中,如果客户群体是球状分布(年龄和收入相近的客户聚集在一起),K-means效果好;如果客户群体是任意形状,K-means效果差。

 

3.3 K值的选择

K值就像分组数量,分得太少(K=2)可能把不同的人分在一起,分得太多(K=10)可能把相似的人分开,需要找到合适的平衡点。

K值的选择通常使用以下方法:

  1. 肘部法则(Elbow Method):计算不同K值下的簇内平方和(Within-Cluster Sum of Squares, WCSS),WCSS会随着K值增大而减小,当K值增大到一定程度时,WCSS的下降速度会变慢,形成"肘部",这个K值就是合适的K值。

  2. 轮廓系数(Silhouette Coefficient):计算每个对象的轮廓系数,轮廓系数越大,聚类效果越好,选择轮廓系数最大的K值。轮廓系数范围是[-1, 1],越接近1表示聚类效果越好。

K值太小会导致簇内差异大(欠拟合),K值太大会导致簇间差异小(过拟合)。肘部法则和轮廓系数都是通过量化聚类质量来选择K值,但肘部法则更直观,轮廓系数更精确。

实际应用示例:在客户细分中,如果K=2,可能把高收入客户和低收入客户分在一起;如果K=10,可能把相似客户分开。使用肘部法则,如果K=5时WCSS下降速度变慢,就选择K=5。使用轮廓系数,如果K=5时轮廓系数最大,就选择K=5。

注意:肘部法则和轮廓系数都是启发式方法,可能需要结合领域知识。

 


四、实战场景:客户细分

4.1 业务痛点识别

电商平台有100万客户,需要根据客户的购买行为(年龄、年收入、年消费金额)将客户分成不同的群体,以便进行精准营销。传统方法需要人工分析,成本高且效率低。我们需要一个能够自动发现客户群体的方法,从客户数据中自动识别出不同的客户类型。

核心挑战

  • 客户数量大(100万),人工分析成本高
  • 需要根据多个维度(年龄、收入、消费金额)进行分组
  • 不同客户群体的特征不明确,需要自动发现
  • 需要快速响应业务需求,支持精准营销

 

4.2 方案拆解:用核心知识点解决问题

数据准备:客户数据包含年龄(区间标度变量)、年收入(区间标度变量)、年消费金额(区间标度变量)。

为什么这样准备

  • 这三个变量都是连续变量,适合用区间标度变量的方法计算相异度。
  • 由于不同变量的单位不同(年龄用岁,收入用元,消费金额用元),需要标准化(如z-score标准化)使不同变量具有相同的权重。例如,年龄的范围是20-80岁,年收入的范围是10万-1000万,如果不标准化,年收入会主导距离计算。

相异度计算:使用欧氏距离计算客户之间的相异度。

为什么这样选择:客户数据分布相对均匀,欧氏距离适合。标准化后的数据消除了单位差异,可以直接计算欧氏距离。欧氏距离计算简单,适合大规模数据。

聚类算法选择:使用K-means算法,K=5(根据业务需求分成5个客户群体)。

为什么这样选择

  • 数据量大(100万客户),需要快速聚类,K-means适合(时间复杂度 O ( n k t ) O(nkt) O(nkt));
  • 客户群体通常是球状分布(年龄和收入相近的客户聚集在一起),K-means可以处理;
  • 需要预先指定簇数,K-means满足要求。

K值确定:使用肘部法则确定K值,计算K=2到K=10的WCSS,选择WCSS下降速度变慢的K值。

为什么这样确定:肘部法则简单直观,适合快速选择K值。如果业务有明确需求(如分成5个群体),也可以直接使用业务K值。结合肘部法则和业务需求,选择K=5。

完整流程

  1. 数据预处理:标准化年龄、年收入、年消费金额(z-score标准化)
  2. 计算相异度:使用欧氏距离计算客户之间的相异度
  3. K-means聚类:随机选择5个客户作为初始中心,将每个客户分配到最近的中心,重新计算中心,迭代直到收敛
  4. 结果分析:分析每个客户群体的特征(平均年龄、平均收入、平均消费金额),为精准营销提供依据

 

4.3 长期适配策略

数据变化:如果客户数据增加或变化,可以重新运行K-means算法,或者使用增量聚类方法。

判断标准:数据变化大(如新增50%客户) → 重新运行K-means;数据变化小(如新增5%客户) → 使用增量聚类;需要实时更新 → 使用增量聚类。

K值调整:如果聚类效果不好(如簇内差异大或簇间差异小),可以调整K值。

判断标准:簇内差异大(WCSS大) → 增大K值;簇间差异小(簇中心距离近) → 减小K值;聚类效果不好 → 尝试不同的K值(K=3, 4, 5, 6, 7),选择效果最好的。

算法选择:如果数据有离群点或需要发现任意形状的簇,可以改用K-medoids或DBSCAN。

判断标准:数据有离群点(如异常高消费客户) → K-medoids(对离群点更鲁棒);需要任意形状簇(如客户群体不是球状分布) → DBSCAN;数据量大且需要快速聚类 → K-means。

特征选择:如果某些特征不重要或影响聚类效果,可以调整特征权重或删除不重要特征。

判断标准:某些特征不重要(如客户ID) → 删除;某些特征更重要(如年消费金额比年龄更重要) → 增加权重;需要平衡特征影响 → 使用标准化和权重调整。

 


总结

聚类分析通过将相似对象分组,自动发现数据中的隐藏模式。

可直接套用的落地模板

  • (1)数据准备:识别数据类型(区间标度、分类、序数、混合),标准化数据(消除单位差异,如z-score标准化);
  • (2)相异度计算:区间标度变量用欧氏距离或曼哈顿距离,分类变量用简单匹配系数或Jaccard系数,混合类型变量加权组合
  • (3)算法选择:数据量大且需要快速聚类 → K-means,数据有离群点 → K-medoids,需要任意形状簇 → DBSCAN;
  • (4)参数确定:K-means的K值用肘部法则或轮廓系数,DBSCAN的 ϵ \epsilon ϵ 和MinPts根据数据密度确定;
  • (5)结果验证:可视化聚类结果,结合领域知识验证,调整参数优化效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

roman_日积跬步-终至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值