聚类分析的基本概念和方法
文章目录
前言
此文章主要讲解聚类分析的基本概念和方法,参考的内容是《数据挖掘概念与技术》Jiawei Han Micheline Kamber Jian Pei 著。
一、什么是聚类分析
聚类分析: 是把一个数据对象划分成子集的过程,每个子集是一个簇,满足一下两点:
- 簇中对象彼此相似。
- 簇间对象彼此相异。
说到了聚类分析,就离不开无监督学习:没有预先定义的类
聚类分析典型的应用:
- 作为洞悉数据分布的独立工具。
- 作为其他算法的预处理步骤。
1、聚类分析基本流程与步骤
1、特征选择:
- 选择跟任务相关的信息。
- 最小化信息冗余。
2、邻近性度量:两个特征向量的相似性。
3、聚类准则:通过成本函数或一些规则表示。
4、聚类算法:选择聚类算法。
5、聚类评估:验证测试。
6、结果解释:集成在应用中。
2、 什么是好的聚类方法
一个好的聚类方法可以产生高质量的簇:
- 高类内相似性,簇内的内聚性。
- 低类间相似性,簇间区别。
聚类方法的质量取决于:
- 该方法采用的相似度量和它的实现。
- 它能够发现一些或所有隐藏的模式。
说白了,就是把数据集分成几个子集,越容易区分越好。
3、聚类的模型评估
相似性度量:
- 相似性度量通常用距离表示:d(i, j).
- 不同类型的数据(布尔值、分类、序数比、向量变量),距离函数存在很大的差异。
- 根据应用和数据语义,权重应该与不同的变量相关联。
聚类质量:
- 通常有一个单独的 “质量” 函数来度量簇的 “质量”。
- 很难定义 “足够相似” 和 “足够好”,答案通常都是非常主管的。
4、聚类分析的比较
划分标准:单层分区与分层分区(通常多级分层分区更容易描述)。
簇的分离性:排他性(一个客户只属于一个区域)与非排他性(一个文档可能属于多个类)。
相似性度量:基于距离的(欧几里得,曼哈顿、切比雪夫),基于联通的(密度或连通性)。
聚类空间:全空间(通常在低纬度)与子空间(通常在高纬度集群中)
5、聚类分析的挑战
可伸缩性:对多有数据进行聚类,而不是对样本聚类。
能够处理不同类型的属性:数值的、二元的、序数的。
基于约束的聚类:用户可以输入约束条件,使用领域知识确定输入参数。
用于决定输入参数的领域知识最小化。可解释性和可应用性强。
其他:发现具有任意形状的簇,能够处理有噪声的数据,增量聚类和对输入顺序不敏感,高纬度数据。
二、基本聚类方法概述
划分方法:构造不同的分区,然后根据一些标准对他们进行评估。典型的方法有:K-means,K-中心点,CLARANS.
层次方法:使用一些标准对数据集分层。典型的方法:Diana,Agnes,BIRCH,CAMELEON.
基于密度的方法:基于连通性和密度函数。典型方法:DBSCAN,OPTICS,DenClue.
基于网络的方法:基于多粒度结构。典型的方法:STING,WaveCluster,CLIQUE
方法 | 一般特点 |
---|---|
划分方法 | ①发现球形互斥的簇 ②基于距离 ③可以使用均值或中心点等代表簇中心 ④对中小数据规模有效 |
层次方法 | ①聚类是一个层次分解 ②不能纠正错误的合并或划分 ③可以集成其他技术,如微聚类或考虑对象链接 |
基于密度方法 | ①可以发现任意形状的簇 ②簇是对象空间中被低密度区域分隔的稠密区域 ③簇密度:每个点的邻域内必须具有多少个点(阈值点)④可能过滤离群点 |
基于网络的方法 | ①使用一种多分辨率网格数据结构 ②快速处理(典型地,独立于数据对象,但依赖于网格大小) |
三、划分算法
1、基本概念
划分方法:将一个包含 n 个对象的数据集 D 划分成 k 个簇。使距离平方和最小化(
c
i
c_i
ci 是簇
c
i
c_i
ci 的中心或质心)
E
=
∑
i
=
1
k
Σ
p
∈
C
i
(
d
(
p
,
c
i
)
)
2
E=\sum_{i=1}^{k} \Sigma_{p \in C_{i}}\left(d\left(p, c_{i}\right)\right)^{2}
E=i=1∑kΣp∈Ci(d(p,ci))2
给定 k,根据选定的划分标准找出最优的 k 个簇。
- 全局最优(Global optimal): 枚举所有的划分。
- 启发式方法(Heuristic methods):K-means,K-medoids算法。
- K-means:每个簇用簇中心表示。
- K-medoids:每个簇用接近聚类中心的对象表示。
2、k-means 聚类方法
k-means 算法分成四个步骤:
- 首先输入 k 的值,即具有 n 个对象的数据集 D = { o 1 , o 2 , . . . , o n } D=\{o_1,o_2, ... ,o_n\} D={o1,o2,...,on} 经过聚类将得到 k 个分类或者分组。
- 从数据集中随机选择 k 个对象作为簇质心,每个簇质心代表一个簇,得到的簇质心集合为 C e n t r o i d = { c 1 , c 2 , . . . , c k } Centroid=\{c_1,c_2, ... ,c_k\} Centroid={c1,c2,...,ck}。
- 对 D 中每一个对象 o i o_i oi,计算 o i o_i oi 与 c i c_i ci 的距离,得到一组距离值,选择最小距离值的簇质心 c s c_s cs .将对象 o i o_i oi 划分给 c s c_s cs 簇。
- 根据每个簇所包含的对象集合,重新计算簇中所有对象的平均值得到一个新的质心,重复步骤 3 和 4.直到簇的质心不在变化。
1、k-means 方法的优缺点
优点:
- 擅长处理球状分布的数据,当结果聚类是密集的,而且类和类直接的区别比较明显时,k-means 算法的效果较好。
- 对于处理大数据集,是相对可伸缩和高效的,复杂度是 O(nkt), n 是对象个数,k 是簇的数目,t 是迭代的次数。
- 相比较其他的算法简单,容易掌握。
缺点:
- 需要预先指定集群的数量 k (有自动确定 k 最佳的方法)
- 对噪声和离群点敏感。
- 不适合发现非凸形状的簇。
2、k-means 方法的变种
大多数 k-means 方法的变种在于以下几个方面;
- 初始 k 平均值的选择。
- 相异度的计算。(距离公式)
- 计算聚类平均值的策略。(中心点)
处理分类数据 k-众数:
- 用众数代替聚类的平均值。
- 使用新的相异性度量方法来处理分类对象。
- 用基于频率的方法来更新聚类的众数。
- k-prototype:一种混合处理分类数据和数值数据的方法。
注意:k-means 算法对孤立点很敏感:均值由于极大值的对象可能会严重的扭曲数据的分布。
3、k-中心聚类方法
k-medoids(k-中心) :不采用簇中对象的平均值作为参照点,而是选用簇中位置最中心的对象最为参照点,也就是簇中心肯定是一个对象。
k-中心 基本思想:
- 首先为每个簇随意选择一个代表对象;剩余的对象根据其与代表对象的距离分配给最近的一个簇。
- 反复地使用非代表对象来替代代表对象,以改进聚类的质量。
- 聚类结果的质量用一个代价函数来估算,该函数评估了对象与其参照对象之间的平均相异度。
PMA (Partitioning Around Medoids,1987)就是利用上述方法,它对于较小的数据集非常有效,但不能很好的扩展到大型数据集。
1.判定原则
为了判定一个非代表对象 O r a n d o m O_{random} Orandom 是否是当前一个代表对象 O j O_j Oj 的好的代替,对于每一个非代表对象 p,考虑以下四种情况:
- 第一种情况:p 当隶属于代表对象 O j O_j Oj.如果 O j O_j Oj 被 O r a n d o m O_{random} Orandom 所代替,且 p 离 O i O_i Oi 最近,i ≠ j,那么 p 被重新分给 O i O_i Oi。老大跑远了,投靠最近的强势势力。这里就等于叛变了。
- 第二种情况:p 当隶属于代表对象 O j O_j Oj.如果 O j O_j Oj 被 O r a n d o m O_{random} Orandom 所代替,且 p 离 O j O_j Oj 最近,那么 p 被重新分给 O r a n d o m O_{random} Orandom。部落换了一个首领,变成老大的儿子,对象离家近,任然属于这个部落,只不过老大换了人。
- 第三种情况:p 当隶属于代表对象 O i O_i Oi.如果 O j O_j Oj 被 O r a n d o m O_{random} Orandom 所代替,且 p 任然离 O i O_i Oi 最近,i ≠ j,那么 p 隶属关系不改变。
- 第四种情况:p 当隶属于代表对象 O i O_i Oi.如果 O j O_j Oj 被 O r a n d o m O_{random} Orandom 所代替,且 p 任然离 O j O_j Oj 最近,i ≠ j,那么 p 被重新分配给 O r a n d o m O_{random} Orandom。
2、步骤
算法 k-中心:
- 随机选择 k 个对象作为初始的代表对象。
- repeat:
- 指派每个剩余的对象给离它最近的代表对象所代表的簇。
- 随意的选择一个非代表对象 O r a n d o m O_{random} Orandom.
- 计算用 O r a n d o m O_{random} Orandom 代替 O j O_{j} Oj 的总代价 S.
- 如果 S 小于 0,则使用 O r a n d o m O_{random} Orandom 替换 O j O_{j} Oj,形成新的代表对象的集合。
- Utill:不发生变化。
层次聚类
使用距离矩阵作为聚类准则。这个方法不需要簇 k 的数量作为输入,但是需要一个终止条件。
上图就是 AGNES 算法和 DIANA 算法简略图,这个不作为重点学习,需要了解的请查阅别处资料。
4、 密度聚类(重点DBSCAN)
1、基于密度聚类的基本概念
两大参数:
- Eps: 邻域的最大面积。
- MinPts: 该点一个最大半径邻域内的最少点数。
N
E
p
s
N_{Eps}
NEps :
{
P
属
于
数
据
集
D
∣
d
i
s
t
(
p
,
q
)
≤
E
p
s
}
\{P 属于数据集 D\space | \space dist(p,q)\leq Eps\}
{P属于数据集D ∣ dist(p,q)≤Eps} ,给定对象半径为 Eps 内的区域称为该对象的 E 邻域。
核心对象:如果给定对象 E 邻域内的样本点数大于或者等于 MinPts, 该对象为核心对象。
直接密度可达:对于样本集合 D,如果样本点 p 在 q 的 E 邻域内,并且 q 为核心对象,那么对象 p 从对象 q 直接密度可达。
密度可达:对于样本集合D, 给定一串样本点 p1, p2, … ,pn, p = p1, q = pn, 假如 pi 从 pi-1 直接密度可达,那么对象 q 到对象 p 密度可达。传递性。
密度相连:对于样本集合 D 种一点 o,如果对象 o 到对象 p 和对象 q 都是密度可达的,那么 p 和 q 密度相连。也就是在密度可达中间加了一个对象,传递得更远而已。我们通过这种传递性,可以更好的聚类。
DBSCAN 应用:依赖于基于密度的簇概念,簇被定义为密度连接点的最大集合。在有噪声的空间中发现任意形状的簇。
2、DBSCAN 算法逻辑
- 任意选择一个样本点 p。
- 基于半径和最小点数检索所有密度可及的点。
- 如果 p 是一个核心点,则形成一个簇。
- 如果 p 是一个边界点,那么 p 上没有一个密度可达的点,DBSCAN 访问下一个点。
- 继续这个过程,直到处理完所有的点。
- 如果使用空间索引,DBSCAN 的计算复杂度为 O ( n l o g n ) O(nlogn) O(nlogn),其中 n 是数据集中数据对象的数量,否则,时间复杂度为 O ( n 2 ) O(n^2) O(n2).
DBSCAN 伪代码:
心得
介绍了聚类里面基础的知识和几个三个经典的聚类算法。这只是一种认识,希望可以带来入门级的理解,需要熟练掌握的话要多用。对于机器学习的友友们,算法的基本流程可能不能满足你们,实现出来或者要看清怎么实现的具体细节还需要自己去哔站搜索。算法是美丽的,过程简单,实现简单,关键要我们怎么开拓思维。好的数学功底,编程能力,语言组织(怎么转换成数学语言,怎么讲清刚认识的算法)都是干我们这行所具备的。模仿吧,模仿多了直到那些人的作品不好,再往后面知道怎么改造形成自己喜欢的风格,最后就是你自己的了。