聚类把数据对象集划分成多个组成或簇的过程,使得簇中的对象彼此相似,但与其他簇中的对象不相似。
聚类主要有以下应用场景:
- Data summarization, compression and reduction.
- Outlier detection
- Collaborative filtering, recommendation system and customer segmentation: find like-minded user or similar products
- Dynamic trend detection
- Multimedia data, biological data, social network analysis
聚类过程一般步骤如下:
- 数据处理:包括清洗、特征标准化和降维;
- 特征工程:从最初的特征中选择最有效的特征,并将其存储于向量中,并根据需要进行转换;
- 聚类:选择合适特征类型的某种距离函数(或构造新的距离函数)进行接近程度的度量,执行聚类(分组)过程;
- 评估:对聚类结果进行评估
1. 距离度量
设
x1=(x11,x12,...,x1n)和x2=(x21,x22,...,x2n)是两个被
n个数值属性描述的对象。
(1)欧氏距离
d=i=1∑n(x1i−x2i)2
=(x11−x21)2+(x12−x22)2+...+(x1n−x2n)2
(2)曼哈顿距离
曼哈顿距离也称作“城市街区距离”
d=i=1∑n∣x1i−x2i∣=∣x11−x21∣+∣x12−x22∣+...+∣x1n−x2n∣
(3)闵可夫斯基距离
闵可夫斯基距离(Minkowski distance)是欧几里得距离和曼哈顿距离的推广,又称
Lp范数,
p=1时,表示曼哈顿距离(
L1范数);
p=2时,表示欧几里得距离(
L2范数)。
d=hi=1∑n(x1i−x2i)h
=h(x11−x21)h+(x12−x22)h+...+(x1n−x2n)h
(4)上确界距离
上确界距离又称切比雪夫距离(Chebyshev distance),
L∞范数,
Lmax范数,是
h→∞时的闵可夫斯基距离。
d=h→∞lim(i=1∑n∣x1i−x2i∣h)h1=max(x1i−x2i)h
(5)夹角余弦
余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个样本差异的大小。余弦值越接近1,说明两个向量夹角越接近0度,表明两个向量越相似。
cos(θ)=∑i=1nx1i2
∑i=1nx2k2
∑i=1nx1ix2i
2. 主要聚类算法
类型 |
特点 |
主要算法 |
划分方法 |
发现球形互斥簇 大部分算法基于距离 对噪声和离群点敏感 |
k-means; K-Medoids(PAM); K-Medians K-Modes; K-Means++; Kernel K-Means CLARA; CLARANS |
层次方法 |
创建给定数据对象的层次分解 可基于距离、密度和连通性 不能纠正错误的合并或划分 |
AGNES; DIANA; BIRCH(球形互斥簇) Chameleon(任意形状的簇) |
基于密度的方法 |
可以发现任意形状的簇 |
DBSCAN; OPTICS |
基于网格的方法 |
可以发现任意形状的簇 |
CLIQUE; STING |
3. 划分方法
假设数据集
D={x1,x2,...,xm},划分方法把
D中的对象分配到
k个簇
C1,C2,...,Ck中,使得对于
1≤i,j≤k,Ci⊂D且Ci∩Cj=∅。
3.1 K-means
K-means(K-均值)针对聚类算法的划分,最小化平方误差
E=i=1∑kx∈Ci∑dist(x,ci)
扫描二维码关注公众号,回复:
11346478 查看本文章
其中,
dist(x,ci)表示簇中的点与形心的欧氏距离,
ci为簇
Ci的形心(centroid)。
簇的形心为簇的中心点,可用簇的均值(或中心点等多种形式)定义:
ci=∣Ci∣1x∈Ci∑x算法流程如下:
从数据集
D中随机选择
k个对象作为簇的初始均值(形心)
ci,i={1,2,...,k}
repeate
- 根据样本
xj,j={1,2,...,m}与
ci,i={1,2,...,k}的距离,将
xi划入最近的形心所在簇
- 重新计算每个簇的均值,并更新(即重新选择簇的形心)
until 簇均值不再发生变化
- k-means算法的复杂度是
O(mkt),
m是样本数目,
k是簇的数目,
t是迭代次数。通常
k<<n,t<<n。
- k-means算法不适合发现非凸形的簇,或者大小差别很大的簇;此外对噪声和离群点敏感。
k-means算法由于k个均值的选择、相异度的计算、簇均值的计算策略上的不同有一些变种:
- k-modes(k-众数):使用簇众数代替簇均值来聚类标称数据,使用新的相异性度量,并使用基于频率的方法来更新簇的众数。
- K-Medians:Handing outliers.
- K-Means++:Choosing better initial centroid estimates.
- ** Kernel K-Means**:Detect non-convex clusters: project data onto high-dimensional kernel space
3.2 K-medoids
K-medoids(K-中心点)选择实际对象来代表簇,每个簇使用一个代表对象,其余对象被分配到最近的代表对象所在的簇中,以最小化绝对误差(absolute-error):
E=i=1∑kx∈Ci∑dist(x,oi)
其中,
dist(x,oi)表示簇中的点与代表对象的曼哈顿距离,
oi为簇
Ci的代表对象。
算法流程如下:
从数据集
D中随机选择
k个对象作为簇的代表对象
oi,i={1,2,...,k}
repeate
- 根据样本
xj,j={1,2,...,m}与
oi,i={1,2,...,k}的距离,将
xi划入最近的代表对象所在簇
- 随机选择一个非代表对象
orandom,计算代价函数
S=Eorandom−Eoi
- if
S<0, then
orandom 代替
oi,形成新的
k个代表对象的集合
until 不再发生变化
- k-medoids在数据存在噪声和离群点时,比k-means更鲁棒。
- k-medoids算法的复杂度是
O(tk(m−k)2),当
m和
k的值较大时,计算开销远高于k-means,难以应用于大数据集。
CLARA(Clustering LARge Application)
- 基于抽样的方法来处理大型数据集,有效性依赖于样本的大小
CLARANS(Clustering Large Application based upon RANdomized Search)
4. 层次方法
层次聚类方法(Hierarchical Method)可以分为算法方法、概率方法和贝叶斯方法。
4.1 算法方法
算法方法包括凝聚、分裂和多阶段方法,将数据对象看作确定性的,并根据对象之间的确定性距离计算簇。
(1)凝聚与分裂的层次聚类
- 凝聚的方法(自底向上的方法)
- 将每个对象作为单独的一组,然后逐次合并相近的对象或组,直到所有的组合并为一个组(层次的最顶层),或者满足某个终止条件
- AGNES(Agglomerative NESting)
- 分裂的方法(自顶向下的方法)
- 将所有对象置于一个簇中,在每次相继迭代中,一个簇被划分成更小的簇,直到最终每个对象在单独的一个簇中,或者满足某个终止条件
- DIANA(Divisive ANAlysis)
(2) 多阶段聚类
1)BIRCH(Balanced Iterative Reducing and Clustering using Hierarchies)
BIRCH算法为大量数值数据聚类设计,只需要单遍扫描数据集就能进行聚类,克服了凝聚聚类方法的两个困难:可伸缩性;不能撤销先前步骤所做的工作。
BIRCH使用聚类特征树(CF-Tree,Clustering Feature-Tree)来表示聚类的层次结构,每一个节点是由若干个聚类特征组成。
聚类特征本质是给定簇的统计汇总,定义如下
CF=<n,LS,SS>,其中
LS=∑i=1nxi,SS=∑i=1nxi2
聚类特征线性可加,对于两个不相交的簇
C1和
C2,
CF1=<n1,LS1,SS1>,
CF2=<n2,LS2,LS2>,合并
C1与
C2后的簇的聚类特征是
CF1+CF2=<n1+n2,LS1+LS2,SS1+SS2>
- CF-树是一颗高度平衡的树,存储了层次聚类的聚类特征。有两个参数
- 分支因子B:每个非叶节点的子女的最大数目
- 阈值参数T:存储在树的叶节点中的子簇的最大直径(CF中的所有样本点一定要在半径小于T的一个超球体内)
B=7, L=5, 内部节点最多有7个CF,而叶子节点最多有5个CF。
Birch算法的两个阶段:
- 扫描数据库,建立一颗存放于内存的初始CF-Tree,可以被看做数据的多层压缩。
- 采用某个(选定的)聚类算法对CF-Tree的叶节点进行聚类,把稀疏的簇当做离群点删除,把稠密的簇合并为更大的簇。
2)Chameleon
Chameleon是一种采用动态建模的多阶段层次聚类。
簇的相似性依据如下两点评估:簇中对象的连接情况;簇的临近性。如果两个簇的互联性都很高并且他们之间又靠得很紧就将其合并。在发现高质量的任意形状簇方面具有更强的能力。(K近邻图:选择欧式距离最近的k个点为近邻点,得到近邻图)。
4.2 概率方法
概率层次聚类旨在通过使用概率模型度量簇之间的距离。把待聚类的数据对象看做要分析的基础数据生成机制的一个样本,或生成模型(Generative model)。
聚类的任务是使用待聚类观测数据对象,尽可能准确地估计该生成模型。
一般假定该数据的生成模型采用常见的分布函数,如高斯分布或伯努利分布,它们由参数确定,学习生成模型的任务就归结为找出使模型最佳拟合观测数据集的参数值。
5. 基于密度的方法
划分和层次方法旨在发现球形簇,难以发现任意形状的簇,如下图的S形簇和椭圆形簇。
基于密度的聚类方法把簇看做数据空间中被稀疏区域分开的稠密区域,可以发现任意形状的簇。
5.1 DBSCAN
DBSCAN(Density-Based Spatial Clustering of Application with Noise)找出核心对象,通过连接核心对象和它们的邻域,形成稠密区域作为簇。
-
ϵ-邻域:对象
o的
ϵ-邻域是以
o为中心,以
ϵ为半径的空间。
- 核心对象:如果一个对象的
ϵ-邻域至少包含MinPts个对象,则该对象是核心对象(core object)。
聚类任务就是使用核心对象和他的邻域形成稠密区域,可以通过密度相连的闭包来发现连通的稠密区域作为簇。
- 密度直接可达(directly density-reachable):对于核心对象
p和
q,
p是从
q(关于
ϵ和
MinPts)直接密度可达的,如果
p在
q的
ϵ-邻域内。
- 密度可达(density-reachable):
p是从
q(关于
ϵ和MinPts)密度可达的,如果存在一个对象链条,
p1,p2,...,pn使得
p1=q,pn=q,并且对于
pi∈D(1≤i≤n),
pi+1是从
pi关于
ϵ和MinPts直接密度可达的。
- 密度相连(denstiy-connected):
p是从
q(关于
ϵ和MinPts)密度相连的,如果存在一个对象
q∈D,使得对象
p1和
p2都是从从
q(关于
ϵ和MinPts)密度可达的。
令
ϵ为给定圆的半径,
MinPts=3,则
m,p,o,r都是核心对象,因为
ϵ-邻域内至少包含3个对象。
- 对象
q是从
m直接密度可达的;对象
m是从
p直接密度可达的,并且象
p也是从
m直接密度可达的。
- 对象
q是从
p密度可达的,但
p并不是从
q密度可达,因为
q不是核心对象。
-
o、
r、
s都是密度相连的。
DBSCAN聚类的时候不需要预先指定簇的个数,最终的簇的个数不定。
5.2 OPTICS
DBSCAN把选择能产生可接受的聚类结果的参数值的责任留给用户,参数的设置通常依靠经验,大多数算法对这些参数值非常敏感;此外,现实的高维数据常常具有非常倾斜的分布,全局密度参数不能很好的刻画其内在的聚类结构。
OPTICS聚类分析方法,通过点排序识别聚类结构。它并不显式地产生数据集聚类,而是输出簇排序(cluster ordering)。这个排序是所有分析对象的线性表,并且代表了数据的基于密度的聚类结构,簇排序可以用了提取基本的聚类信息(如,簇中心或任意形状的簇),导出内在的聚类结构,提供聚类的可视化。
OPTICS与DBSCAN具有相同的时间复杂度,
O(n2);如果使用空间索引,则
O(nlogn)
6. 基于网格的方法
- 数据驱动:划分对象集并自动适应嵌入空间的数据分布(划分方法、层次方法、基于密度的方法)。
- 空间驱动:把嵌入空间划分成独立于输入对象的分布单元(基于网格的方法)。
基于网格的聚类方法使用一种多分辨率的网格数据结构,将对象空间量化成有限数目的单元,这些单元形成了网络结构,所有聚类操作都在该结构上进行。处理时间独立于数据对象数,仅依赖于量化空间中每一维上的单元数。
6.1 STING(STaticstical INformation Grid)
STING是一种基于网格的多分辨率的聚类技术,它将输入对象的空间区域划分成矩形单元。这种多层矩形单元对应不同级别的分辨率,并且形成一个层次结构;每个高层单元被划分为多个低一层的单元。关于每个网格单元的属性的统计信息(均值、最大值和最小值)被作为统计参数预先计算和存储。
STING的聚类质量取决于网格结构最底层的粒度。如果最底层的粒度很细,则处理代价会显著增加。如果粒度趋向于0,则趋向于DBSCAN的聚类结果。STING也可以看做基于密度的聚类方法。
6.2 CLIQUE(Clustering In QUEst)
CLIQUE是一种类似Apriori的子空间聚类方法,,用于发现子空间中的基于密度的簇。它把每个维划分成不重叠的区间,从而把数据对象的整个嵌入空间划分成单元,使用密度阈值识别稠密单元和稀疏单元,一个单元是稠密的,如果映射到它的对象数超过该密度阈值。
CLIQUE识别候选搜索空间的主要策略是使用稠密单元关于维度的单调性。
7. 聚类评估
聚类评估估计在数据集上进行聚类的可能性和被聚类方法产生的结果质量。
7.1 估计聚类趋势
数据集上的聚类分析是有意义的,仅当数据中存在非随机结构。
霍普金斯统计量(Hopkins Statistic):给定数据集
D,可以看做随机变量
o的一个样本,需要确定
o在多大程度上不同于数据空间的均匀分布。
-
Step1:均匀地从
D的空间中抽取
n个点,
p1,p2,...,pn。对于每个点
pi(1≤i≤n),找出
pi在
D中的最近邻,令
xi=mindist(pi,v),v∈D
-
Step2:均匀地从
D的空间中抽取
n个点,
q1,q2,...,qn。对于每个点
qi(1≤i≤n),找出
qi在
D−qi中的最近邻,令
yi=mindist(qi,v),v∈D,v=qi
-
Step3: 计算
H=∑i=1nxi+∑i=1nyi∑i=1nyi
如果
D是均匀分布的,则
∑i=1nxi与
∑i=1nyi会很接近,
H约等于0.5;当
D高度倾斜时,
∑i=1nyi将显著小于
∑i=1nxi,
H接近于0。
如果
H>0.5,则
D不大可能具有统计显著的簇。
7.2 确定簇数
合适的簇数可以控制适当的聚类分析粒度,在聚类分析的可压缩性与准确性之间寻找好的平衡点。
- 简单经验方法:对于n个点的数据集,设置簇数为
2n
。
- 肘方法(elbow method):使用簇内方差和关于簇数的曲线的拐点。
- 使用信息准则或信息论的方法
- 通过交叉验证确定
7.3 测定聚类质量
- 外在方法(extrinsic method):有可用的基准,比较聚类结果和基准,监督方法。
- 内在方法(intrinsic method):没有基准可用,考虑簇的分离情况,无监督方法。
(1)外在方法
- 簇的同质性(cluster homogeneity):聚类中的簇越纯,聚类越好。
- 簇的完全性(cluster completeness):(根据基准)属于相同类别的对象分配到相同的簇。
- 碎布袋(rag bag):把一个异种对象放入一个纯的簇中应该比放入碎布袋中受更大的处罚。
- 小簇保持性(small cluster preservation):如果小的类别在聚类中被划分成小片,则这些小片可能成为噪声,即把小类别划分成小片比将大类别划分成小片更有害。
BCubed
设
D={o1,o2,...,on}是对象的集合,
C是其中一个聚类。设
L(oi)(1≤i≤n)是基准确定的
oi的类别,
C(oi)是
C中
oi的cluster_ID。两个对象
oi和
oj(1≤i,j≤n,i=j)在聚类
C中的关系的正确性。
Correctness(oi,oj)={1ifL(oi)=L(oi)⇔C(oi)=C(oi)0otherwise
BCube精度反映同一个簇中有多少其他对象与该对象同属一个类别:
PrecisionBCube=n1i=1∑n∣∣oj∣i=j,C(oj)=C(oj)∣∣∑oj:i=j,C(oi)=C(oj)Correctness(oi,oj)
BCube召回率反映有多少同一类别的对象被分配在相同的簇:
RecallBCube=n1i=1∑n∣∣oj∣i=j,L(oj)=L(oj)∣∣∑oj:i=j,L(oi)=L(oj)Correctness(oi,oj)
(2)内在方法
轮廓系数(silhouette coefficient)度量数据集对象之间的相似性。
数据集
D={o1,o2,...,on}被划分为
k个簇
C1,...,Ck。
对于每个对象
o∈D,计算
o与所属簇的其他对象之间的平均距离:
a(o)=∣Ci∣−1∑o′∈Ci,o=o′dist(o,o′)
o与不属于该簇的其他对象之间的最小平均距离:
b(o)=min{∣Cj∣∑o′∈Cjdist(o,o′)},Cj:1≤j≤k,j=i
对象
o的轮廓系数:
s(o)=max{a(o),b(o)}b(o)−a(o)
a(o)反映
o所属簇的紧凑性,
b(o)反映
o与其他簇的分离程度。
轮廓系数的值在-1和1之间,当轮廓系数的值接近于1时表明包含
a(o)的簇是紧凑的,并且远离其他簇。
对于一个样本集合,轮廓系数是所有样本轮廓系数的平均值。
另外一个常用评估指标为Calinski-Harabaz Index:
s(k)=tr(Wk)tr(Bk)k−1m−k
其中,
m为样本数,
k为类别数,
Bk为类别之间的协方差矩阵,
Wk为类别内部数据的协方差矩阵,
tr为矩阵的迹。
类别内部数据的协方差越小越好,类别之间的协方差越大越好,Calinski-Harabasz分数会越高,聚类效果越好。
与轮廓系数的对比,Calinski-Harabasz Index的计算速度要快。