(1)什么是聚类?
聚类就是对大量未知标注的数据集,按照数据内部存在的数据特征将数据集划分为多个不同的类别,使类别内的数据比较相似,类别之间的数据相似度比较小,属于无监督学习。
聚类算法的重点是计算样本项之间的相似度,有时候也称为样本间的距离。
聚类算法和分类算法的区别:
(2)相似度/距离公式
d i s t ( X , Y ) = ∑ i = 1 n ∣ x i − y i ∣ p p dist(X, Y)=\sqrt[p]{\sum_{i=1}^n|x_i-y_i|^p} dist(X,Y)=pi=1∑n∣xi−yi∣p
X ∗ = X − X ‾ s s = ∑ i = 1 n ( s i − s ‾ ) 2 n S _ E _ D = ∑ i = 1 n ( x i − y i s i ) 2 \begin{aligned} X^{\ast}&=\frac{X-\overline{X}}{s} \\ s&=\sqrt{\frac{\sum_{i=1}^n(s_i-\overline{s})^2}{n}} \\ S\_E\_D&=\sqrt{\sum_{i=1}^n(\frac{x_i-y_i}{s_i})^2} \end{aligned} X∗sS_E_D=sX−X=n∑i=1n(si−s)2=i=1∑n(sixi−yi)2
a = ( x 11 , x 12 , … , x 1 n ) b = ( x 21 , x 22 , … , x 2 n ) cos ( θ ) = ∑ i = 1 n x 1 k x 2 k ∑ k = 1 n x 1 k 2 ⋅ ∑ k = 1 n x 2 k 2 = a T ⋅ b ∣ a ∣ ∣ b ∣ \begin{aligned} a&=(x_{11}, x_{12},\dots, x_{1n}) \\ b&=(x_{21}, x_{22},\dots, x_{2n}) \\ \cos(\theta)&=\frac{\sum_{i=1}^nx_{1k}x_{2k}}{\sqrt{\sum_{k=1}^nx_{1k}^2}\cdot\sqrt{\sum_{k=1}^nx_{2k}^2}} &=\frac{a^T\cdot b}{|a||b|} \end{aligned} abcos(θ)=(x11,x12,…,x1n)=(x21,x22,…,x2n)=∑k=1nx1k2⋅∑k=1nx2k2∑i=1nx1kx2k=∣a∣∣b∣aT⋅b
D ( P ∣ ∣ Q ) = ∑ x P ( x ) log ( P ( x ) Q ( x ) ) D(P||Q)=\sum_xP(x)\log(\frac{P(x)}{Q(x)}) D(P∣∣Q)=x∑P(x)log(Q(x)P(x))
J ( A , B ) = ∣ A ⋂ B ∣ ∣ A ⋃ B ∣ d i s t ( A , B ) = 1 − J ( A , B ) = ∣ A ⋃ B ∣ − ∣ A ⋂ B ∣ ∣ A ⋃ B ∣ \begin{aligned} J(A, B)&=\frac{|A\bigcap B|}{|A\bigcup B|} \\ dist(A, B)&=1-J(A, B) \\ &=\frac{|A\bigcup B|-|A\bigcap B|}{|A\bigcup B|} \end{aligned} J(A,B)dist(A,B)=∣A⋃B∣∣A⋂B∣=1−J(A,B)=∣A⋃B∣∣A⋃B∣−∣A⋂B∣
ρ X Y = C o v ( X , Y ) D ( X ) ⋅ D ( Y ) = E ( X − E ( X ) ) ( Y − E ( Y ) ) D ( X ) ⋅ D ( Y ) = ∑ i = 1 n ( X i − μ X ) ( Y i − μ Y ) ∑ i = 1 n ( X i − μ X ) 2 ⋅ ∑ i = 1 n ( Y i − μ Y ) 2 d i s t ( X , Y ) = 1 − ρ X Y \begin{aligned} \rho_{XY}&=\frac{Cov(X,Y)}{\sqrt{D(X)}\cdot\sqrt{D(Y)}} \\ &=\frac{E{(X-E(X))(Y-E(Y))}}{\sqrt{D(X)}\cdot\sqrt{D(Y)}} \\ &=\frac{\sum_{i=1}^n(X_i-\mu_X)(Y_i-\mu_Y)}{\sqrt{\sum_{i=1}^n(X_i-\mu_X)^2}\cdot\sqrt{\sum_{i=1}^n(Y_i-\mu_Y)^2}} \\ dist(X,Y)&=1-\rho_{XY} \end{aligned} ρXYdist(X,Y)=D(X)⋅D(Y)Cov(X,Y)=D(X)⋅D(Y)E(X−E(X))(Y−E(Y))=∑i=1n(Xi−μX)2⋅∑i=1n(Yi−μY)2∑i=1n(Xi−μX)(Yi−μY)=1−ρXY
(3)聚类的思想
给定一个有M个对象的数据集,构建一个具有k个簇的模型,其中k<=M。满足以下条件:
将满足上述条件的k个簇称为一个合理的聚类划分。
对于给定的类别数目k,首先给定初始划分,通过迭代改变样本和簇的隶属关系,使得每次处理后得到的划分方式比上一次的好(总的数据集之间的距离和变小了)。
(1)K-Means算法的原理
K-Means算法,也称为K-平均或者K-均值,是一种使用广泛的最基础的聚类算法,一般作为掌握聚类算法的第一个算法。
假设输入样本为 T = X 1 , X 2 , . . . , X m T=X_1, X_2 ,..., X_m T=X1,X2,...,Xm,则算法步骤为(使用欧几里得距离公式):
中止条件:迭代次数大于阈值,或者最小平方误差MSE小于阈值,或者簇中心点变化率小于阈值。
最小平方误差:
M S E = arg min 1 ≤ j ≤ k ∑ i = 1 n ( x i − a j ) 2 MSE=\arg\min_{1\le j\le k}{\sqrt{\sum_{i=1}^n(x_i-a_j)^2}} MSE=arg1≤j≤kmini=1∑n(xi−aj)2
簇中心点变化率:
a j = 1 N ( c j ) ∑ i ∈ c j x j a_j=\frac{1}{N(c_j)}\sum_{i\in c_j}x_j aj=N(cj)1i∈cj∑xj
记K个簇中心分别为 a 1 , a 2 , … a k a_1, a_2,\dots a_k a1,a2,…ak,每个簇的样本数量为 N 1 , N 2 , … , N K N_1, N_2,\dots,N_K N1,N2,…,NK,使用欧几里得距离公式,平方误差作为目标函数,目标函数公式为:
J ( a 1 , a 2 , … , a k ) = 1 2 ∑ j = 1 K ∑ i = 1 n ( x i − a j ) 2 J(a_1, a_2, \dots, a_k)=\frac{1}{2}\sum_{j=1}^K\sum_{i=1}^n(x_i-a_j)^2 J(a1,a2,…,ak)=21j=1∑Ki=1∑n(xi−aj)2
要获取最优解,也就是目标函数需要尽可能的小,对J函数求偏导数,可以得到簇中心点a更新的公式为:
∂ J ∂ a j = ∑ i = 1 n ( x i − a j ) 令 → 0 ⇒ a j = 1 N j ∑ i = 1 N j x j \begin{aligned} \frac{\partial J}{\partial a_j}&=\sum_{i=1}^n(x_i-a_j)\underrightarrow{令} 0 \\ \Rightarrow a_j&=\frac{1}{N_j}\sum_{i=1}^{N_j}x_j \end{aligned} ∂aj∂J⇒aj=i=1∑n(xi−aj)令0=Nj1i=1∑Njxj
K-Means算法在迭代的过程中使用所有点的均值作为新的质点(中心点),如果簇中存在异常点,将导致均值偏差比较严重。比如一个簇中有2、4、6、8、100五个数据,那么新的质点为24,显然这个质点离绝大多数点都比较远。在当前情况下,使用中位数6可能比使用均值更好,使用中位数的聚类方式叫做K-Mediods聚类(K中值聚类)。
K-Means算法是初值敏感的,选择不同的初始值可能导致不同的簇划分规则。为了避免这种敏感性导致的最终结果异常性,可以采用初始化多套初始点构造不同的分类规则,然后选择最优的构造规则。
(2)K-Means算法的优缺点
优点:
缺点:
(3)二分K-Means算法
二分K-Means解决K-Means算法对初始簇心比较敏感的问题,二分K-Means算法是一种弱化初始质心的算法。具体思路步骤如下:
从队列中选择划分聚簇的规则一般有两种方式,分别如下:
(4)K-Means++算法
解决K-Means算法对初始簇心比较敏感的问题,K-Means++算法和K-Means算法的区别主要在于初始的K个中心点的选择方面。K-Means算法使用随机给定的方式,K-Means++算法采用下列步骤给定K个初始质点:
K-Means++算法的缺点:由于聚类中心点选择过程中的内在有序性,在扩展方面存在着性能方面的问题,即第k个聚类中心点的选择依赖前k-1个聚类中心点的值。
(5)K-Means||算法
解决K-Means++算法缺点而产生的一种算法,主要思路是改变每次遍历时候的取样规则,并非按照K-Means++算法每次遍历只获取一个样本,而是每次获取K个样本,重复该取样操作O(logn)次,然后再将这些抽样出来的样本聚类出K个点,最后使用这K个点作为K-Means算法的初始聚簇中心点。实践证明:一般5次重复采样就可以保证一个比较好的聚簇中心点。
(6)Canopy算法
1)Canopy算法的原理
Canopy算法属于一种“粗”聚类算法,执行速度较快,但精度较低,算法执行
步骤如下:
Canopy算法得到的最终结果,聚簇之间是可能存在重叠的,但是不会存在某个对象不属于任何聚簇的情况。
2)Canopy算法常用应用场景
由于K-Means算法存在初始聚簇中心点敏感的问题,常用使用Canopy+K-Means算法混合形式进行模型构建。先使用Canopy算法进行“粗”聚类得到K个聚类中心点,K-Means算法使用Canopy算法得到的K个聚类中心点作为初始中心点,进行“细”聚类。
3)Canopy算法优点
(7)Mini Batch K-Means算法
Mini Batch K-Means算法是K-Means算法的一种优化变种,采用小规模的数据子集,每次训练使用的数据集是在训练算法的时候随机抽取的数据子集,以减少计算时间,同时试图优化目标函数。Mini Batch K-Means算法可以减少K-Means算法的收敛时间,而且产生的结果的效果只是略差于标准K-Means算法。
Mini Batch K-Means算法步骤如下:
(1)均一性
一个簇中只包含一个类别的样本,则满足均一性。也可以认为就是正确率(每个聚簇中正确分类的样本数占该聚簇总样本数的比例和)。
p = 1 k ∑ i = 1 k N ( C i = = K i ) N ( K i ) p=\frac{1}{k}\sum_{i=1}^k\frac{N(C_i==K_i)}{N(K_i)} p=k1i=1∑kN(Ki)N(Ci==Ki)
(2)完整性
同类别样本被归类到相同簇中,则满足完整性。每个聚簇中正确分类的样本数占该类型的总样本数比例的和。
r = 1 k ∑ i = 1 k N ( C i = = K i ) N ( C i ) r=\frac{1}{k}\sum_{i=1}^k\frac{N(C_i==K_i)}{N(C_i)} r=k1i=1∑kN(Ci)N(Ci==Ki)
(3)V-measure
均一性和完整性的加权平均。
v β = ( 1 + β 2 ) ⋅ p r β 2 ⋅ p + r v_\beta=\frac{(1+\beta^2)\cdot pr}{\beta^2\cdot p+r} vβ=β2⋅p+r(1+β2)⋅pr
(4)Rand index(兰德指数,RI)
RI取值范围为[0,1],值越大意味着聚类结果与真实情况越吻合。
R I = a + b c 2 n s a m p l e s RI=\frac{a+b}{c_2^{n_{samples}}} RI=c2nsamplesa+b
其中C表示实际类别信息,K表示聚类结果,a表示在C与K中都是同类别的元素的对数,b表示在C与K中都是不同类别的元素的对数, c 2 n s a m p l e s c_2^{n_{samples}} c2nsamples表示数据集中可以组成的对数。
(5)调整兰德系数(ARI,Adjusted Rnd Index)
ARI取值范围为[-1,1],值越大表示聚类结果和真实情况越吻合。从广义的角度来讲,ARI是衡量两个数据分布的吻合程度的。
A R I = R I − E [ R I ] max ( R I ) − E ( R I ) ARI=\frac{RI-E[RI]}{\max{(RI)}-E(RI)} ARI=max(RI)−E(RI)RI−E[RI]
(6)轮廓系数
簇内不相似度:计算样本i到同簇其它样本的平均距离 a i a_i ai, a i a_i ai越小,表示样本i越应该被聚类到该簇,簇C中的所有样本的 a i a_i ai的均值被称为簇C的簇不相似度。
簇间不相似度:计算样本i到其它簇 C j C_j Cj的所有样本的平均距离 b i j b_{ij} bij, b i = min { b i 1 , b i 2 , … , b i k } b_i=\min\{b_{i1}, b_{i2},\dots, b_{ik}\} bi=min{bi1,bi2,…,bik}, b i b_i bi越大,表示样本i越不属于其它簇。
轮廓系数: s i s_i si值越接近1表示样本i聚类越合理,越接近-1,表示样本i应该分类到另外的簇中,近似为0,表示样本i应该在边界上。所有样本的 s i s_i si的均值被称为聚类结果的轮廓系数。
s ( i ) = b ( i ) − a ( i ) max { a ( i ) , b ( i ) } s ( i ) = { 1 − a ( i ) b ( i ) , a ( i ) < b ( i ) 0 , a ( i ) = b ( i ) b ( i ) a ( i ) − 1 , a ( i ) > b ( i ) \begin{aligned} s(i)&=\frac{b(i)-a(i)}{\max\{a(i), b(i)\}} \\ s(i)&=\begin{cases}1-\frac{a(i)}{b(i)}, &a(i)\lt b(i) \\ 0, &a(i)=b(i) \\ \frac{b(i)}{a(i)}-1, &a(i)\gt b(i)\end{cases} \end{aligned} s(i)s(i)=max{a(i),b(i)}b(i)−a(i)=⎩⎪⎨⎪⎧1−b(i)a(i),0,a(i)b(i)−1,a(i)<b(i)a(i)=b(i)a(i)>b(i)
(1)传统的层次聚类算法
层次聚类方法对给定的数据集进行层次的分解,直到满足某种条件为止。传统的层次聚类算法主要分为两大类算法:
AGNES算法中的簇间距离:
AGNES和DIANA算法的优缺点:
(2)BIRCH算法(平衡迭代削减聚类法)
BIRCH算法的聚类特征使用3元组记录一个簇的相关信息,通过构建满足分枝因子和簇直径限制的聚类特征树来求聚类。聚类特征树其实是一个具有两个参数分枝因子和类直径的高度平衡树。分枝因子规定了树的每个节点的子女的最多个数,而类直径体现了对这一类点的距离范围。非叶子节点为它的子女的最大特征值。聚类特征树的构建可以是动态过程的,可以随时根据数据对模型进行更新操作。
BIRCH算法的优缺点:
(3)CURE算法(使用代表点的聚类法)
CURE算法先把每个数据点看成一类,然后合并距离最近的类直至类个数为所要求的个数为止。但是和AGNES算法的区别是:取消了使用所有点或用中心点+距离来表示一个类,而是从每个类中抽取固定数量、分布较好的点作为此类的代表点,并将这些代表点乘以一个适当的收缩因子,使它们更加靠近类中心点。代表点的收缩特性可以调整模型可以匹配那些非球形的场景,而且收缩因子的使用可以减少噪音对聚类的影响。
CURE算法的优缺点:
密度聚类方法的指导思想:只要样本点的密度大于某个阈值,则将该样本添加到最近的簇中。这类算法可以克服基于距离的算法只能发现凸聚类的缺点,可以发现任意形状的聚类,而且对噪声数据不敏感。但是计算复杂度高,计算量大。
常用密度聚类算法:
(1)DBSCAN算法
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法,相比于基于划分的聚类方法和层次聚类方法,DBSCAN算法将簇定义为密度相连的点的最大集合,能够将足够高密度的区域划分为簇,并且在具有噪声的空间数据上能够发现任意形状的簇。
DBSCAN算法的核心思想是:用一个点的ε邻域内的邻居点数衡量该点所在空间的密度,该算法可以找出形状不规则的cluster,而且聚类的时候事先不需要给定cluster的数量。
ε邻域(ε neighborhood,也称为Eps),给定对象在半径ε内的区域。
N ε ( x ) = { y ∈ X : d i s t ( x , y ) ≤ ε } N_\varepsilon(x)=\{y\in X:dist(x,y)\le\varepsilon\} Nε(x)={y∈X:dist(x,y)≤ε}
ε邻域中x的密度是一个整数值,依赖于半径ε。
p ( x ) = ∣ N ε ( x ) ∣ p(x)=|N_\varepsilon(x)| p(x)=∣Nε(x)∣
MinPts定义核心点的阈值,简记为M。
如果p(x)>=M,那么称x为X的核心点。记由X中所有核心点构成的集合为 X c X_c Xc,并记 X n c = X ∖ X c X_{nc}=X\setminus X_c Xnc=X∖Xc表示由X中所有非核心点构成的集合。直白来讲,核心点对应于稠密区域内部的点。
如果非核心点x的ε邻域中存在核心点,那么认为x为X的边界点。由X中所有的边界点构成的集合为 X b d X_{bd} Xbd。直白来讲,边界点对应稠密区域边缘的点。
x ∈ X n c ∃ y ∈ X y ∈ N ε ( x ) ∩ X c x\in X_{nc} \\ \exists y\in X \\ y\in N_\varepsilon(x)\cap X_c x∈Xnc∃y∈Xy∈Nε(x)∩Xc
集合中除了边界点和核心点之外的点都是噪音点,所有噪音点组成的集合叫做 X n o i X_{noi} Xnoi。直白来讲,噪音点对应稀疏区域的点。
X n o i = X ∖ ( X c ⋃ X b d ) X_{noi}=X\setminus (X_c\bigcup X_{bd}) Xnoi=X∖(Xc⋃Xbd)
给定一个对象集合X,如果y是在x的ε邻域内,而且x是一个核心对象,可以说对象y从对象x出发是直接密度可达的。
x , y ∈ X x ∈ X c , y ∈ N ε ( x ) x,y\in X \\ x\in X_c, y\in N_\varepsilon(x) x,y∈Xx∈Xc,y∈Nε(x)
如果存在一个对象链 p 1 , p 2 , … p m p_1, p_2,\dots p_m p1,p2,…pm,如果满足 p i + 1 p _{i+1} pi+1是从 p i p_i pi直接密度可达的,那么称 p m p_m pm是从 p 1 p_1 p1密度可达的。
在集合X中,如果存在一个对象o,使得对象x和y是从o关于ε和m密度可达的,那么对象x和y是关于ε和m密度相连的。
一个基于密度的簇是最大的密度相连对象的集合C。满足以下两个条件:
(2)密度最大值聚类算法(MDCA)
MDCA(Maximum Density Clustering Application)算法基于密度的思想引入划分聚类中,使用密度而不是初始点作为考察簇归属情况的依据,能够自动确定簇数量并发现任意形状的簇。另外MDCA一般不保留噪声,因此也避免了阈值选择不当情况下造成的对象丢弃情况。
MDCA算法的基本思路是寻找最高密度的对象和它所在的稠密区域。MDCA算法在原理上来讲,和密度的定义没有关系,采用任意一种密度定义公式均可,一般情况下采用DBSCAN算法中的密度定义方式。
x m a x = { x ∣ x ∈ X ; ∀ y ∈ X , d e n s i t y ( x ) ≥ d e n s i t y ( y ) } x_{max}=\{x|x\in X; \forall y\in X, density(x)\ge density(y)\} xmax={x∣x∈X;∀y∈X,density(x)≥density(y)}
根据所有对象与 p m a x p_{max} pmax的距离对数据重新排序。
S p m a x = { x 1 , x 2 , … , x n ∣ d i s t ( x m a x , x 1 ) ≤ d i s t ( x m a x , x 2 ) ≤ ⋯ ≤ d i s t ( x m a x , x n ) } S_{p_{max}}=\{x_1, x_2, \dots, x_n|dist(x_{max}, x_1)\le dist(x_{max}, x_2)\le\dots\le dist(x_{max}, x_n)\} Spmax={x1,x2,…,xn∣dist(xmax,x1)≤dist(xmax,x2)≤⋯≤dist(xmax,xn)}
当节点的密度值大于密度阈值的时候,认为该节点属于一个比较固定的簇,在第一次构建基本簇的时候,就将这些节点添加到对应簇中,如果小于这个值的时候,暂时认为该节点为噪声节点。
对于两个簇 C 1 C_1 C1和 C 2 C_2 C2之间的距离,采用两个簇中最近两个节点之间的距离作为簇间距离。
d i s t ( C 1 , C 2 ) = min ( d i s t ( p , q ) ) ; p ∈ C 1 , q ∈ C 2 dist(C_1, C_2)=\min(dist(p, q)); p\in C_1, q\in C_2 dist(C1,C2)=min(dist(p,q));p∈C1,q∈C2
当两个簇的簇间距离小于给定阈值的时候,这两个簇的结果数据会进行合并操作。
初始簇中最多数据样本个数。
(1)谱聚类基本概念
谱聚类是基于谱图理论基础上的一种聚类方法,与传统的聚类方法相比,具有在任意形状的样本空间上聚类并且收敛于全局最优解的优点。
通过对样本数据的拉普拉斯矩阵的特征向量进行聚类,从而达到对样本数据进行聚类的目的。其本质是将聚类问题转换为图的最优划分问题,是一种点对聚类算法。
谱聚类算法将数据集中的每个对象看做图的顶点V,将顶点间的相似度量化为相应顶点连接边E的权值w,这样就构成了一个基于相似度的无向加权图G(V,E),于是聚类问题就转换为图的划分问题。基于图的最优划分规则就是子图内的相似度最大,子图间的相似度最小。
(2)谱聚类的构建过程
(3)拉普拉斯矩阵变形
拉普拉斯矩阵:
L = D − W L=D-W L=D−W
对称拉普拉斯矩阵:
L s y m = D − 1 2 ( D − W ) D − 1 2 = I − D − 1 2 W D − 1 2 \begin{aligned} L_{sym}&=D^{-\frac{1}{2}}(D-W)D^{-\frac{1}{2}} \\ &=I-D^{-\frac{1}{2}}WD^{-\frac{1}{2}} \end{aligned} Lsym=D−21(D−W)D−21=I−D−21WD−21
随机游走拉普拉斯矩阵:
L r w = D − 1 ( D − W ) L_{rw}=D^{-1}(D-W) Lrw=D−1(D−W)
(4)谱聚类应用场景及面临的问题
应用场景:
面临的问题: