聚類演算法

tongyuruo發表於2020-04-26

本文是周志華《機器學習》第九章的學習筆記。

“無監督學習”通過對無標記訓練樣本的學習來揭示資料的內在性質及規律。通常,“無監督學習”包含的任務型別有“聚類”、“密度估計”、“異常檢測”等,下述將主要對“聚類”進行討論。

(1)“聚類”任務可以作為一個單獨過程,也可以作為分類等其他學習任務的前去過程,即根據聚類結果將每個“簇”定義為一個“類”,然後基於這些類訓練分類模型。(2)“聚類”任務中使用的樣本可以帶有標籤,也可以不帶標籤。對無標籤樣本進行聚類,其數學語言描述如下:假定樣本集D={x1,x2,,xm}

D=\{\boldsymbol{x}_1,\boldsymbol{x}_2,\cdots,\boldsymbol{x}_m\}
包含m
m
個無標記樣本,每個樣本xi=(xi1;xi2;;xin)
\boldsymbol{x}_i=(x_{i1};x_{i2};\cdots;x_{in})
是一個n
n
維特徵向量,則聚類演算法將樣本集D
D
劃分成k
k
個互斥且完備的簇{Cl|l=1,2,,k}
\{C_l|l=1,2,\cdots,k\}
,即ClllCl=D=l=1kCl
D=\bigcup_{l=1}^{k}C_{l}
。用λj{1,2,,k}
\lambda_{j}\in\{1,2,\cdots,k\}
表示樣本xj
\boldsymbol{x}_{j}
的“簇標記”,即xjCλj
\boldsymbol{x}_{j}\in C_{\lambda_{j}}
。則樣本集D
D
對應的聚類結果可表示為λ=(λ1,λ2,,λm)
\boldsymbol{\lambda}=(\lambda_{1},\lambda_{2},\cdots,\lambda_{m})

效能度量

聚類演算法的預期目標是“簇內相似度”高,“簇間相似度”低。通過“效能度量”評估聚類結果好壞,將“效能度量”作為“聚類過程優化的目標”。聚類效能度量主要有兩大類:(1)外部指標:將聚類結果與某個“參考模型”進行比較;(2)內部指標:直接參考聚類結果而不利用

外部指標:

對資料集D={x1,x2,,xm}

D=\{\boldsymbol{x}_1,\boldsymbol{x}_2,\cdots,\boldsymbol{x}_m\}
的簇劃分C={C1,C2,,Ck}
\mathcal{C}=\{C_1,C_2,\cdots,C_k\}
參考模型給出的簇劃分C={C1,C2,,Ck}
\mathcal{C^*}=\{C^*_1,C^*_2,\cdots,C^*_k\}
,且λ
\boldsymbol{\lambda}
表示C
\mathcal{C}
對應的簇標記向量、λ
\boldsymbol{\lambda^*}
表示C
\mathcal{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}
\begin{matrix} a=|SS|,SS=\{(\boldsymbol{x}_i,\boldsymbol{x}_j)|\lambda_i=\lambda_j,\lambda^*_i=\lambda^*_j,i<j\}\\ b=|SD|,SD=\{(\boldsymbol{x}_i,\boldsymbol{x}_j)|\lambda_i=\lambda_j,\lambda^*_i\neq\lambda^*_j,i<j\}\\ c=|DS|,DS=\{(\boldsymbol{x}_i,\boldsymbol{x}_j)|\lambda_i\neq\lambda_j,\lambda^*_i=\lambda^*_j,i<j\}\\ d=|DD|,DD=\{(\boldsymbol{x}_i,\boldsymbol{x}_j)|\lambda_i\neq\lambda_j,\lambda^*_i\neq\lambda^*_j,i<j\}\\ \end{matrix}
  • Jaccard係數:JC=aa+b+c
    \displaystyle JC=\frac{a}{a+b+c}
  • FM指數:FMI=aa+baa+c
    \displaystyle FMI=\sqrt{\frac{a}{a+b}\cdot\frac{a}{a+c}}
  • Rand指數:RI=2(a+d)m(m1)
    \displaystyle RI=\frac{2(a+d)}{m(m-1)}

其中,JC,FMI,RI[0,1]

JC,FMI,RI\in[0,1]
,且值越大代表聚類效果越好。

內部指標:

根據對資料集D={x1,x2,,xm}

D=\{\boldsymbol{x}_1,\boldsymbol{x}_2,\cdots,\boldsymbol{x}_m\}
的簇劃分C={C1,C2,,Ck}
\mathcal{C}=\{C_1,C_2,\cdots,C_k\}
,定義

Cavg(C)=2|C|(|C|1)1i<j|C|dist(xi,xj)Cdiam(C)=max1i<j|C|dist(xi,xj)CiCjdmin(Ci,Cj)=minxiCi,xjCjdist(xi,xj)CiCjdcen(Ci,Cj)=dist(μi,μj)
\begin{matrix} 簇C內樣本間平均距離:\displaystyle avg(C)=\frac{2}{|C|(|C|-1)}\sum_{1\leq i<j\leq|C|}dist(\boldsymbol{x}_i,\boldsymbol{x}_j) \\ 簇C內樣本間最遠距離:\displaystyle diam(C)=\max_{1\leq i<j\leq|C|}dist(\boldsymbol{x}_i,\boldsymbol{x}_j)\\ 簇C_i和C_j最近樣本間的距離:\displaystyle d_{min}(C_i,C_j)=\min_{\boldsymbol{x}_i\in C_i,\boldsymbol{x}_j\in C_j}dist(\boldsymbol{x}_i,\boldsymbol{x}_j)\\ 簇C_i和C_j中心點間的距離:\displaystyle d_{cen}(C_i,C_j)=dist(\boldsymbol{\mu}_i,\boldsymbol{\mu}_j)\\ \end{matrix}

上式中dist(,)
dist(\cdot,\cdot)
計算兩樣本間的距離,μ
\boldsymbol{\mu}
代表簇C
C
的中心點μ=1|C|1i|C|xi
\displaystyle\boldsymbol{\mu}=\frac{1}{|C|}\sum_{1\leq i\leq|C|}\boldsymbol{x}_i
  • DB指數:DBI=1ki=1kmaxji(avg(Ci)+avg(Cj)dcen(μi,μj))
    \displaystyle DBI=\frac{1}{k}\sum_{i=1}^{k}\max\limits_{j\neq i}\Big(\frac{avg(C_i)+avg(C_j)}{d_{cen}(\boldsymbol{\mu}_i,\boldsymbol{\mu}_j)}\Big)
  • Dunn指數:DI=min1ik{minji(dmin(Ci,Cj)max1lkdiam(Cl))}
    \displaystyle DI=\min\limits_{1\leq i\leq k}\Big\{\min\limits_{j\neq i}\Big(\frac{d_{min}(C_i,C_j)}{\max_{1\leq l\leq k}diam(C_l)}\Big)\Big\}

距離計算

滿足非負性、對稱性、傳遞性的基本度量距離,即L1,L2,Lp範數:

distman(xi,xj)=||xixj||1=u=1n|xiuxju|disted(xi,xj)=||xixj||2=u=1n|xiuxju|2distmk(xi,xj)=(u=1n|xiuxju|p)1p
\begin{matrix} dist_{man}(\boldsymbol{x}_i,\boldsymbol{x}_j)=||\boldsymbol{x}_i-\boldsymbol{x}_j||_1=\sum\limits_{u=1}^{n}|x_{iu}-x_{ju}|\\ dist_{ed}(\boldsymbol{x}_i,\boldsymbol{x}_j)=||\boldsymbol{x}_i-\boldsymbol{x}_j||_2=\sqrt{\sum\limits_{u=1}^{n}|x_{iu}-x_{ju}|^{2}}\\ dist_{mk}(\boldsymbol{x}_i,\boldsymbol{x}_j)=\Big(\sum\limits_{u=1}^{n}|x_{iu}-x_{ju}|^{p}\Big)^{\frac{1}{p}}\\ \end{matrix}

“連續屬性”:在定義域上有無窮多個可能的取值
“離散屬性”:在定義域上是有限個取值
“有序屬性”:在該屬性上定義了“序”關係,如{1,2,3}

\{1,2,3\}
裡“1
1
”與“2
2
”比較接近,與“3
3
”相距較遠。
“無序屬性”:如{,,}
\{飛機,汽車,輪船\}
這樣的離散屬性即為無序屬性。
可以直接在有序屬性上計算距離,但不能直接在無序屬性上計算距離。
(1)無序屬性可利用VDM距離度量:

  • VDMp(a,b)=i=1k|mu,a,imu,amu,b,imu,b|p
    \displaystyle VDM_p(a,b)=\sum\limits_{i=1}^{k}\Big|\frac{m_{u,a,i}}{m_{u,a}}-\frac{m_{u,b,i}}{m_{u,b}}\Big|^p

上式中mu,a

m_{u,a}
表示在屬性u
u
上取值為a
a
的樣本數,mu,a,i
m_{u,a,i}
表示在第i
i
個簇中在屬性u
u
上取值為a
a
的樣本數,k
k
為簇數。

(2)混合屬性(樣本向量不同維度,既包含有序屬性又包含無序屬性)可將Minkowski(Lp範數)距離和VDM結合:

  • MinkovDMp(xi,xj)=(u=1nc|xiuxju|p+u=nc+1nVDMp(xiu,yju))1p
    \displaystyle MinkovDM_{p}(\boldsymbol{x}_i,\boldsymbol{x}_j)=\Big(\sum\limits_{u=1}^{n_c}|x_{iu}-x_{ju}|^p+\sum\limits_{u=n_c+1}^{n}VDM_{p}(x_{iu},y_{ju})\Big)^\frac{1}{p}

原型指樣本空間裡“具有代表性的點”,可通過一組原型刻畫聚類結構。基於原型的聚類演算法——對原型初始化,對原型迭代更新。

原型聚類——K-means

“K均值”演算法對樣本集D={x1,x2,,xm}

D=\{\boldsymbol{x}_1,\boldsymbol{x}_2,\cdots,\boldsymbol{x}_m\}
聚類,得到的簇劃分C={C1,C2,,Ck}
\mathcal{C}=\{C_1,C_2,\cdots,C_k\}
對應的最小化平方誤差:

E=i=1kxCi||xμi||22μi=1CixCixCi
\displaystyle E=\sum\limits_{i=1}^{k}\sum\limits_{\boldsymbol{x}\in C_i}||\boldsymbol{x}-\boldsymbol{\mu}_i||^2_2,其中\boldsymbol{\mu}_i=\frac{1}{C_i}\sum\limits_{\boldsymbol{x}\in C_i}\boldsymbol{x}是簇C_i的均值向量

E
E
刻畫了簇內樣本圍繞簇均值向量的緊密程度,E
E
值越小表示簇內樣本相似度越高。要想求E
E
的最優解,需要遍歷考查樣本集D
D
所有可能的簇劃分,是NP難問題;實際操作中,常採用貪心策略,通過迭代優化近似求解。
  • 輸入:樣本集D={x1,x2,,xm}
    D=\{\boldsymbol{x}_1,\boldsymbol{x}_2,\cdots,\boldsymbol{x}_m\}
    ;聚類簇數k
    k
    .
  • 演算法流程:
  • (1)從D
    D
    裡隨機選k
    k
    樣本作為初始均值向量{μ1,μ2,,μk}
    \{\boldsymbol{\mu}_1,\boldsymbol{\mu}_2,\cdots,\boldsymbol{\mu}_k\}
    .
  • (2)通過迴圈逐個生成簇,目標是生成k
    k
    個聚類簇:
    • D
      D
      裡每個樣本xi
      \boldsymbol{x}_i
    • a.)計算該樣本與各均值向量μi
      \boldsymbol{\mu}_i
      的距離:dji=||xjμi||2
      d_{ji}=||\boldsymbol{x}_j-\boldsymbol{\mu}_i||_2
    • b.)對應可得樣本μi
      \boldsymbol{\mu}_i
      所歸屬的簇標記λj=argmini{1,2,,k}dji
      \lambda_j=argmin_{i\in\{1,2,\cdots,k\}}d_{ji}
    • c.)把樣本xi
      \boldsymbol{x}_i
      加入簇Cλj=Cλjxj
      C_{\lambda_{j}}=C_{\lambda_{j}}\bigcup{\boldsymbol{x}_j}
      .
    • 更新各個聚類簇的均值向量μi=1|Ci|xCix
      \displaystyle\boldsymbol{\mu}^{'}_i=\frac{1}{|C_i|}\sum_{\boldsymbol{x}\in C_i}\boldsymbol{x}
    • 判斷μi
      \boldsymbol{\mu}^{'}_i
      μi
      \boldsymbol{\mu}_i
      是否相等,相等則該聚類簇中心不變,不相等則更新為μi
      \boldsymbol{\mu}^{'}_i
      .
  • (3)重複以上過程(2),直到達到最大迭代次數限制;或對所有i
    i
    滿足|μiμi|ϵϵ
    |\boldsymbol{\mu}^{'}_i-\boldsymbol{\mu}_i|\leq \epsilon(\epsilon是任意正數)
    時,停止迭代.

原型聚類——學習向量量化LVQ

LVQ演算法裡假設資料樣本帶有“類別標籤”,簇劃分過程需要記住“類別標籤”輔助學習。即,對於給定的樣本集D={(x1,y1),(x2,y2),,(xm,ym)}

D=\{(\boldsymbol{x}_1,y_1),(\boldsymbol{x}_2,y_2),\cdots,(\boldsymbol{x}_m,y_m)\}
n
n
維屬性xj=(xj1,xj2,,xjn)
\boldsymbol{x}_j=(x_{j1},x_{j2},\cdots,x_{jn})
,樣本xj
\boldsymbol{x}_j
的類標記yjY
y_j\in\mathcal{Y}

LVQ的目標是學習到一組“代表各個聚類簇”的n
n
維原型向量
{p1,p2,,pq}
\{\boldsymbol{p}_1,\boldsymbol{p}_2,\cdots,\boldsymbol{p}_q\}
,即原型向量和樣本的屬性具有相同的維度。由此,LVQ初始化第q
q
個簇的原型向量的一種方法:從類別標記為tq
t_q
的樣本里,隨機選取一個“樣本屬性向量”作為“初始原型向量”。

  • 輸入:樣本集D={(x1,y1),(x2,y2),,(xm,ym)}
    D=\{(\boldsymbol{x}_1,y_1),(\boldsymbol{x}_2,y_2),\cdots,(\boldsymbol{x}_m,y_m)\}
    ;原型向量個數q
    q
    ;各原型向量初始類別標記{t1,t2,,tq}
    \{t_1,t_2,\cdots,t_q\}
    ;學習率η(0,1)
    \eta\in(0,1)
    .
  • 演算法流程:
  • (1)從類別標記為ti(i=1,2,,q)
    t_i(i=1,2,\cdots,q)
    的樣本里,隨機選取一個“樣本屬性向量”作為初始原型向量pi(i=1,2,,q)
    \boldsymbol{p}_i(i=1,2,\cdots,q)
    ;得初始化原型向量組{p1,p2,,pq}
    \{\boldsymbol{p}_1,\boldsymbol{p}_2,\cdots,\boldsymbol{p}_q\}
    .
  • (2)遍歷更新每個原型向量:
    • 隨機選取D
      D
      內的一個樣本(xj,yj)
      (\boldsymbol{x}_j,y_j)
    • a.)計算該樣本與各個原型向量pi(i=1,2,,q)
      \boldsymbol{p}_i(i=1,2,\cdots,q)
      的距離:dji=||xjpi||2
      d_{ji}=||\boldsymbol{x}_j-\boldsymbol{p}_i||_2
    • b.)找出與xj
      \boldsymbol{x}_j
      距離最近的原型向量pi
      \boldsymbol{p}^*_i
      i=argmini{1,2,,q}dji
      i^*=argmin_{i\in\{1,2,\cdots,q\}}d_{ji}
    • c.)更新原型向量:如yj=ti
      y_j=t^*_i
      ,則p=pi+η(xjpi)
      \boldsymbol{p}^{'}=\boldsymbol{p}^*_i+\eta\cdot(\boldsymbol{x}_j-\boldsymbol{p}^*_i)
      (原型向量靠近xj
      x_j
      );否則,p=piη(xjpi)
      \boldsymbol{p}^{'}=\boldsymbol{p}^*_i-\eta\cdot(\boldsymbol{x}_j-\boldsymbol{p}^*_i)
      (原型向量遠離xj
      x_j
      ).
  • (3)重複以上過程(2),直到達到最大迭代次數限制;或“原型向量”更新很小甚至不更新時,停止迭代.
    這裡寫圖片描述

原型聚類——高斯混合聚類

高斯混合聚類採用“概率模型”來表達聚類原型,定義高斯混合分佈

pM(x)=i=1kαip(x|μi,Σi)=i=1kαi1(2π)n2|Σi|12e12(xμi)TΣi1(xμi)
p_\mathcal{M}(\boldsymbol{x})=\sum\limits_{i=1}^{k}\alpha_i\cdot p(\boldsymbol{x}|\boldsymbol{\mu}_i,\boldsymbol{\Sigma}_i)=\sum\limits_{i=1}^{k}\alpha_i\cdot \frac{1}{(2\pi)^{\frac{n}{2}}|\boldsymbol{\Sigma}_i|^{\frac{1}{2}}}e^{-\frac{1}{2}(\boldsymbol{x}-\boldsymbol{\mu}_i)^{T}\boldsymbol{\Sigma}_i^{-1}(\boldsymbol{x}-\boldsymbol{\mu}_i)}

上式,μi
\boldsymbol{\mu}_i
是第i
i
個高斯混合成分的n
n
維均值矩陣;Σi
\boldsymbol{\Sigma}_i
是第i
i
個高斯混合成分的n×n
n\times n
維協方差矩陣;αi>0
\alpha_i>0
是第i
i
個高斯混合成分的“混合係數”,且i=1kαi=1
\sum\limits_{i=1}^k\alpha_i=1

樣本生成過程:根據“混合係數”定義的先驗分佈,選擇該樣本所屬的高斯混合成分(其中αi

\alpha_i
是選擇第i
i
個高斯混合成分的概率),根據被選擇的高斯混合成分的“概率密度函式”進行“取樣”,從而生成相應的樣本。

定義隨機變數zj{1,2,,k}

z_j\in\{1,2,\cdots,k\}
表示生成樣本xj
\boldsymbol{x}_j
的高斯混合成分,則zj
z_j
先驗概率P(zj=i)=αi
P(z_j=i)=\alpha_i
,由貝葉斯公式zj
z_j
後驗分佈

pM(zj=i|xj)=P(zj=i)pM(xj|zj=i)pM(xj)=αip(xj|μi,Σi)l=1kαlp(xj|μl,Σl)γji
p_\mathcal{M}(z_j=i|\boldsymbol{x}_j)=\frac{P(z_j=i)\cdot p_\mathcal{M}(\boldsymbol{x}_j|z_j=i)}{p_\mathcal{M}(\boldsymbol{x}_j)}=\frac{\alpha_i\cdot p(\boldsymbol{x}_j|\boldsymbol{\mu}_i,\boldsymbol{\Sigma}_i)}{\sum\limits_{l=1}^k \alpha_l\cdot p(\boldsymbol{x}_j|\boldsymbol{\mu}_l,\boldsymbol{\Sigma}_l)}\triangleq\gamma_{ji}

(1)若模型引數已知,即模型確定時,將樣本集D
D
劃分為k
k
個簇C={C1,C2,,Ck}
\mathcal{C}=\{C_1,C_2,\cdots,C_k\}
的方法:每個樣本xj
\boldsymbol{x}_j
的簇標記λj=argmaxi{1,2,,k}γji
\lambda_j=\underset{i\in\{1,2,\cdots,k\}}{arg\max} \gamma_{ji}

(2)模型引數{(αi,μi,Σi)|1ik}
\{(\alpha_i,\boldsymbol{\mu}_i,\boldsymbol{\Sigma}_i)|1\leq i\leq k\}
利用“極大似然估計求導和EM演算法迭代”學習:
LL(D)=ln(j=1mpM(xj))=ln(j=1m(i=1kP(zj=i)pM(xj|zj=i)))=ln(j=1m(i=1kαip(xj|μi,Σi)))=j=1mln(i=1kαip(xj|μi,Σi))
LL(D)=ln\Big(\prod\limits_{j=1}^m p_\mathcal{M}(\boldsymbol{x}_j)\Big)=ln\Big(\prod\limits_{j=1}^m\big(\sum\limits_{i=1}^k P(z_j=i)\cdot p_\mathcal{M}(\boldsymbol{x}_j|z_j=i)\big)\Big)\\ =ln\Big(\prod\limits_{j=1}^m\big(\sum\limits_{i=1}^k \alpha_i\cdot p(\boldsymbol{x}_j|\boldsymbol{\mu}_i,\boldsymbol{\Sigma}_i)\big)\Big)=\sum\limits_{j=1}^m ln\Big(\sum\limits_{i=1}^k \alpha_i\cdot p(\boldsymbol{x}_j|\boldsymbol{\mu}_i,\boldsymbol{\Sigma}_i)\Big)

LL(D)μi=0
\displaystyle\frac{\partial LL(D)}{\partial\boldsymbol{\mu}_i}=0
可求得μi=j=1mγjixjj=1mγji
\displaystyle\boldsymbol{\mu}_i=\frac{\sum\limits_{j=1}^m \gamma_{ji}\boldsymbol{x}_j}{\sum\limits_{j=1}^m \gamma_{ji}}
;由LL(D)Σi=0
\displaystyle\frac{\partial LL(D)}{\partial\boldsymbol{\Sigma}_i}=0
可求得Σi=j=1mγji(xjμi)(xjμi)Tj=1mγji
\displaystyle\boldsymbol{\Sigma}_i=\frac{\sum\limits_{j=1}^m \gamma_{ji}(\boldsymbol{x}_j-\boldsymbol{\mu}_i)(\boldsymbol{x}_j-\boldsymbol{\mu}_i)^T}{\sum\limits_{j=1}^m \gamma_{ji}}
;將約束αi>0,i=1kαi=1
\alpha_i>0,\sum\limits_{i=1}^k\alpha_i=1
轉化成Lagrange乘子後求導,即(LL(D)+λ(i=1kαi1))αi=0
\displaystyle\frac{\partial\Big(LL(D)+\lambda(\sum\limits_{i=1}^k\alpha_i-1)\Big)}{\partial\alpha_i}=0
,可求得αi=1mj=1mγji
\displaystyle\alpha_i=\frac{1}{m}\sum\limits_{j=1}^m \gamma_{ji}
  • 輸入:樣本集D={x1,x2,,xm}
    D=\{\boldsymbol{x}_1,\boldsymbol{x}_2,\cdots,\boldsymbol{x}_m\}
    ;高斯混合成分個數k
    k
    .
  • 演算法流程:
  • (1)初始化高斯混合分佈的模型引數{(αi,μi,Σi)|1ik}
    \{(\alpha_i,\boldsymbol{\mu}_i,\boldsymbol{\Sigma}_i)|1\leq i\leq k\}
    .
  • (2)遍歷更新每個樣本:
    • 根據貝葉斯公式,計算每個樣本xj
      \boldsymbol{x}_j
      由各高斯混合成分生成的後驗概率γji=pM(zj=i|xj)(1ik)
      \gamma_{ji}=p_\mathcal{M}(z_j=i|\boldsymbol{x}_j),(1\leq i\leq k)
      .
  • (3)更新每個高斯混合成分的引數:
    • a.)計算新均值向量μi=j=1mγjixjj=1mγji
      \displaystyle\boldsymbol{\mu^{'}}_i=\frac{\sum\limits_{j=1}^m \gamma_{ji}\boldsymbol{x}_j}{\sum\limits_{j=1}^m \gamma_{ji}}
    • b.)計算新協方差矩陣Σi=j=1mγji(xjμi)(xjμi)Tj=1mγji
      \displaystyle\boldsymbol{\Sigma^{'}}_i=\frac{\sum\limits_{j=1}^m \gamma_{ji}(\boldsymbol{x}_j-\boldsymbol{\mu}_i)(\boldsymbol{x}_j-\boldsymbol{\mu}_i)^T}{\sum\limits_{j=1}^m \gamma_{ji}}
      ,
    • c.)計算新混合係數αi=1mj=1mγji
      \displaystyle\alpha^{'}_i=\frac{1}{m}\sum\limits_{j=1}^m \gamma_{ji}
      .
  • (4)根據後驗概率γji
    \gamma_{ji}
    ,對每個樣本確定簇標記λj=argmaxi{1,2,,k}γji
    \lambda_j=\underset{i\in\{1,2,\cdots,k\}}{arg\max} \gamma_{ji}
    ,則第Cλj
    C_{\lambda_j}
    個簇更新為Cλj=Cλj{xj}
    C_{\lambda_j}=C_{\lambda_j}\bigcup\{\boldsymbol{x}_j\}
    .

密度聚類

此類方法通過“樣本分佈的緊密程度”確定聚類結構。即,從樣本密度角度考察樣本之間的可連線性,並基於可連線樣本不斷擴充套件聚類簇,以獲得最終的聚類結果。

密度聚類演算法DBSCAN

該演算法是對給定的資料集D={x1,x2,,xm}

D=\{\boldsymbol{x}_1,\boldsymbol{x}_2,\cdots,\boldsymbol{x}_m\}
,基於一組“鄰域”引數(ϵ,MinPts)
(\epsilon,MinPts)
,刻畫樣本分佈的緊密程度。首先,給出如下定義:
(1)ϵ
\epsilon-
鄰域
xjD
\boldsymbol{x}_j\in D
ϵ
\epsilon-
鄰域指該鄰範圍內包含的所有其餘樣本點集合,Nϵ(xj)={xiD|dist(xi,xj)ϵ}
N_{\epsilon}(\boldsymbol{x}_j)=\{\boldsymbol{x}_i\in D|dist(\boldsymbol{x}_i,\boldsymbol{x}_j)\leq\epsilon\}
.
(2)核心物件:某樣本xj
\boldsymbol{x}_j
是核心樣本,指其ϵ
\epsilon-
鄰域內至少包含MinPts
MinPts
個樣本點,即|Nϵ(xj)|MinPts
|N_{\epsilon}(\boldsymbol{x}_j)|\geq MinPts
.
(3)密度直達xj
\boldsymbol{x}_j
是核心物件xi
\boldsymbol{x}_i
ϵ
\epsilon-
鄰域內的點,稱xj
\boldsymbol{x}_j
xi
\boldsymbol{x}_i
密度直達.
(4)密度可達:若有樣本序列xi=p1,p2,,pn=xj
\boldsymbol{x}_i=\boldsymbol{p}_1,\boldsymbol{p}_2,\cdots,\boldsymbol{p}_n=\boldsymbol{x}_j
,且後一樣本點pi+1
\boldsymbol{p}_{i+1}
由前一樣本點pi
\boldsymbol{p}_i
密度直達,則xj
\boldsymbol{x}_j
xi
\boldsymbol{x}_i
密度可達.
(5)密度相連:若樣本點xi
\boldsymbol{x}_i
xj
\boldsymbol{x}_j
均由xk
\boldsymbol{x}_k
密度可達,則xi
\boldsymbol{x}_i
xj
\boldsymbol{x}_j
密度相連.
這裡寫圖片描述
DBSCAN演算法的“簇”是由密度可達匯出的“最大”密度相連的“樣本的集合”。若x
\boldsymbol{x}
核心物件x
\boldsymbol{x}
密度可達的所有樣本
組合的集合,即形成一個聚類簇。最後,簇劃分確定後,資料集D
D
中不屬於任何簇的樣本,通常看作“噪聲”或“異常樣本”。

  • 輸入:樣本集D={x1,x2,,xm}
    D=\{\boldsymbol{x}_1,\boldsymbol{x}_2,\cdots,\boldsymbol{x}_m\}
    ;鄰域引數(ϵ,MinPts)
    (\epsilon,MinPts)
    .
  • 演算法流程:
  • (1)初始化核心物件集合Ω=
  • (2)遍歷每個樣本,確定該樣本是否是核心物件:
    • 對於樣本xj
      \boldsymbol{x}_j
      ,若|Nϵ(xj)|MinPts
      |N_{\epsilon}(\boldsymbol{x}_j)|\geq MinPts
      ,則該樣本是核心物件,更新Ω=Ω{xj}
      \Omega=\Omega\bigcup\{\boldsymbol{x}_j\}
      .
  • (3)根據核心物件的密度可達關係,確定每一個聚類簇:
    • a.)隨機選取一個核心物件初始化佇列Q
      Q
      ,初始化未訪問樣本集Γ=D
      \Gamma=D
    • b.)取Q
      Q
      的首個元素,考查其ϵ
      \epsilon
      鄰域內的樣本點是否已被劃分到某個簇:若未被劃分到某個簇,則加入當前簇;若已被劃分到某個簇,則continue,
    • c.)考查該鄰域內的樣本點是否是核心物件:如果是,則進一步根據密度可達關係擴張,獲得外圍樣本點,回到b.)進一步考察;如果不是,則停止.

層次聚類

層次聚類是在“不同層次”對資料集進行劃分,形成“樹形的聚類結構”。資料集的劃分方式:(1)“自底向上”聚合(2)“自頂向下”分拆。

AGNES自底向上聚合的層次聚類演算法

該演算法初始將每個樣本看成一個聚類簇,每一步對“距離最近的兩個聚類簇”合併,重複以上過程直到達到預設的聚類簇個數。
計算聚類簇間距離的不同定義:

dmin(Ci,Cj)=minxCi,zCjdist(x,z)dmax(Ci,Cj)=maxxCi,zCjdist(x,z)davg(Ci,Cj)=1|Ci||Cj|xCizCjdist(x,z)
\begin{matrix} 最小距離:\displaystyle d_{\min}(C_i,C_j)=\min\limits_{\boldsymbol{x}\in C_{i},\boldsymbol{z}\in C_{j}}dist(\boldsymbol{x},\boldsymbol{z}) \\ 最大距離:\displaystyle d_{\max}(C_i,C_j)=\max\limits_{\boldsymbol{x}\in C_{i},\boldsymbol{z}\in C_{j}}dist(\boldsymbol{x},\boldsymbol{z}) \\ 平均距離:\displaystyle d_{avg}(C_i,C_j)=\frac{1}{|C_i||C_j|}\sum\limits_{\boldsymbol{x}\in C_{i}}\sum\limits_{\boldsymbol{z}\in C_{j}}dist(\boldsymbol{x},\boldsymbol{z})\\ \end{matrix}
  • 輸入:樣本集D={x1,x2,,xm}
    D=\{\boldsymbol{x}_1,\boldsymbol{x}_2,\cdots,\boldsymbol{x}_m\}
    ;聚類簇聚類度量函式d
    d
    ;聚類簇數k
    k
    .
  • 演算法流程:
  • (1)初始化,每個樣本作為一個聚類簇Cj={xj}j=1,2,,m
    C_j=\{\boldsymbol{x}_j\},j=1,2,\cdots,m
    .
  • (2)遍歷每個樣本,計算距離矩陣:
    • 對於任意兩個樣本,計算距離,得距離矩陣M(i,j)=d(Ci,Cj)M(i,j)=M(j,i)j>i
      M(i,j)=d(C_i,C_j),M(i,j)=M(j,i),j>i
      .
  • (3)若聚類簇個數大於預計聚類簇數,則合併距離最近的兩個聚類簇,更新距離矩陣:
    • a.)找到距離最近的兩個聚類簇Ci
      C_{i^*}
      Cj
      C_{j^*}
      ,合併得Ci=CiCj
      C_{i^*}=C_{i^*}\bigcup C_{j^*}
    • b.)對編號在j
      j^*
      後的聚類簇重新編號,即編號往前減1,
    • c.)刪除距離矩陣的第j
      j^*
      行和第j
      j^*
      列,對新劃分的聚類簇計算距離矩陣.
  • (4)重複以上過程(3),直到聚類簇聚合到預期聚類簇數,停止迭代.

相關文章