聚类方法
-
聚类分析
-
划分式方法
-
层次式方法
-
基于密度和基于网格的方法
-
聚类结果的评价
聚类方法,回答以下问题:
-
为了实现有效的聚类,可以采用哪些不同的相似度或距离度量?
-
我们能否高效地对海量数据点进行聚类?
-
我们能否找到任意形状的簇?能否在多个粒度层次上发现簇结构?
-
我们如何评估由系统发现的簇的质量?
聚类分析的价值
-
聚类分析的价值是什么?
-
聚类分析可以根据数据的特征,把海量数据划分成若干组。
-
聚类分析常常能帮助后续的数据挖掘过程,例如模式发现、分类以及离群点分析。
-
-
在"数据挖掘"这一专门方向中,聚类分析扮演什么角色?
-
你将学习多种可扩展的方法,用来从海量数据中发现簇。
-
你将学习如何高效地挖掘不同类型的簇。
-
你还将学习如何评估自己得到的聚类结果的质量。
-
聚类分析将为分类、离群点分析以及其他数据挖掘任务提供帮助。
-
聚类分析的广泛应用
-
数据摘要、压缩与降维
- 例如:图像处理或向量量化。
-
协同过滤、推荐系统或客户细分
- 寻找志趣相投的用户或相似的商品。
-
动态趋势检测
- 对流式数据进行聚类,从而发现趋势和模式。
-
多媒体数据分析、生物数据分析以及社交网络分析
- 例如:对视频/音频片段或基因、蛋白质序列进行聚类。
-
作为其他数据挖掘任务中的关键中间步骤
-
为分类、模式发现以及假设的提出与检验生成紧凑的数据摘要。
-
离群点检测:离群点指的是那些"距离任何簇都很远"的数据点
-
什么是聚类分析?
-
什么是簇(cluster)?
-
簇是一组数据对象的集合,这些对象
-
在同一组内部彼此相似(或有关联)(即一个簇);
-
与其他组中的对象不相似(或无关联)(即不同簇)。
-
-
-
聚类分析(也叫 clustering、数据分割等)
- 给定一组数据点,将它们划分成若干组(簇),使得同一簇中的对象尽可能相似。
-
聚类分析是一种无监督学习(即没有预先定义好的类别)
- 这与分类不同,分类是一种有监督学习。
-
使用/应用聚类分析的典型方式
-
作为一个独立工具,用来洞察数据的分布情况;
-
或作为其他算法的预处理(或中间)步骤。
-
聚类分析:应用
-
作为其他数据挖掘任务中的关键中间步骤
-
为分类、模式发现、假设的提出与检验等生成紧凑的数据摘要
-
离群点检测:离群点是那些"远离所有簇"的数据
-
-
数据摘要、压缩与降维
- 例如:图像处理中的向量量化
-
协同过滤、推荐系统或客户细分
- 寻找志趣相投的用户或相似的产品
-
动态趋势检测
- 对流式数据进行聚类,发现趋势和模式
-
多媒体数据分析、生物数据分析和社交网络分析
- 例如:对图像、视频/音频片段或基因、蛋白质序列等进行聚类
要求与挑战
-
质量
-
能够处理不同类型的属性:数值型、分类型、文本、多媒体、网络,以及多种类型混合的数据
-
能够发现任意形状的簇
-
能够处理含噪声的数据
-
-
可扩展性
-
对全部数据进行聚类,而不仅仅是对样本进行聚类
-
能应对高维数据
-
能进行增量式或流式聚类,并且对输入数据的顺序不敏感
-
-
基于约束的聚类
- 能结合用户给出的偏好或约束、领域知识以及用户查询等信息
-
可解释性与可用性
聚类分析:多维度的分类方式
-
以技术为中心(Technique-Centered)
-
基于距离的方法
-
基于密度和基于网格的方法
-
概率模型与生成模型
-
利用降维方法的聚类
-
高维聚类
-
可扩展的聚类分析技术
-
-
以数据类型为中心(Data Type-Centered)
- 对数值数据、类别数据、文本数据、多媒体数据、时间序列数据、序列数据、流数据、网络数据以及不确定数据进行聚类
-
以额外洞见为中心(Additional Insight-Centered)
- 可视化洞见、半监督方法、集成式方法、基于验证的分析方法
典型的聚类方法
-
基于距离的方法
-
划分式算法:K-Means、K-Medians、K-Medoids
-
层次式算法:自底向上的凝聚型方法 vs. 自顶向下的分裂型方法
-
-
基于密度和基于网格的方法
-
基于密度:在较粗粒度上探索数据空间,然后通过后处理把稠密区域拼接成任意形状的簇
-
基于网格:把数据空间划分成类似网格结构的多个小区域进行聚类
-
-
概率与生成模型:从生成过程建模数据
-
假设生成模型具有某种特定形式(例如高斯混合模型)
-
使用期望最大化(EM)算法在给定数据集上估计模型参数,使其最大似然拟合
-
然后估计各数据点在该生成模型下的生成概率
-
-
高维聚类
高维聚类
-
**子空间聚类:**在不同的子空间上寻找簇
- 自底向上、自顶向下、基于相关性的算法与 δ-cluster 方法等
-
降维:一种"纵向"(即按列)的聚类形式
-
对列进行聚类;也可以同时对行和列进行聚类(协同聚类,co-clustering)
-
概率潜在语义索引(PLSI),之后是 LDA:用于文本数据的主题建模
- 一个簇(即一个主题)同时关联到一组词(即维度)和一组文档(即行)
-
非负矩阵分解(NMF)(作为协同聚类的一种形式)
- 一个非负矩阵 A(例如文档中的词频矩阵)可以近似分解为两个非负的低秩矩阵 U 和 V
-
谱聚类:利用数据相似度矩阵的谱信息,在较低维空间中进行聚类,从而实现降维
-
不同类型数据的聚类(Ⅰ)
-
数值型数据(Numerical data)
- 最早的大多数聚类算法都是为数值型数据设计的。
-
类别型数据(Categorical data,包括二元数据)
- 离散数据,没有自然的大小顺序,例如性别、种族、邮政编码、购物篮数据等。
-
文本数据:在社交媒体、网页和社交网络中非常常见
-
特征:高维、稀疏,取值通常对应于词频。
-
方法:k-means 与凝聚型层次聚类相结合;主题模型;协同聚类等。
-
-
多媒体数据:图像、音频、视频(如 Flickr、YouTube 上的数据)
-
多模态(通常与文本数据一起出现)。
-
具有上下文信息:既包含行为特征,也包含上下文属性。
-
图像:像素的位置表示其上下文,像素的取值表示其行为。
-
视频和音乐数据:记录的时间顺序本身就代表其含义。
-
-
不同类型数据的聚类(Ⅱ)
-
时间序列数据: 传感器数据、股票市场、时间跟踪、预测等
-
数据在时间维度上是相互依赖的
-
时间:上下文属性;数据取值:行为属性
-
基于相关性的在线分析(例如,对股票进行在线聚类以发现走势相近的股票代码)
-
基于形状的离线分析(例如,根据整体形状对心电图 ECG 进行聚类)
-
-
序列数据: 网站日志、生物序列、系统命令序列等
-
上下文属性:位置(placement),而不是时间
-
相似度函数:汉明距离、编辑距离、最长公共子序列等
-
序列聚类:后缀树;生成模型(如隐马尔可夫模型 HMM)
-
-
流数据(Stream data):
-
实时性强,会发生演化和概念漂移,需要单遍扫描算法
-
构建高效的中间表示,例如微聚类(micro-clustering)
-
不同类型数据的聚类(Ⅲ)
图和同质网络
各类数据都可以表示为图结构,边上带有相似度值。
方法:生成模型、组合优化算法(图割)、谱方法、非负矩阵分解等。
异质网络
一个网络由多种类型的节点和边组成(如文献引用网络)。
将不同类型的节点/链接一起进行聚类(如 NetClus)。
不确定数据: 含噪声、近似值、多种可能取值的数据
将概率信息纳入建模可以提升聚类质量。
大数据: 系统需要存储和处理非常庞大的数据(如网站日志)
例:Google 的 MapReduce 框架
使用 Map 函数把计算分发到不同机器上;
使用 Reduce 函数汇总各个 Map 步得到的结果。
聚类中的用户洞见与交互
-
可视化洞见:一图胜千言
-
人眼:高速处理器,并链接到丰富的知识库
-
人可以给出直观的见解;HD-eye:把高维簇可视化
-
-
半监督洞见:把用户的认知或意图传递给系统
- 用户播种(user-seeding):用户提供若干带标签的样本,大致代表自己感兴趣的类别
-
多视角与集成式洞见
-
多视角聚类:多种聚类结果代表不同的观察视角
-
可以将多个聚类结果进行集成,以得到更稳健的解决方案
-
-
基于验证的洞见:评估生成簇的质量
- 可以使用案例研究、特定指标或已有标签来进行评估
划分式方法
p19 划分式算法:基本概念

P20 K-Means 聚类方法
K-Means(MacQueen'67,Lloyd'57/'82)
每个簇用该簇的中心点来表示。
给定簇的个数 K,K-Means 聚类算法的步骤如下:
选择 K 个点作为初始质心;
重复执行:
根据最近的质心,将每个点分配到对应的簇中,形成 K 个簇;
重新计算每个簇的质心(即该簇所有点的均值);
直到满足收敛条件为止。
可以使用不同类型的距离度量:
曼哈顿距离(L1 范数)、欧几里得距离(L2 范数)、余弦相似度等
关于 K-Means 方法的讨论

K-Means 的一些变体
-
选择更好的初始质心估计
- K-means++、Intelligent K-Means、Genetic K-Means
-
为簇选择不同类型的代表原型
- K-Medoids、K-Medians、K-Modes
-
采用特征变换技术
- 加权 K-Means、核 K-Means
(加速的思路:先选取小样本来确定位置;也可以进行分层)
K-Means 的初始化
-
不同的初始化方式可能产生截然不同的聚类结果(有的会离最优解很远)。
-
最初的做法(MacQueen'67):随机选择 K 个初始种子点
- 需要用不同的种子多次运行算法。
-
后来提出了许多更好的初始化 K 个种子点的方法。
-
K-Means++(Arthur & Vassilvitskii'07):
-
第一个质心随机选取;
-
之后每次选择的新质心,都尽量远离当前已选的质心(根据加权概率进行选择);
-
重复这一过程,直到得到 K 个质心为止
-
p26 处理离群点:从 K-Means 到 K-Medoids

关于 K-Medoids 聚类的讨论

K-Medians:通过取中位数来处理离群点

更好的处理噪声
K-Modes:对类别数据的聚类






核 K-Means 聚类
-
核 K-Means 可以用来发现非凸形状的簇
- 普通 K-Means 只能发现线性可分的簇
-
基本思想:先把数据投影到高维核空间,再在该空间做 K-Means 聚类
-
用核函数把输入空间中的数据点映射到一个高维特征空间
-
在映射后的特征空间上执行 K-Means
-
-
计算复杂度比普通 K-Means 更高
- 需要计算并存储由核函数在原始数据上得到的 n×nn \times nn×n 核矩阵
-
广泛研究的**谱聚类(spectral clustering)**可以看作是核 K-Means 聚类的一种变体
核函数与核 K-Means 聚类



层次式方法
p36 提纲
-
聚类分析
-
划分式方法
-
层次式方法
-
层次聚类的基本概念
-
凝聚式层次聚类
-
分裂式层次聚类
-
BIRCH:利用聚类特征树的可扩展层次聚类方法
-
概率式层次聚类
-
-
基于密度和基于网格的方法
-
聚类结果的评价
层次聚类:基本概念



树状图:簇是如何合并的
-
树状图(dendrogram):通过多层次的嵌套划分,把一组数据对象分解成一个簇的树形结构。
-
要得到具体的聚类结果,可以在树状图上选定一个高度"剪开"这棵树,此时每一个连通分支就对应一个簇。
黄色标注:层次聚类会生成一棵树状图(即簇的层次结构)

p40 凝聚式聚类算法
-
AGNES(AGglomerative NESting,Kaufmann 和 Rousseeuw,1990)
-
使用单链(single-link)方法和不相似度矩阵
-
不断合并不相似度最小的两个结点
-
最终所有结点都归为同一个簇
-
-
凝聚式聚类会因簇间相似度度量不同而产生不同变体
-
单链(Single link,最近邻)
-
完全链(Complete link,直径)
-
平均链(Average link,组平均)
-
质心链(Centroid link,质心相似度)
-
p42 层次聚类中的单链与全链
-
单链(Single link,最近邻)
-
两个簇之间的相似度,定义为它们当中"最相似的一对样本"(最近邻样本)之间的相似度。
-
属于局部相似度:更强调局部相邻区域,容易忽略簇的整体结构。
-
能够把非椭圆形的对象集合聚在一起(比如长条、蛇形的簇)。
-
对噪声和离群点比较敏感。
-
-
全链(Complete link,直径)
-
两个簇之间的相似度,定义为它们当中"最不相似的一对样本"之间的相似度。
-
每次合并两个簇时,希望合并后簇的直径最小(簇内最远两点的距离尽量小)。
-
行为带有全局性,倾向于得到形状紧凑的簇。
-
同样对离群点比较敏感。
-
p43 凝聚式聚类:平均链 vs. 质心链

p44 使用 Ward 准则的凝聚式聚类

p45 分裂式聚类
DIANA(Divisive Analysis,划分分析,Kaufmann 和 Rousseeuw,1990)
已在某些统计分析软件中实现,例如 Splus。
与 AGNES 的顺序相反:
从一个大簇开始不断向下拆分,最终每个样本各自成为一个单独的簇
p46 分裂式聚类是一种自顶向下的方法
过程从"根节点"开始:一开始把所有点看作一个大簇。
通过递归地把上层的大簇不断划分为更小的簇,逐步构建出树状图。
可以看作一种全局式的聚类思路。
与凝聚式聚类相比,一般在效率上更有优势。
p47 关于分裂式聚类算法设计的进一步说明
选择要划分哪个簇
计算各个簇的平方误差和(SSE),选择平方误差和最大的那个簇进行划分。
划分准则:决定如何划分
可以使用 Ward 准则,选择能使 SSE 准则下降最多的划分方式。
对于类别型数据,可以使用 Gini 指数作为划分依据。
处理噪声
通过设置阈值来确定停止条件:不要继续产生过小的簇,以免这些簇主要由噪声点组成。
p48 层次聚类的扩展
-
凝聚式与分裂式层次聚类方法的弱点
-
不可回溯:一旦做出了某次合并/拆分决策,就不能再撤销。
-
可扩展性瓶颈:每一次合并或拆分都需要考察很多可能的选项。
- 时间复杂度:至少为 O(n2)O(n^2)O(n2),其中 nnn 是对象总数。
-
-
其他一些层次聚类算法
-
BIRCH(1996):使用 CF-tree(聚类特征树),并逐步调整子簇的质量。
-
CURE(1998):用一组分布良好的代表点来表示一个簇。
-
CHAMELEON(1999):在数据的 K 近邻图上,采用图划分方法进行聚类。
-
p49 BIRCH:一种多阶段层次聚类方法
BIRCH(Balanced Iterative Reducing and Clustering Using Hierarchies)
由 Zhang、Ramakrishnan 和 Livny 提出(SIGMOD'96)
对之后许多新的聚类方法和应用产生了重要影响(获 2006 年 SIGMOD Test of Time 奖)
主要创新点
将层次聚类(前期的微聚类阶段)与其他聚类方法(后期的宏观聚类阶段)结合起来。
多阶段层次聚类
阶段 1(初始微聚类):扫描数据库,构建初始 CF 树,通过多层次压缩来保留数据固有的聚类结构。
阶段 2(后期宏观聚类):对 CF 树叶结点所代表的微簇,使用任意聚类算法(例如迭代划分)进行更灵活的聚类。
p50 聚类特征向量


p51 聚类特征:给定簇的统计量概括


簇的三个基本度量:质心、半径和直径


CF 树(聚类特征树)
- CF 树是一种高度平衡的树,用于存储聚类特征。
- 一棵非叶节点最多可以有 B 个孩子。
- 每个叶节点最多包含 L 个聚类特征(CFs)。
- 叶节点之间通过双向链表连接。
- 当插入一个新样本时:
- 找到离该样本最近的叶节点条目;
- 将该样本加入对应的叶节点,并更新其聚类特征(CF);
- 如果叶节点的直径大于阈值,则分裂该叶节点。
BIRCH:一种可扩展且灵活的聚类方法
- 将凝聚式聚类(agglomerative clustering)与其他(灵活的)聚类方法相结合。
- 低层次微聚类(low-level micro-clustering):
- 探索聚类特征(CF-feature)和 BIRCH 树结构。
- 保留数据固有的聚类结构。
- 高层次宏聚类(higher-level macro-clustering):
- 为与其他聚类方法的集成提供足够的灵活性。
p59 生成模型


p62 大纲
- 聚类分析
- 划分方法
- 层次方法
- 基于密度和基于网格的方法
- DBSCAN:基于高密度相连区域的密度聚类
- DENCLUE:基于密度分布函数的聚类
- 基于网格的方法
- 聚类评估
p63 基于密度的聚类方法
- 基于密度(一种局部聚类准则)的聚类,例如密度相连的点
- 主要特点:
- 能够发现任意形状的聚类
- 可以处理噪声
- 一次扫描(仅需检查局部区域以验证密度)
- 需要密度参数作为终止条件
- 几项有趣的研究:
- DBSCAN:Ester 等人(KDD'96)
- OPTICS:Ankerst 等人(SIGMOD'99)
- DENCLUE:Hinneburg 与 D. Keim(KDD'98)
- CLIQUE:Agrawal 等人(SIGMOD'98)(同时也是基于网格的方法)
DBSCAN
一种基于密度的簇定义:
- 一个簇 被定义为一个密度相连的点的最大集合。
两个参数:
-
Eps (ε): 邻域的最大半径。
-
MinPts: 一个点的 Eps-邻域中所需的最少点数。
点 q 的 Eps (ε)-邻域定义:
-
NEps(q): 数据集中所有与点 q 之间距离小于等于 Eps 的点 p 的集合。
- 数学表达:
NEps(q): {p 属于 D | dist(p, q) ≤ Eps}
- 数学表达:
密度可达/直接密度可达
直接密度可达:
点 p 关于参数 Eps (ε) 和 MinPts 是直接密度可达于点 q 的,如果:
-
p 属于 q 的 Eps-邻域
-
q 是核心点(即 |NEps(q)| ≥ MinPts)
密度可达:
点 p 关于参数 Eps 和 MinPts 是密度可达于点 q 的,如果存在一条点链 p₁, ..., pₙ,其中 p₁ = q,pₙ = p,使得对于每个 i,pᵢ₊₁ 都是直接密度可达于 pᵢ 的。
密度相连:
点 p 关于参数 Eps 和 MinPts 是密度相连于点 q 的,如果存在一个点 o,使得 p 和 q 都是关于 Eps 和 MinPts 从 o 密度可达的。
算法步骤:
-
随机选择一个点 p
-
获取所有从 p 关于 Eps 和 MinPts 密度可达的点
-
如果 p 是核心点,则形成一个簇
-
如果 p 是边界点,则没有点是从 p 直接密度可达的,DBSCAN 访问数据库中的下一个点
-
继续此过程,直到所有点都被处理完毕
计算复杂度:
-
如果使用空间索引,DBSCAN 的计算复杂度为 O(n log n),其中 n 是数据库对象的数量
-
如果不使用空间索引,复杂度为 O(n²)
p67
对参数设置比较敏感
p74 基于网格的聚类
探索聚类中的多分辨率网格数据结构
-
将数据空间划分为有限数量的单元 ,以形成一个网格结构。
-
从网格结构中的单元里找出簇(即密集区域)。
一个典型的基于网格的算法的特点与挑战:
-
效率与可扩展性: 单元的数量 << 数据点的数量,因此速度快。
-
均匀性: 网格是均匀的,难以处理高度不规则的数据分布。
-
局部性: 受限于预定义的单元大小、边界和密度阈值,可能忽略局部模式。
-
维度灾难: 难以对高维数据进行聚类。
将要介绍的方法:
-
STING(一种统计信息网格方法)
-
CLIQUE : 既是基于网格的聚类,也是子空间聚类。
STING 是一种基于网格的聚类和查询处理方法 ,特别适用于大规模空间数据(如地理信息系统 GIS、遥感图像等)。它通过构建一个多分辨率的网格结构来高效地进行数据分析。
核心思想:将空间划分为多级网格,每一层都是前一层的细化,形成一个树形层次结构。每个单元格存储统计信息,用于快速回答查询或发现模式。
CLIQUE 算法详解
一、算法定位:三重身份的结合
CLIQUE 是一个独特的算法,它同时具备三种特性:
-
基于网格:通过划分网格来离散化数据空间
-
基于密度:使用密度阈值来定义簇
-
子空间聚类:自动发现高维数据中有意义的低维子空间
这种结合使得 CLIQUE 能够有效处理高维数据的聚类问题。
二、核心概念解析
1. 密集单元
-
一个单元是密集的,如果:
单元中数据点数 / 总数据点数 > 密度阈值 -
这类似于 DBSCAN 中的核心点概念,但是在网格单元层面
2. 子空间簇
-
在任意子空间中,由相邻的密集单元组成的集合
-
这是 CLIQUE 的核心创新:不局限于原始高维空间,而是寻找"更好"的低维投影
3. 最小描述
-
用最简洁的方式描述一个簇,避免冗余
-
例如:
(年龄: 20-30) ∧ (收入: 5000-8000) → 簇A
三、算法流程的三阶段
阶段1:识别包含簇的子空间
关键思想 :使用 Apriori 原理
-
Apriori 原理:如果一个 k 维单元是密集的,那么它在所有 (k-1) 维子空间上的投影也必须是密集的
-
反过来说:如果一个 (k-1) 维单元不是密集的,那么任何包含它的 k 维单元也不可能是密集的
搜索过程(自底向上):
-
1维子空间:找出所有密集的1维区间
-
2维子空间:只组合那些在1维已经是密集的区间,生成候选的2维单元,然后验证哪些是密集的
-
k维子空间:重复此过程,直到找不到更高维的密集单元
示例:
-
如果
(年龄:20-30)不是密集区间,那么(年龄:20-30, 收入:5000-8000)就不可能是密集单元 -
这样大大减少了需要检查的候选单元数量
阶段2:识别簇
-
确定密集单元:在所有感兴趣的子空间中找出密集单元
-
确定连通密集单元:将相邻的密集单元连接起来形成簇
- 两个单元相邻:如果它们在每个维度上的区间都相邻或重叠
阶段3:生成最小描述
目标:用最简洁的规则描述每个簇
步骤:
-
确定最大区域:找到覆盖簇中所有点的最大连续区间
-
确定最小覆盖:用最少数量的矩形区域覆盖整个簇
示例:
-
一个簇可能被描述为:
(20 ≤ 年龄 ≤ 35) ∧ (5000 ≤ 收入 ≤ 10000) -
而不是多个小区域的复杂组合
四、算法优势深度分析
1. 自动发现高维子空间
-
传统方法困境:在高维空间中,数据通常很稀疏,难以形成有意义的簇
-
CLIQUE 解决方案:自动找到那些数据分布比较集中的低维子空间
-
实际意义:比如在100维的数据中,可能只有5-6个维度组合能够形成有意义的簇
2. 对数据顺序不敏感
-
由于基于网格计数,算法的结果不依赖于数据输入的顺序
-
这保证了结果的可重复性
3. 良好的可扩展性
-
线性于数据规模:处理每个数据点的时间是常数
-
对维度增加相对鲁棒:由于使用 Apriori 剪枝,避免了维度灾难的最坏情况
五、算法局限性分析
1. 网格参数敏感性问题
-
单元大小选择:
-
太小 → 产生大量稀疏单元,计算开销大
-
太大 → 掩盖真实的簇结构,精度降低
-
-
密度阈值选择:
-
太高 → 可能漏掉真实的簇
-
太低 → 产生大量假阳性簇
-
2. 边界不精确问题
-
簇的边界被迫与网格线对齐
-
无法捕捉自然的、平滑的簇边界
3. 高维挑战依然存在
- 虽然使用 Apriori 剪枝,但在维度非常高时,计算仍然很昂贵
六、实际应用示例
场景:客户数据分析(维度:年龄、收入、消费频率、教育程度、地区...)
CLIQUE 可能发现:
-
在
(年龄, 收入)子空间中有一个密集簇:25-35岁,月收入8000-15000 -
在
(消费频率, 地区)子空间中有另一个簇:每周消费3-5次,市中心区域
这些发现比在整个高维空间中寻找簇更有意义和可解释性
评价聚类
p84 聚类评估
-
评估在数据集上进行聚类分析的可行性
-
评估由聚类方法生成的结果的质量
聚类评估与验证的主要问题
-
聚类趋势: 评估聚类分析的合适性,即数据是否具有任何内在的分组结构。
-
确定簇的数量: 为数据集确定一个合适的簇的数量,这可能产生高质量的聚类结果。
-
聚类质量评估: 评估聚类结果的质量。
p85 评估聚类的合适性
-
数据是否具有任何"内在的分组结构"------即可能导致有意义簇的非随机结构。
-
确定聚类趋势 或可聚类性。
-
这是一项艰巨的任务,因为存在许多不同的簇定义。
- 不同的定义包括:划分式、层次式、基于密度和基于图的。
-
即使固定了一种聚类类型,仍然很难为数据集定义一个合适的零模型。
-
存在一些可聚类性评估方法,例如:
-
空间直方图: 将数据的直方图与从随机样本生成的直方图进行对比。
-
距离分布: 比较数据中点对点的距离与从随机生成的样本中得到的距离。
-
霍普金斯统计量: 一种用于检验空间随机性的稀疏抽样检验方法。
-
空间直方图方法 : 将输入数据集 D 的 d 维直方图 与由随机样本生成的直方图进行对比。
判断标准 : 如果两个直方图的分布差异相当大 ,则数据集 D 是可聚类的。
方法概述:
-
将每个维度划分为等宽 的区间,统计每个单元格 中有多少个点,从而获得经验联合概率质量函数。
-
对随机采样的数据执行相同的操作。
-
使用Kullback-Leibler散度值来计算它们之间的差异程度
选择合适的簇数量 控制着聚类分析的合适粒度 。
目标是在聚类分析的压缩能力 和准确性之间找到一个良好的平衡。
两种不理想的极端情况:
-
整个数据集只有一个簇:聚类毫无价值。
-
将每个数据点都视为一个簇:没有实现任何数据概括。
确定簇数量的方法:
一种经验方法:
-
对于一个包含 n 个点的数据集,簇的数量 k ≈ √(n/2)。
-
每个簇预期包含大约 √(2n) 个点。
p90 寻找簇的数量:肘部法则
-
该方法观察簇内方差和 相对于簇数量 的曲线中的转折点。
-
增加簇的数量有助于减少每个簇的簇内方差之和。
-
但是,分裂一个内聚性很高的簇只会带来很小的方差减少。
p91 寻找K(簇的数量):一种交叉验证方法
-
将一个给定的数据集分成 m 个部分,使用其中的 m-1 个部分来得到一个聚类模型。
-
使用剩余的那一部分来测试聚类的质量。
- 例如,对于测试集中的每个点,找到与其最接近的质心,并使用测试集中所有点与其最接近质心之间的平方距离的总和来衡量模型对测试集的拟合程度。
-
对于任意一个 k > 0,将上述过程重复 m 次,比较不同 k 值对应的总体质量度量,从而找到最契合数据的簇数量
p92 聚类质量评估
评估聚类结果的好坏。
- 在实践中,没有普遍公认的、最适合的衡量标准。
外部方法与内部方法 : 取决于是否使用了真实标签。
- 真实标签: 由人类专家构建的理想聚类结果。
外部方法 : 有监督的 ,采用非数据集固有的标准。
- 使用某些聚类质量度量,将聚类结果与先验的或专家指定的知识(即真实标签)进行比较。
内部方法 : 无监督的 ,标准源自数据本身。
- 通过考虑簇间分离程度 和簇内紧凑程度来评估聚类的好坏(例如,轮廓系数)。
p93 使用外在方法衡量聚类质量的通用标准
给定真实标签(或基准分类)Cg,Q(C, Cg) 是衡量聚类结果 C 质量的函数。
一个良好的质量度量 Q(C, Cg) 应满足以下四个基本标准:
-
簇的同质性: 簇越"纯净"越好。
解释: 理想情况下,一个簇应只包含属于同一真实类别的对象。
-
簇的完整性: 将属于真实标签中同一类别的对象分配到同一个簇中。
解释: 理想情况下,一个真实类别中的所有对象都应被分配到同一个簇中。
-
"混杂袋"优于"异类侵入": 将一个异类对象放入一个纯净的簇中,应比将其放入一个"混杂袋"(即,"杂项"或"其他"类别)受到更大的惩罚。
解释: 破坏一个良好簇的纯净性比向一个本就是大杂烩的簇中添加一个异类更糟糕。
-
保留小簇: 将一个小类别分割成多个部分,比将一个大类别分割成多个部分危害更大。
解释: 算法应能识别并保留那些虽然小但很明确的类别。

常用的外在评估方法
-
基于匹配的方法
- 考察聚类结果在对数据集中的对象进行划分时,与真实标签的匹配程度。
-
基于信息论的方法
-
比较聚类结果的分布与真实标签的分布。
-
使用信息论的概念(例如,熵)来量化比较结果。
-
例如:条件熵,归一化互信息。
-
-
基于成对比较的方法
-
将真实标签中的每个组视为一个类别,然后检查聚类结果中对象对的分配一致性。
-
例如:存在四种情况:真阳性、假阴性、假阳性、真阴性;杰卡德系数。
-



p95 基于匹配的方法
基于匹配的方法将聚类结果中的簇 与真实分组中的组进行比较。
假设一个聚类方法将数据集 D = {o₁, ..., oₙ} 划分为 m 个簇 C = {C₁, ..., C_m}。真实分组 G 将 D 划分为 l 个组 G = {G₁, ..., G_l}。
纯度 :衡量一个簇 C_i 中只包含来自一个(真实)分组的点的程度。
-
单个簇
C_i的纯度:|C_i ∩ G_j| / |C_i|,其中G_j是使得|C_i ∩ G_j|最大的那个真实分组。 -
整个聚类
C的总纯度:
purity = ∑_{i=1}^m (|C_i| / n) * [ max_{j=1}^l ( |C_i ∩ G_j| / |C_i| ) ] = (1/n) * ∑_{i=1}^m max_{j=1}^l { |C_i ∩ G_j| }

纯度越大越好
条件信息熵

无法处理分为两个簇的情况

NMI


内在方法(即无真实标签)基于对象间的相似性/距离度量,考察簇的紧凑程度以及簇间的分离程度。
邓恩指数:
-
簇的紧凑性:同一簇中两点间的最大距离:Δ = max_{C(o_i)=C(o_j)} {d(o_i, o_j)}
-
不同簇间的分离程度:属于不同簇的两点间的最小距离:δ = min_{C(o_i)≠C(o_j)} {d(o_i, o_j)}
-
邓恩指数即为比值:DI = δ / Δ,该比值越大,表示簇间分离程度相对于簇的紧凑性越好
-
邓恩指数使用极端距离来度量簇的紧凑性和簇间分离,可能受异常值影响
假设数据集 D 被划分为 k 个簇:C_1, ..., C_k
对于 D 中的每个对象 o,我们计算:
-
a(o) = ∑_{o'∈C_i, o≠o'} dist(o, o') / (|C_i| - 1):o 与其所属簇中所有其他对象的平均距离,反映 o 所属簇的紧凑性
-
b(o) = min_{C_j:1≤j≤k, j≠i} {∑_{o'∈C_j} dist(o, o') / |C_j|}:o 到所有其他簇的最小平均距离,反映 o 与其他簇的分离程度
-
轮廓系数:s(o) = (b(o) - a(o)) / max{a(o), b(o)},取值范围为 (-1, 1)
-
当 o 的轮廓系数接近 1 时,包含 o 的簇是紧凑的且 o 远离其他簇,这是理想情况
-
当值为负(即 b(o) < a(o))时,o 与其他簇中的对象比与同簇中的对象更接近:这是应该避免的不良情况
