聚类
什么是聚类?
● 目标:将未标记的数据分成相似对象/点的组。
■ 最大化簇内相似性并最小化簇间相似性。
聚类应用
● 市场细分
■ 基于行为和/或偏好对客户进行分组
■ 向簇内的所有客户推送定制的促销活动
● 推荐系统
■ 根据它们的属性(例如,类型、时长、预算)对项目(如电影)进行分组
■ 从用户喜欢的电影的簇中推荐电影
● 网络搜索多样化
■ 根据内容、来源(类型)等对网页(例如,新闻文章)进行分组
■ 从不同的簇中返回搜索结果以确保多样性
● ……以及许多其他应用
聚类所需的成分:
● 对象的表示,例如:
■ (多维)点坐标 x, y
■ 集合 A, B (例如,交易中的项目)
■ 向量 u, v (例如,TF-IDF)
● 相似性度量,例如:
■ 欧几里得距离
■ Jaccard 相似性
■ 余弦相似性
● 聚类算法
■ 确定对象是否属于某个簇的过程
簇的种类 - 聚类过程的结果
1. 明确分隔
■ 集群中的任何对象与集群中的其他对象都更接近, 而与集群外的任何点的距离都更远
2. 基于中心
■ 集群中的任何对象与集群的“中心”更接近, 而与其他任何集群的中心的距离都更远
■ 例子:所有数据点的平均值 (在欧几里得空间中)
■ 集群中心通常称为质心
3. 基于连续性
■ 如果2个对象的相似度超过指定的阈值,它们就在一个簇中
■ 每个对象与该簇中的某个对象的相似度都比与其他簇中的任何点的相似度更高
4. 基于密度
■ 簇 = 对象的密集区域,被低(或更低)密度的区域所包围
■ 通常比基于连续性的簇更能处理噪声
聚类的种类 - 过程或方法
1. 划分式
■ 将数据对象集合划分为不重叠的子集(即,簇)
■ 每个对象恰好在1个簇中 (或者完全不在任何簇中)
2. 层次式
■ 簇可以是嵌套的
■ 一个点可以属于不同的簇,具体取决于层次结构的级别
3. 互斥
■ 每个对象属于1个簇
4. 非互斥 / 重叠
■ 一个对象可以同时属于多个簇
■ 模糊聚类:每个对象都以一定的概率属于所有簇
5. 完全
■ 每个对象被分配到(至少)1个簇
6. 部分
■ 一个对象可能不属于任何簇
■ 例如:噪声、异常值
K-均值
● 基本特征
■ 簇:基于质心
■ 聚类:划分式、互斥、完全
● 输入(对于d维欧几里得空间)
■
■ 簇的数量 K ➜ 簇中心
● 优化目标
■ 最小化平方误差之和 (Sum of Squared Error).
: 数据点和中心点距离的平方;
: 点的集合在 i 簇中
■ 寻找最优解是NP难题
K-均值 - 如何确定质心在簇中
简单的例子在欧几里得空间:
- 对于每个簇
,找到其质心
。
- 对于簇
中的每个点x,计算其到质心
的距离的平方。
- 将所有簇的所有点到其质心的距离的平方加起来。
结论:簇的质心(Centroid)= 该簇中所有点的均值(Mean)
K-均值 — 基本算法(Lloyd的算法)
1. 初始化:选择K个点作为初始质心
2. 重复以下步骤
2a) 分配:将每个点分配给最近的簇(即,质心)
■ 对于每个数据点,找到最近的质心
■ 将 x 分配给簇
2b) 更新:将每个质心移动到其分配点的平均位置 直到分配没有变化为止
■ 计算簇中所有数据点的平均值
■ 将质心设置为簇的平均值
当继续分配后不在更新质心位置 ➜ K-均值完成了!
K-均值 — 收敛性
● 好消息:K-均值总是会收敛的!
■ 分配(A)和更新(U)都会减少SSE(或没有变化)
■ 在最初的迭代中有最大的改进
● 坏消息
■ Lloyd的算法返回的是局部最优解,并不一定是全局最优解
■ 重要的是:质心的初始化
K-均值 — 局限性(数据分布)
1. K-均值容易受到"自然"簇的影响
■ 例如:不同密度的簇, 不同大小的簇, 非球形簇
2. 可能的解决方法:为K选择一个大的(或更大的)值
■ 直觉:将自然簇分割成多个“行为良好”的(类似斑点的)子簇
■ 应用适当的后处理步骤来合并子簇
3. 质心的不同初始化可能会产生不同的聚类结果
■ 不同的聚类通常有不同的SSEs ➜ 全局最小值!
4. 质心的某些初始化可能会产生空簇
■ 当一个质心被其他质心“隔离”数据点时,就会发生这种情况。
K-均值 — 处理空簇
● 在分配步骤后人为填充空簇(并继续迭代)
■ 用对SSE贡献最大的点替换空簇
■ 用SSE最高的簇中的一个点替换空簇
● 后处理
■ 分割“松散”簇 = SSE非常高的簇
● 修改Lloyd的算法 ➜ K-均值的变种
■ 通常旨在解决初始质心的问题
K-均值变种 — K-均值++
● 只改变质心的初始化(分配/更新步骤保持不变)
■ 目标:分散质心
■ 在实践中有更好的性能
■ 有理论保证
● 初始化过程
1. 随机选择一个点作为第一个质心
2. 重复以下步骤
2a) 对于每个点,计算到最近现有质心的距离
2b) 以与距离成正比的概率随机选择下一个质心 直到选择了K个质心
K-均值变种 — X-均值
● 自动选择K的方法
■ 以K=2运行K-均值
■ 迭代地,在每个子簇上以K=2运行K-均值
■ 只有在得分函数意义上才分割子簇
● 示例得分函数
■ 贝叶斯信息准则 (BIC)
■ 秋永信息准则 (AIC)
■ 最小描述长度 (MDL)
示例:考虑一个场景,其中数据看起来有三个明显的簇,但其中一个簇实际上是两个紧密相邻的簇。传统的K-均值可能只会识别出三个簇,但使用X-均值和这种迭代方法,我们可能会更准确地识别出四个簇。
K-均值变种 — K-中心点
● 限制:从数据点中选择质心
■ 不需要计算平均值 (没有集合或更复杂对象的平均值)
■ 仍然需要距离或相似性的概念 (例如,用于集合的Jaccard相似性或自定义指标)
■ 对噪声和异常值更为稳健
● 主要问题:性能
■ 更新步骤更为昂贵
■ 用簇中的每个点替换中心点并 计算成本变化(例如,SSE)
■ 选择替换后最小化成本的点作为新的中心点
示例: 假设我们有一个简单的数据集,其中包含以下五个点:1, 2, 3, 20, 21。我们想将这些点分为两个簇。
使用K-均值:
- 可能的簇中心是两个点的均值,例如(1+2)/2 = 1.5和(20+21)/2 = 20.5。
- 因此,1和2被归为第一个簇,而20和21被归为第二个簇。
使用K-中心点:
- 簇的中心必须是实际的数据点。因此,可能的簇中心是1和20或2和21。
- 与K-均值相比,这种方法可能更为稳健,因为它不会受到异常值的影响。例如,如果我们的数据集中有一个异常值1000,K-均值的簇中心会受到这个值的影响,而K-中心点则不会。
DBSCAN
DBSCAN定义(基于密度的带噪声应用的空间聚类)
● 基本特征
■ 簇:基于密度
■ 聚类:划分式、互斥、部分
● 输入(对于d维欧几里得空间)
■
■ — 定义点邻域的半径
■ — 最小点数
DBSCAN — 点的类型
● 核心点
■ 在半径内至少有邻居的所有点(这包括点本身!)
■ 形成簇的内部
● 边界点
■ 在其邻域中至少有一个核心点的非核心点
■ 形成簇的边界
● 异常值/噪声
■ 所有其他点
■ 默认节点类型
BSCAN — 算法(2个迭代阶段)
1. 找到新的簇种子(核心点) 重复以下步骤
1a) 随机选择一个未探索的点 x
1b) 如果 x 在半径 内的邻居少于
,则 x 标记为噪声(稍后可能会更改)
2. 探索新簇
DBSCAN — 算法(簇探索)
● 探索核心点的所有邻居
■ 将所有邻居放入同一个簇中
■ 邻居要么是核心点,要么是边界点(从不是噪声)
■ 新类型的邻居可能会覆盖之前的噪声标签
● 对每个新找到的核心点递归重复此过程
● 示例:完全探索一个簇
■ 进一步的探索在边界点停止
■ 边界点之外的点将成为噪声或成为新簇的一部分(在第一阶段之后)
DBSCAN — 特性
● DBSCAN 总是会收敛
■ 每个数据点都会被探索(在第1阶段或第2阶段)
■ 数据点不会改变其类型(唯一的例外:噪声 ➜ 边界)
● DBSCAN 不是完全确定性的
■ 第1阶段引入了随机性
■ 边界点可能从不同簇的核心点可达
■ 噪声和核心点是确定性的
示例:在相邻的两个簇中,可能存在一点 x 同时属于两个簇,并且在两个簇中 x 标签都为边界点
DBSCAN — 限制
● DBSCAN 不能处理不同密度的数据点
● DBSCAN 对参数通常非常敏感
DBSCAN — 如何选择参数值?
● 对有意义的参数值的直观解释
因为DBSCAN是收敛的,可以通过选取收敛稳定的点作为参考值。
联接方法
1. 单链聚类(Single Linkage Clustering) :
● 簇之间的距离 = 两个簇中各取一个点之间的最小距离。
● 优点:能够处理非球形的形状。单链方法通过考虑簇之间最近的点对来合并簇,这使得它能够捕捉到复杂的形状和结构。
● 弱点:对噪声非常敏感 ➜ "链式效应"。由于它基于簇之间最近的点对来合并簇,一个离群点(或噪声点)可能导致本不应合并的两个簇被合并。
2. 完全联接聚类(Complete Linkage Clustering) :
● 簇之间的距离 = 两个簇中各取一个点之间的最大距离。
● 优点:对噪声或离群值的敏感性较低。因为它基于簇之间最远的点对来合并簇,离群值或噪声点不太可能导致不应该合并的簇过早地合并。
● 弱点:
■ 偏向于球形簇 ,因为它基于簇之间最远的点对来合并簇。
■ 倾向于分裂大的簇
3. 平均联接聚类(Average Linkage Clustering) :(介于单链和完全联接之间的折中方法)
● 簇之间的距离 = 两个簇中各取一个点之间的平均距离。
● 联接方法的替代选项
1. 中心联接聚类(Centroid Linkage Clustering) :
● 簇之间的距离 = 每个簇的中心点之间的距离。
簇i和簇j的中心点(m代表均值)
2. Ward联接聚类(Ward Linkage Clustering) :
● 簇之间的距离定义为合并两个簇后导致的误差平方和的增加量。
■ :
的方差
■ :
簇中点的数量
■ 簇i的误差平方和:所有点到簇i的中心的距离的平方和
■ 簇j的误差平方和:所有点到簇j的中心的距离的平方和。
■ 合并后簇i和j的误差平方和:所有点到合并后的簇(i和j)的中心的距离的平方和。
● 示例:有红、蓝、绿三个簇。每个簇:100个数据点。使用Ward联接法。
■ 结论:这些计算结果意味着红色和蓝色簇之间以及蓝色和绿色簇之间的距离(使用Ward联接法计算)是相同的,都是1240。在层次聚类的下一步中,其中一个簇对会被合并,但由于它们的距离相同,所以需要其他标准来决定哪一对簇应该首先合并。
层次聚类
层次聚类定义
● 基本特性
■ 簇:基于树状结构或层次结构
■ 聚类:层次的(显然!),完整的, 每一层都是互斥的!
● 原则上没有参数化
■ 在实践中,通常指定簇的数量 与K-均值相似
■ 选择不同的度量来计算 簇之间的距离。联接方法(Linkage Methods)是层次聚类中用于计算簇之间距离的方法。
层次聚类 — 树状图
● 树状图:层次关系的可视化
■ 二叉树显示簇是如何层次性地合并/分裂的
■ 每个节点是一个簇
■ 每个叶子是一个单一的簇
■ 高度反映了簇之间的距离 (例如,A/B与C/D/E/F簇之间的大距离)
● 通过在所需的层次处切割树状图,可以获得一个聚类结果。
● 高度最小为 , 最大为
层次聚类 — 两大主要类型
1. 凝聚型 (Agglomerative)自下而上
● 从每个点作为其自己的簇开始
● 在每一步中,合并最近的一对簇
● 当只剩下一个簇时停止
2. DIANA (划分分析): 划分型 (Divisive)自上而下
● 从包含所有点的一个簇开始
● 在每一步中,分裂一个簇
● 当每个簇只包含一个点时停止。
AGNES (凝聚型嵌套)
● 基本算法
1. 初始化:每个点形成其自己的簇
2. 重复以下步骤
2a) 将两个最近的簇合并为一个 直到只剩下1个簇为止。
● 实现方法
■ 使用距离矩阵进行实现
-
初始化:计算所有数据点之间的距离,并将这些距离存储在一个距离矩阵中。每个数据点都是其自己的簇。
-
查找最近的簇:在距离矩阵中查找最小的距离,这代表了最近的两个簇。
-
合并簇:将这两个最近的簇合并为一个新的簇,并更新距离矩阵以反映这一变化。合并后,新簇与其他簇之间的距离可以根据所选的联接方法(如最小联接、最大联接、平均联接等)来计算。
-
重复:继续重复步骤2和3,直到只剩下一个簇或达到其他停止条件。
-
输出:可以输出最终的簇或在任何中间步骤停止并输出当前的簇。
■ 示例:有A, B, C, D, E, F 六个簇,其中每个簇都包涵一个点。
因为簇E和F的距离最短,合并簇E,F为 。
合并后的距离矩阵 + 平均联接法
距离
为5.32,
距离
为6.08。
当 和
合并时,
距离
为5.32 +6.08的平均值=5.7
● 复杂度分析
■ 空间复杂度:
▲存储距离矩阵, N 为数据点的数量
■ 时间复杂度:
▲ 基线: 步,每步
来扫描距离矩阵
▲ 使用更复杂的数据结构,例如,堆或优先队列:
▲ 针对单链聚类的特殊优化:
DIANA — 分裂分析
● 从上到下的层次聚类
■ 从所有点形成一个簇开始
■ 递归地分裂一个簇,直到所有簇的大小都为1
● 挑战:对于有n个点的簇,有 种分裂方式
■ 需要启发式方法来限制搜索空间
■ 通常比AGNES更慢,也不太常见
● DIANA表现更好的情况
■ 不需要完整的聚类 ➜ 提前停止
■ 分裂可以利用全局知识(仅基于局部知识的合并)
簇评估
簇评估 — 存在问题
● 问题1:仅凭肉眼观察聚类结果很少可能
■ 高维数据(≥ 3维)难以或无法可视化
■ 难以预先评估簇的“性质”(例如,形状、大小、密度等的变化)
■ 噪声或离群值的存在和分布
● 问题2:聚类算法总会找到某些簇
■ 例如:将K-均值、DBSCAN和AGNES应用于随机数据
■ 即使在随机数据上,它们也总是能够找到某种聚类结构,这可能导致对真实模式的误解。
簇评估 — 目的和方法
● 目的
■ 比较不同聚类算法的结果
■ 比较具有不同参数的聚类算法的结果
■ 最小化噪声对聚类的影响
➜ 获取聚类“优良性”的感觉
● 两种主要方法
■ 外部质量度量:根据已知的基准真值评估聚类(如果可用)
■ 内部质量度量:从数据本身评估聚类
簇评估 — 外部质量度量
● 基准真值:标记的数据
■ 标签表示两个点“属于一起”
■ 如果聚类反映了这一点 ➜ 良好的聚类
■ 示例:簇:红,蓝 ;标签:0,1
外部质量度量 — 簇纯度
● 簇纯度 P
■ N:数据点的数量,C:簇集合,L:标签集合
■ 示例:根据上述图片得出
因为蓝色簇集合有四个数据点,标签均为1,所以100%纯度
因为红色簇集合有四个数据点,三个标签为1,一个标签为0,所以75%纯度
● 局限性
■ 纯度不会惩罚拥有许多簇
➜ 当所有簇都包含单个数据点时,P=1 很容易实现
■ 示例:红色:0;黄色:0;绿色:0;蓝色:1;粉色:1。纯度为100%
外部质量度量 — 信息检索指标
● 来自分类任务的已建立指标
■ TP — 真正例 :相同簇、相同标签 (A/B、A/C、B/C、E/F、…、G/H)
■ TN — 真负例 :不同簇、不同标签 (A/E、A/F、A/G、A/H、B/E、…、C/H)
■ FP — 假正例 :相同簇、不同标签 (A/D、B/D、C/D)
■ FN — 假负例 :不同簇、相同标签 (D/E、D/F、D/G、D/H)
● 兰德指数 RI
■ 反映准确性 ;
● 精确度 P,召回率 R,F1分数
● …等其他使用 TP、TN、FP、FN 的指标
内部质量指标 — SSE
● 使用SSE来选择簇的数量
● 也适用于更复杂的数据
■ 但本质上“偏好”球形簇
● SSE作为质量度量的局限性
■ SSE不对大量的簇进行惩罚
■ 随着簇数量的增加,SSE减少
■ 适用于K-Means之外的情境,但在非球形簇的情况下解释性较弱
内部质量指标 — 剪影系数
● 直观理解:一个好的聚类应具备
■ 高的簇间距离
■ 低的簇内距离
● 对于每一个数据点,定义:
■ 凝聚度: 到同一簇中其他点的平均距离
越小越好 ➜ 低的簇内距离
■ 分离度:到不同簇中的点的最小平均距离
越大越好 ➜ 高的簇间距离
■ 剪影系数:
公式中的分子 表示分离度与凝聚度之差,而分母取两者中的较大值来标准化这个差值。这确保了剪影系数始终在 -1 到 1 之间,其中接近 1 的值表示好的聚类,0 表示簇的重叠,接近 -1 的值表示数据点可能被分配到错误的簇中。
;
● 解释
Bad Good
● 剪影系数SC:
■ 通过这个公式,可以得到整个数据集的平均剪影系数。这个平均值可以帮助我们评估聚类的整体质量:一个接近1的平均值意味着聚类效果好,而一个接近-1的值则意味着聚类效果差。
;
是数据集中的数据点总数。;
是第 i 个数据点的剪影系数。
簇评估 — 结尾
● 在实践中,选择“最佳”的聚类通常更为务实:
■ 固定的簇数量(对DBSCAN可能是个问题)
■ 由任务定义的参数 (例如,“在500米半径内有超过5家麦当劳的区域”)
■ 簇的最大、最小或平均大小
■ 关注单个簇而不是整体聚类 (例如,最大/最小的簇,包含某些特定点的簇)
■ 将K设定得“过高”,并在必要时稍后合并
■ ...