1 聚类任务
在无监督学习中,获取的数据集是没有label信息的,无监督学习的目的是对无label的数据集进行学习以揭示数据内部的性质及规律,为进一步的数据分析提供基础。
聚类是最常见的无监督学习任务。
聚类的目的是试图将数据集中的样本分成若干个不相交的子集,每一个子集称为一个簇,每个簇对应一个潜在的概念,如“浅色瓜”“无籽瓜”等。但是要注意的是,每个簇的概念是由使用者来定义的,聚类算法只是将具有形似性质的样本聚类成簇,而不同簇表示的含义对聚类算法而言是未知的。
形式化的定义聚类过程,就是对于无标记的数据集D={x1,x2,⋯ ,xm},xi∈RnD = \{x_1,x_2,\cdots,x_m\},x_i\in R^nD={x1,x2,⋯,xm},xi∈Rn,经过聚类之后形成k个不相交的簇{Cl∣l=1,2,⋯ ,k}\{C_l|l=1,2,\cdots,k\}{Cl∣l=1,2,⋯,k},其中⋃i=1kCi=D,Cl⋂Cl′=∅ (l≠l′)\bigcup_{i=1}^{k}C_i = D,C_l \bigcap C_{l^{'}} = \empty~(l \neq l^{'})⋃i=1kCi=D,Cl⋂Cl′=∅ (l̸=l′)。
聚类可以作为单独的应用,用于发掘数据的内在结构。也可以用作其他应用的前驱过程,例如在一些商业应用中,往往先对用户类型聚类成簇之后,再对新用户的类型进行判别。
2 聚类度量
聚类度量是表述聚类结果好坏的标准。
对聚类结果,总体而言,是希望属于同一簇的样本尽可能相似,属于不同簇的样本差距尽可能大,也就是希望达到“簇内相似度高”、“簇间相似度低”的效果。
聚类度量可以分为两类,一类是有外部参考结果的外部指标;另一类是无外部参考结果的内部指标。
2.1 外部指标
数据集D={x1,x2,⋯ ,xm}D = \{x_1,x_2,\cdots,x_m\}D={x1,x2,⋯,xm},通过聚类给出簇划分C={C1,C2,⋯ ,Ck}C=\{C_1,C_2,\cdots,C_k\}C={C1,C2,⋯,Ck},外部参考模型给出的簇划分结果为C∗={C1∗,C2∗,⋯ ,Cs∗}C^*=\{C^*_1,C^*_2,\cdots,C^*_s\}C∗={C1∗,C2∗,⋯,Cs∗},令λ\lambdaλ和λ∗\lambda^*λ∗分别表示CCC与C∗C^*C∗对应的簇标记向量。将样本两两配对,定义:
a=∣SS∣,SS={(xi,xj)∣λi=λj,λi∗=λj∗,i<j} b=∣SD∣,SD={(xi,xj)∣λi=λj,λi∗≠λj∗,i<j} c=∣DS∣,DS={(xi,xj)∣λi≠λj,λi∗=λj∗,i<j} d=∣DD∣,DD={(xi,xj)∣λi≠λj,λi∗≠λj∗,i<j}a=|SS|,SS=\{(x_i,x_j)|\lambda_i=\lambda_j,\lambda^*_i=\lambda^*_j,i<j\}\\~b=|SD|,SD=\{(x_i,x_j)|\lambda_i=\lambda_j,\lambda^*_i\neq \lambda^*_j,i<j\}\\~c=|DS|,DS=\{(x_i,x_j)|\lambda_i\neq\lambda_j,\lambda^*_i= \lambda^*_j,i<j\}\\~~d=|DD|,DD=\{(x_i,x_j)|\lambda_i\neq\lambda_j,\lambda^*_i\neq \lambda^*_j,i<j\}a=∣SS∣,SS={(xi,xj)∣λi=λj,λi∗=λj∗,i<j} b=∣SD∣,SD={(xi,xj)∣λi=λj,λi∗̸=λj∗,i<j} c=∣DS∣,DS={(xi,xj)∣λi̸=λj,λi∗=λj∗,i<j} d=∣DD∣,DD={(xi,xj)∣λi̸=λj,λi∗̸=λj∗,i<j}
a表示的是聚类算法判别为同一类且参考模型也判别为同一类的样本对数;b表示的是聚类算法判别为同一类但参考模型也判别为不同类的样本对数;c表示的是聚类算法判别为不同类但参考模型也判别为同一类的样本对数;d表示的是聚类算法判别为不同类且参考模型也判别为不同类的样本对数。由于每一个样本对只能出现在abcd某一个之中,因此有a+b+c+d=m(m-1)/2。
常见的聚类性能度量外部指标有:
Jaccard系数:
JC=aa+b+cJC = \frac{a}{a+b+c}JC=a+b+ca
FM指数:
FMI=aa+baa+cFMI = \sqrt{\frac{a}{a+b}\frac{a}{a+c}}FMI=a+baa+ca
Rand指数:
RI=2(a+d)m(m−1)RI = \frac{2(a+d)}{m(m-1)}RI=m(m−1)2(a+d)
上述三个指标取值范围都是[0,1][0,1][0,1],值越大越好。
2.2 内部指标
考虑聚类结果的簇划分C={C1,C2,⋯ ,Ck}C=\{C_1,C_2,\cdots,C_k\}C={C1,C2,⋯,Ck},定义
avg(C)=2∣C∣(∣C∣−1)∑1≤i<j≤∣c∣dist(xi,xj)diam(C)=max1≤i<j≤∣C∣dist(xi,xj)dmin(Ci,Cj)=minxi∈Ci,xj∈Cjdist(xi,xj)dcen(Ci,Cj)=dist(ui,uj)avg(C) = \frac{2}{|C|(|C|-1)}\sum_{1\leq i<j\leq|c|}dist(x_i,x_j) \\
diam(C) = max_{1 \leq i < j \leq |C|}dist(x_i,x_j) \\
d_{min}(C_i,C_j) = min_{x_i \in C_i,x_j \in C_j}dist(x_i,x_j) \\
d_{cen}(C_i,C_j) = dist(u_i,u_j)avg(C)=∣C∣(∣C∣−1)21≤i<j≤∣c∣∑dist(xi,xj)diam(C)=max1≤i<j≤∣C∣dist(xi,xj)dmin(Ci,Cj)=minxi∈Ci,xj∈Cjdist(xi,xj)dcen(Ci,Cj)=dist(ui,uj)
dist()用于计算两个样本之间的距离;u表示聚类簇C的中心点位置。上述定义中,avg©表示某一聚类簇内部样本点距离的均值;diam©表示聚类簇C中样本间的最大距离;dmin(Ci,Cj)d_{min}(C_i,C_j)dmin(Ci,Cj)表示聚类簇CiC_iCi与CjC_jCj间的最小样本距离;dcen(Ci,Cj)d_{cen}(C_i,C_j)dcen(Ci,Cj)对应于簇CiC_iCi与CjC_jCj中心点之间的距离。
常用的聚类性能度量内部指标有:
DB指数:
DBI=1k∑i=1kmaxj≠i(avg(Ci)+avg(Cj)dcen(ui,uj))DBI = \frac{1}{k}\sum_{i=1}^{k}max_{j \neq i}(\frac{avg(C_i)+avg(C_j)}{d_{cen}(u_i,u_j)})DBI=k1i=1∑kmaxj̸=i(dcen(ui,uj)avg(Ci)+avg(Cj))
Dumn指数:
DI=min1≤i≤k{minj≠i(dmin(Ci,Cj)max1≤l≤kdiam(Cl))}DI = min_{1\leq i\leq k}\{min_{j \neq i }(\frac{d_{min}(C_i,C_j)}{max_{1\leq l \leq k }diam(C_l)})\}DI=min1≤i≤k{minj̸=i(max1≤l≤kdiam(Cl)dmin(Ci,Cj))}
DBI的值越大越好,DI的值越小越好。
3 距离计算
对于函数dist(,),若其为一个“距离度量”,则需满足一些基本性质:
非负性:dist(xi,xj)≥0dist(x_i,x_j) \geq 0dist(xi,xj)≥0;
同一性:dist(xi,xj)=0dist(x_i,x_j) = 0dist(xi,xj)=0当前仅当xi=xjx_i = x_jxi=xj;
对称性:dist(xi,xj)=dist(xj,xi)dist(x_i,x_j) = dist(x_j,x_i)dist(xi,xj)=dist(xj,xi);
直递性:dist(xi,xj)≤dist(xi,xk)+dist(xk,xj)dist(x_i,x_j) \leq dist(x_i,x_k) + dist(x_k,x_j)dist(xi,xj)≤dist(xi,xk)+dist(xk,xj)(三角不等式)
给定样本xi=(xi1,xi2,⋯ ,xin)x_i = (x_{i1},x_{i2},\cdots,x_{in})xi=(xi1,xi2,⋯,xin)和xj=(xj1,xj2,⋯ ,xjn)x_j = (x_{j1},x_{j2},\cdots,x_{jn})xj=(xj1,xj2,⋯,xjn),最常用的是“闵可夫斯基距离”。
distmk(xi,xj)=(∑u=1n(xiu−xju)p)1pdist_{mk}(x_i,x_j) = (\sum_{u=1}^{n}(x_{iu}-x_{ju})^p)^{\frac{1}{p}}distmk(xi,xj)=(u=1∑n(xiu−xju)p)p1
当P=1时,称之为“曼哈顿距离”,也叫“街区距离”;当P=2时,即为“欧氏距离”。
属性可以分为“连续属性”和“无序属性”,例如{1,2,3}中不同的元素之间可以直接计算距离,称之为连续属性;而{飞机、轮船、汽车}无法直接计算距离,称之为“无序属性”。
闵可夫斯基距离同样可用于无序属性。
对无序属性可采用VDM(Value Difference Metric)。令mu,am_{u,a}mu,a表示在属性u上取值为a的样本数,mu,a,im_{u,a,i}mu,a,i表示在第i个样本簇中在属性u上取值为a的样本数,k为样本簇数,则属性u上两个离散值a与b之间的VDM距离为:
VDMp(a,b)=∑i=1k∣mu,a,imu,a−mu,b,imu,b∣VDM_p(a,b) = \sum_{i=1}^{k}|\frac{m_{u,a,i}}{m_{u,a}} - \frac{m_{u,b,i}}{m_{u,b}}|VDMp(a,b)=i=1∑k∣mu,amu,a,i−mu,bmu,b,i∣
将闵可夫斯基距离与VDM结合可用来处理混合属性,假定有ncn_cnc个有序属性、n−ncn-n_cn−nc个无序属性,不失一般性,假设有序属性排列在无序属性之前,则
MinkovDMp(xi,xj)=(∑u=1nc∣xiu−xju∣p+∑u=nc+1nVDMp(xiu,xju))1pMinkovDM_p(x_i,x_j) = (\sum_{u=1}^{n_c}|x_{iu}-x_{ju}|^p+\sum_{u=n_c+1}^{n}VDM_p(x_{iu},x_{ju}))^{\frac{1}{p}}MinkovDMp(xi,xj)=(u=1∑nc∣xiu−xju∣p+u=nc+1∑nVDMp(xiu,xju))p1
当样本空间中不同属性的重要性不同时,还可使用加权距离,以闵可夫斯基距离为例:
distwmk(xi,xj)=(w1∣xi1−xj1∣p+⋯+wn∣xin−xjn∣p)1pdist_{wmk}(x_i,x_j) = (w_1|x_{i1}-x_{j1}|^p + \cdots + w_n|x_{in}-x_{jn}|^p)^{\frac{1}{p}}distwmk(xi,xj)=(w1∣xi1−xj1∣p+⋯+wn∣xin−xjn∣p)p1
wi≥0 and ∑i=1nwi=1w_i \geq 0 ~~and~~ \sum_{i=1}^{n}w_i = 1wi≥0 and ∑i=1nwi=1.
一般情况下,我们基于距离度量来定义相似度,距离越大,相似度越小。
4 聚类算法
4.1 原型聚类
原型聚类假设聚类结构能够通过一组原型刻画,算法通常先对原型进行初始化,然后对原型进行迭代更新求解。
常见的原型聚类有k均值算法、学习向量量化和高斯混合聚类等。
4.1.1 k均值算法
给定样本集D={x1,x2,⋯ ,xm}D = \{x_1,x_2,\cdots,x_m\}D={x1,x2,⋯,xm},k均值算法针对聚类所得簇划分C={C1,C2,⋯ ,Ck}C = \{C_1,C_2,\cdots,C_k\}C={C1,C2,⋯,Ck}最小化平方误差
E=∑i=1k∑x∈Ci∣∣x−ui∣∣2E = \sum_{i=1}^{k}\sum_{x \in C_i}||x - u_i||^2E=i=1∑kx∈Ci∑∣∣x−ui∣∣2
ui=1∣Ci∣∑x∈Cixu_i = \frac{1}{|C_i|}\sum_{x \in C_i}xui=∣Ci∣1∑x∈Cix是簇CiC_iCi的均值向量。
直观来看,k均值算法在一定程度上刻画了簇内样本围绕簇均值向量的紧密程度,E值越小则簇内样本相似度越高。
最小化上式并不容易,需要考察样本集D所有可能的簇划分,是一个NP难的问题。k均值算法采用贪心策略,通过迭代优化来近似求解式子。
k均值算法的流程如下所示:
为了避免运行时间过长,通常会设置一个最大迭代次数或最小调整幅度阈值,若达到最大迭代次数或者调整幅度小于设定的阈值则停止迭代,完成聚类。
k均值算法无法自适应的决定应该划分的簇数,需要预先设定k值,一般是基于不同的k值多次运行聚类算法之后选取最佳结果;另外,初始聚类中心点的选择对聚类结果也存在一定的影响,可以通过多次运行k均值算法选取最好的聚类结果;k均值算法需要不断的进行样本与中心点的距离计算及不断的更新中心点位置,在数据集规模较大时,k均值算法的计算量较大。
二分K-均值算法
为了克服K均值算法收敛于局部最小解的问题,有人提出了二分K-均值算法。该算法首先将所有点作为一个簇,然后将该簇一分为二。之后选择一个簇继续进行划分,选择哪一个簇进行划分取决于对其划分是否能够最大限度的降低SSE的值。上述基于SSE的划分过程不断重复,直到得到用户指定的簇数目为止。
SSE,sum of squared error,误差平方和。通过计算一个簇中各样本点距离簇中心的距离平方和得到。
4.1.2 学习向量量化
学习向量量化(Learning Vector Quantization,LVQ)也是试图找到一组原型向量来刻画聚类结构。但与一般聚类算法不同的是,LVQ假设数据样本带有类别标记,学习过程利用样本的这些监督信息来辅助聚类。
给定样本集D={(x1,y1),⋯ ,(xm,ym)},xj∈Rn,yiD=\{(x_1,y_1),\cdots,(x_m,y_m)\},x_j \in R^n,y_iD={(x1,y1),⋯,(xm,ym)},xj∈Rn,yi是样本的类别标记。LVQ的目标是学得一组n维的原型向量{p1,p2,⋯ ,pq}\{p_1,p_2,\cdots,p_q\}{p1,p2,⋯,pq},每个原型向量代表一个聚类簇,簇标记为tit_iti。
LVQ算法的处理流程为:
LVQ算法也是首先随机选取q个样本作为初始原型向量,并且假定第i个初始原型向量具有类别tit_iti。然后,计算每一个样本距离初始原型向量间的距离,将样本的类别设为距离最近的初始原型向量对应的标记ti∗t_{i^*}ti∗,然后判断ti∗t_{i^*}ti∗与样本本身的类别标记yjy_jyj是否一致,如果一致,则更新第i∗i^*i∗个原型向量以使其更加接近样本xjx_jxj,否则则更新第i∗i^*i∗个原型向量以使其更加远离样本xjx_jxj。等到达到最大迭代轮数或者原型向量的更新量小于预设值时则停止迭代,完成聚类过程。
假如ti∗t_{i^*}ti∗与样本本身的类别标记yjy_jyj一致,则定义更新后的原型向量为p′=pi∗+η(xj−pi∗)p^{'}=p_{i^*}+\eta(x_j - p_{i^*})p′=pi∗+η(xj−pi∗),更新后的原型向量距离xjx_jxj的距离为:
∣∣p′−xj∣∣2=∣∣pi∗+η(xj−pi∗)−xj∣∣2=(1−η)∣∣pi∗−xj∣∣2||p^{'} - x_j||_2 = ||p_{i^*}+\eta(x_j - p_{i^*}) - x_j||_2 \\= (1 - \eta)||p_{i^*} - x_j||_2∣∣p′−xj∣∣2=∣∣pi∗+η(xj−pi∗)−xj∣∣2=(1−η)∣∣pi∗−xj∣∣2
由于η∈(0,1)\eta \in (0,1)η∈(0,1),则更新后的原型向量距离xjx_jxj更近。同理,p′=pi∗−η(xj−pi∗)p^{'}=p_{i^*}-\eta(x_j - p_{i^*})p′=pi∗−η(xj−pi∗)则更加远离xjx_jxj。
在学得一组原型向量{p1,p2,⋯ ,pq}\{p_1,p_2,\cdots,p_q\}{p1,p2,⋯,pq}之后,即可实现对样本空间X的簇划分,对任意样本x,将其划入与其距离最近的原型向量所代表的簇中。换言之,每个原型向量pip_ipi都定义了一个与之相关的区域RiR_iRi,该区域中的每个样本与pip_ipi的距离都不大于它与其他原型向量pi′(i′≠i)p_{i^{'}}(i^{'} \neq i)pi′(i′̸=i)的距离,即
Ri={x∈X∣∣∣x−pi∣∣2≤∣∣x−pi′∣∣,i≠i′}R_i = \{x \in X | ||x - p_i||_2 \leq ||x - p_{i^{'}}||,i \neq i^{'}\}Ri={x∈X∣∣∣x−pi∣∣2≤∣∣x−pi′∣∣,i̸=i′}
由此形成了对样本空间的簇划分{R1,R2,⋯ ,Rq}\{R_1,R_2,\cdots,R_q\}{R1,R2,⋯,Rq},该划分通常称之为“Voronoi”剖分。
4.1.3 高斯混合聚类
高斯混合聚类采用概率模型来表达聚类思想。
多元高斯分布:
p(x∣u,Σ)=1(2π)n2∣Σ∣12e−12(x−u)TΣ−1(x−u)p(x|u,\Sigma) = \frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}e^{-\frac{1}{2}(x - u)^T\Sigma^{-1}(x - u)}p(x∣u,Σ)=(2π)2n∣Σ∣211e−21(x−u)TΣ−1(x−u)
高斯混合分布:
pM(x)=∑i=1kαi p(x∣ui,Σi)p_M(x) = \sum_{i=1}^{k}\alpha_i ~ p(x|u_i,\Sigma_i)pM(x)=i=1∑kαi p(x∣ui,Σi)
上述分布由k个混合成分组成,每个混合成分对应一个高斯分布,其中uiu_iui与Σi\Sigma_iΣi为第i个高斯混合分布的参数,而αi\alpha_iαi为相应的混合系数,∑i=1kαi=1\sum_{i=1}^{k}\alpha_i = 1∑i=1kαi=1。
假设样本的生成过程由高斯混合分布给出:首先,根据α1,α2,⋯ ,αk\alpha_1,\alpha_2,\cdots,\alpha_kα1,α2,⋯,αk定义的先验分布选择高斯混合成分,其中αi\alpha_iαi为选择第i个混合成分的概率;然后,根据被选择的混合成分的概率密度函数进行采样,从而生成相应的样本。若采样生成了数据集D={x1,x2,⋯ ,xm}D= \{x_1,x_2,\cdots,x_m\}D={x1,x2,⋯,xm},令随机变量zj∈{1,2,⋯ ,k}z_j \in \{1,2,\cdots,k\}zj∈{1,2,⋯,k}表示生成样本xjx_jxj的高斯混合成分,其取值未知。zjz_jzj的先验概率p(zj=i)p(z_j = i)p(zj=i)即为αi\alpha_iαi。根据贝叶斯定理,zjz_jzj的后验概率为:
(9.30)pM(zj=i∣xj)=P(zj=i) pM(xj∣zj=i)pM(xj)=αi p(xj∣ui,Σi)∑l=1kαl p(x∣ul,Σl)p_M(z_j = i | x_j) = \frac{P(z_j = i)~~p_M(x_j|z_j = i)}{p_M(x_j)} \\ =\frac{\alpha_i~~p(x_j|u_i,\Sigma_i)}{\sum_{l=1}^{k}\alpha_l ~ p(x|u_l,\Sigma_l)} \tag {9.30}pM(zj=i∣xj)=pM(xj)P(zj=i) pM(xj∣zj=i)=∑l=1kαl p(x∣ul,Σl)αi p(xj∣ui,Σi)(9.30)
pM(zj=i∣xj)p_M(z_j = i|x_j)pM(zj=i∣xj)给出了样本xjx_jxj由第i个高斯混合成分生成的后验概率,将其简记为γji(i=1,2,⋯ ,k)\gamma_{ji}(i=1,2,\cdots,k)γji(i=1,2,⋯,k)。
当高斯混合分布pM(x)p_M(x)pM(x)已知时,高斯混合聚类将把样本集D划分为k个簇C={C1,C2,⋯ ,Ck}C=\{C_1,C_2,\cdots,C_k\}C={C1,C2,⋯,Ck},每个样本xjx_jxj对于的簇标记λj\lambda_jλj如下确定:
(9.31)λj=arg maxi∈{1,2,⋯ ,k} γji\lambda_j = arg~max_{i \in \{1,2,\cdots,k\}}~~\gamma_{ji} \tag{9.31}λj=arg maxi∈{1,2,⋯,k} γji(9.31)
因此,从原型聚类的角度看,高斯混合聚类是采用概率模型对原型进行刻画,簇划分由原型对应的后验概率确定。
那么,现在就遗留一个问题,如何求解得到各概率模型的参数αi,ui,Σi\alpha_i,u_i,\Sigma_iαi,ui,Σi。可以通过极大似然估计,极大化对数似然进行求解。
高斯混合聚类的整个过程为:
高斯混合聚类算法的过程中应用了EM算法,其中上图中的第4步是EM算法的E步,第7,8,9步是EM算法中的M步。EM算法的推导过程后面的博客中进行补充。高斯混合聚类的过程也可以参考CS229的notes 7b,notes8。
高斯混合聚类和k均值聚类的处理过程很相似,都是开始随机初始化参数,然后根据参数确定各样本的类别,待样本类别确定之后根据初步的分类结果更新各类别的参数,进而再重新确定类别,依此循环,直到达到迭代次数或者参数的改变量很小时停止迭代,完成聚类。
上述三种原型聚类方法,k均值、LVQ、高斯混合聚类都需要预先设置聚类的数目,而聚类数目作为一个超参数在很多应用中是未知的,因此限制了原型聚类算法的应用场景。
4.2 密度聚类
密度聚类为“基于密度的聚类”,算法假设聚类结构能够通过样本分布的紧密程度确定。通常情形下,密度聚类算法从样本密度的角度来考察样本的可连接性,并基于可连接样本不断扩展聚类簇以获取最终的聚类效果。
DBSCAN是一种著名的密度聚类算法,它基于一组“领域”参数(ϵ,MinPts)(\epsilon,MinPts)(ϵ,MinPts)来刻画样本分布的紧密程度。给定数据集D={x1,x2,⋯ ,xm}D = \{x_1,x_2,\cdots,x_m\}D={x1,x2,⋯,xm},定义下面几个概念:
ϵ−\epsilon-ϵ−领域:对于样本xj∈Dx_j \in Dxj∈D,其ϵ−\epsilon-ϵ−领域包含样本集D中与xjx_jxj距离不大于ϵ\epsilonϵ的样本,即Nϵ(xj)={xi∈D∣dist(xi,xj)≤ϵ}N_{\epsilon}(x_j)=\{x_i \in D|dist(x_i,x_j) \leq \epsilon\}Nϵ(xj)={xi∈D∣dist(xi,xj)≤ϵ};
核心对象:若xjx_jxj的ϵ−\epsilon-ϵ−领域至少包含MinPts个样本,即∣Nϵ(xj)∣≥MinPts|N_{\epsilon}(x_j)| \geq MinPts∣Nϵ(xj)∣≥MinPts,则xjx_jxj是一个核心对象;
密度直达:若xjx_jxj位于xix_ixi的ϵ−\epsilon-ϵ−领域内,且xix_ixi是核心对象,则称xjx_jxj由xix_ixi密度直达;
密度可达:对xix_ixi与xjx_jxj,若存在样本序列p1,p2,⋯ ,pnp_1,p_2,\cdots,p_np1,p2,⋯,pn,其中p1=xi,pn=xjp_1 = x_i,p_n = x_jp1=xi,pn=xj且pi+1p_{i+1}pi+1由pip_ipi密度直达,则称xjx_jxj由xix_ixi密度可达。
密度相连:对于xix_ixi和xjx_jxj,若存在xkx_kxk使得xix_ixi与xjx_jxj均由xkx_kxk密度可达,则称xix_ixi与xjx_jxj密度相连。
DBSCAN将簇定义为:由密度可达关系导出的最大的密度相连样本集合。
形式化地说,给定领域参数(ϵ,MinPts)(\epsilon,MinPts)(ϵ,MinPts),簇C⊆DC \subseteq DC⊆D是满足下列性质的非空样本子集:
连接性:xi∈C,xj∈Cx_i \in C,x_j \in Cxi∈C,xj∈C ⇒\Rightarrow⇒ xix_ixi与xjx_jxj密度相连;
最大性:xi∈Cx_i \in Cxi∈C,xjx_jxj由xix_ixi密度可达 ⇒\Rightarrow⇒ xj∈Cx_j \in Cxj∈C。
在数据集D中,若x为核心对象,则由x密度可达的所有样本集合记为X={x′∈D∣x′由x密度可达}X = \{x^{'} \in D | x^{'}由x密度可达\}X={x′∈D∣x′由x密度可达},则X为满足连接性与最大性的簇。
因此在DBSCAN算法中,先任选数据集中的一个核心对象为“种子”,再由此出发确定相应的聚类簇。算法的整个流程如下图所示:
DBSCAN的处理过程为首先遍历所有的样本点,找到所有的核心对象,然后对每一个核心对象,找到其所有密度可达的样本点形成簇。然后从核心对象序列中删除包含在已形成的簇中的核心对象,直到核心对象序列为空时完成聚类过程。
DBSCAN不需要预先设定聚类簇数,而是根据样本的分布情况由算法自己决定聚类簇数,具有较大的实际应用价值。
4.3 层次聚类
层次聚类试图在不同层次上对数据集进行划分,从而形成树形的聚类结构。数据集的划分可以采用“自底向上”的聚合策略,也可以采用“自上向下”的分拆策略。
AGNES是一种采用自底向上聚合策略的层次聚类算法,它先将数据集中的每一个样本看出是一个聚类簇,然后在算法运行的每一步中找出距离最近的两个聚类簇进行合并,该过程不断重复,直达达到预设的聚类簇个数。这里的关键是计算聚类簇之间的距离,每一个聚类簇都是一个样本集合,因此只需计算样本集合间的某种距离即可。给定聚类簇CiC_iCi和CjC_jCj,可通过下面的式子来计算距离:
最小距离:dmin(Ci,Cj)=minx∈Ci,z∈Cjdist(x,z)d_{min}(C_i,C_j) = min_{x \in C_i,z \in C_j}dist(x,z)dmin(Ci,Cj)=minx∈Ci,z∈Cjdist(x,z)
最大距离:dmax(Ci,Cj)=maxx∈Ci,z∈Cjdist(x,z)d_{max}(C_i,C_j) = max_{x \in C_i,z \in C_j}dist(x,z)dmax(Ci,Cj)=maxx∈Ci,z∈Cjdist(x,z)
平均距离:davg(Ci,Cj)=1∣Ci∣∣Cj∣∑x∈Ci∑z∈Cjdist(x,z)d_{avg}(C_i,C_j) = \frac{1}{|C_i||C_j|}\sum_{x \in C_i}\sum_{z \in C_j}dist(x,z)davg(Ci,Cj)=∣Ci∣∣Cj∣1∑x∈Ci∑z∈Cjdist(x,z)
AGNES算法的处理流程为:
上述AGNES聚类过程为首先将每一个样本点作为一个聚类,计算不同类别间的距离,然后合并距离最近的两个聚类,对合并后的聚类簇的距离矩阵进行更新直至聚类数目减少到预设值时为止。
AGNES聚类形成的树状图如下图所示:
AGNES算法同样需要预先设定聚类数目。
总结
k均值算法可以看做高斯混合聚类在混合成分方差相等、且每个样本仅指派给一个混合成分时的特例。