1. 標準C-Means
1.1. 基本思路
通過迭代尋找c個聚類的一種劃分方案,使這c個聚類的代表點——各類樣本的均值所得到的總體誤差最小。
假設第i類樣本集合τi的數目爲Ni,則該類樣本均值向量爲mi的計算公式爲:
mi=Ni1y∈τi∑y(1.1)
整個樣本空間上的誤差平方和爲
Je=i=1∑cy∈τi∑∣∣y−mi∣∣2(1.2)
Je越小,**說明聚類結果越優。**通常稱該類劃分結果爲:最小方差劃分。
1.2. 樣本在類間調整思路
假設已經有一個樣本劃分的方案,將樣本y從τi劃分到τj中,則τi和τj發生了變化而其他樣本類沒有發生變化,因此,這兩類的均值變化情況爲:
mi=Ni−11y∈{τi−y′}∑ymi=Ni1y∈{τi}∑y(2.1)
- 對於失去樣本的來來說:
用mi−mi得到:
mi====mi+(Ni−11y∈{τi−y′}∑y−Ni−11NiNi−1y∈{τi}∑y)mi+Ni−11(y∈{τi−y′}∑y−NiNi−1y∈{τi}∑y)mi+Ni−11(NiNiy∈{τi}∑(y−y′)−NiNi−1y∈{τi}∑y)mi+Ni−11[y−mi](2.2)
- 對於得到樣本的來說:
mk=mk+Nk+11[y−mk](2.2)
對應的,誤差平方和也變爲:
Ji=Jk=Ji+Ni−1Ni∣∣y−mi∣∣2Jk+Nk+1Nk∣∣y−mk∣∣2(2.3)
如果移出一個樣本會帶來某一類均方誤差的減少,移入這個樣本會帶來另一類均方誤差的增大,如果減少量大於增大量,那麼
Ni−1Ni∣∣y−mi∣∣2>Nk+1Nk∣∣y−mk∣∣2(2.3)
則認爲該操作是合理的,否則不移動。
1.3. 具體步驟
- 初始劃分c個聚類,計算出這c類的均值和總的均方誤差和Je。
- 任取一個樣本y,設y∈τi
- 計算公式(2.3),其中,k是除了i之外的所有類。
- 如果移出的損失大於所有移入的損失,則不移動,否則移入損失最小的類中。
- 重新計算這c類的均值和總的均方誤差和Je。
- 若連續N次Je都不發生改變,則停止,否則轉(2).
1.4. 初始化類的方法
1.4.1 選擇代表點
- 經驗選擇
- 將全部數據隨機劃分成c類,計算每一類的重心,以重心爲代表點。
- 按照樣本天然的排列順序選擇c前c個點作爲代表
1.4.2 初始類劃分
- 根據其餘點與代表點的距離進行劃分
- 每個代表點自成一類,將樣本按順序歸入該類中,每次某一類的數量發生改變,則重新計算該類的重心。
2. IOSDATA
2.1 簡介
ISODATA全稱爲Iterative Self-Organizing Data Analysis Techniques:迭代自組織數據分析技術,可以看做是改進的C-means算法,與C-means的區別在於:
- C-Means在每次樣本所屬類別發生變化時,就計算一次均值;而ISODATA 則是在全部樣本調整完成之後才重新計算各類的均值。
- ISODATA算法在聚類的過程中引入了對類別的評判準則,根據這些準則可以將某些類別合併或者分裂,使得聚類結果更加合理。
2.2 算法流程
2.2.1 符號釋義
- 樣本集{y1,y2,...,yN},其中yi代表第i個樣本,是一個1×d維的向量。
- K:期望得到的聚類數
- θN:一個聚類中最少的樣本數目
- θs:標準偏差參數
- θc:合併參數
- L:每次迭代允許合併的最大聚類對數
- I:允許迭代的次數
2.2.2 算法步驟
- 初始化聚類數目c(不一定要是K),初始化的方法與C均值差不多,選取代表點。
- 判斷其餘點與代表點的距離,按照距離對其餘點進行劃分。
- 若某個類τj中樣本的數目過少(Nj<θN),則去掉該類,將該類中的樣本分配到其他類中,聚類的數目c=c−1
- 重新計算每一類的均值。
mj=Nj1y∈τj∑y
- 計算第j類中,樣本與該類均值的平均距離:
δjˉ=Nj1y∈τj∑∣∣y−mj∣∣,j=1....c
總平均距離:
δˉ=N1i=1∑cNiδiˉ
- 如果滿足迭代次數滿足要求,則結束;如果c⩽K/2,則執行分裂操作 ;如果c⩾2K,則執行合併操作。
- 如果是最後一次迭代,停止,否則轉向2。
2.2.3 分裂操作
-
對於每個類,求各維標準偏差σj=[σj1,σj2,...,σjd]T,(大白話就是對第j類中的每一個特徵都計算其標準差),具體計算公式爲:
σji=N1yk∈τj∑(yki−mji)
在上式中,yki爲第k個樣本的第i個特徵,mji代表第j個聚類均值的第i個分量;σji是第j個類的第i個分量的標準偏差。
-
對每個類,求出標準偏差最大的分量σjmax,j=1,2,...,c。(其實就相當於落實到某一個類的某個特徵上)
-
對各類的σjmax,如果滿足以下條件(注意,這裏僅僅是選出了兩個代表點而已):
- 存在某個類的σjmax>θs,δjˉ>δˉ,Nj>2(θN+1)
- 存在某個類的σjmax>θs,δjˉ>δˉ,c⩽K/2
將τj分成2類,中心分別爲mj+與mj−,此時c=c+1,其中,mj+與mj−的計算公式爲:
mj+=mj+γjmj−=mj−γj
γj=kσj,k∈(0,1]或者,γj=[0,...,0,σimax,0,...,0]T
2.2.4 合併操作
- 計算各類中心兩兩之間的距離
δij=∣∣mi−mj∣∣,i,j=1,2,...,c,i=j
- 比較δij與θc(合併參數),對**小於θc**的距離排序:
δi1,j1<δi2,j2,...,δil,jl
- 從最小的δi1,j1開始把每個δil,jl對應的mil,mjl合併,組成新類,新的中心爲:
ml=Nil+Njl1[Nilmil+Njlmjl]
3. 基於樣本與核相似度的動態聚類算法
3.1 C-Means與IOSDATA面臨的問題
如果數據樣本的兩類分佈如下圖所示,這個時候兩類的均值不能很好的代表一類,雖然二者都服從正態分佈,但是方差比較大,那麼,在圖中A點明顯距離第二類比較近,這可能會導致分類錯誤。
所以,這個時候需要使用其他方法代表每個聚類。
在C-Means中,準則函數爲:整個樣本空間上的誤差平方和爲
Je=i=1∑cy∈τi∑∣∣y−mi∣∣2(1.2)
Je越小,**說明聚類結果越優。
針對目前這種分佈,我們選用的準則函數爲:
JK=i=1∑cy∈τj∑Δ(y,Kj)(1.2)
其中,Δ表示某種距離度量,JK越小,說明聚類結果越優。
3.2 具體步驟
- 選擇初始劃分,將樣本集劃分成c類,確定每類的初始核Kj,j=1,2,...,c。
- 按照下列規則將每個樣本劃分到對應的類中。
Δ(y,Kj)=kminΔ(y,Kk),k=1,2,...,c
則y∈τj
- 重新修正核Kj,j=1,2,...,c,若k不變,則算法終止,否則轉2.
相對的,在C-Means中,類均值對應核,樣本到均值的歐式距離相當於Δ(y,Kj)
3.3 常用的核函數
3.3.1 正態核函數
如果數據分佈類似於下圖:
則可選用正態核:
Kj(y,Vj)=(2π)d/2∣Σj^∣1/21exp{−21(y−mj)TΣj^−1(y−mj)}
其中,參數集Vj包括:mj,Σj^,分別代表第j類的樣本均值和協方差矩陣。
樣本到核的相似性度量爲:
Δ(y,Kj)=21(y−mj)TΣj^−1(y−mj)+21log∣Σj^∣
3.3.2 主軸核函數
4. 模糊C-Means方法(Fuzzy C-means, FCM)
4.1 模糊集的基本知識
4.1.1 什麼是模糊集
在傳統的集合中,一個元素要麼屬於一個集合,要麼不屬於一個集合。但是在模糊集中,一個元素可以是以一定程度屬於某個集合,也可以以不同程度的屬於多個集合。
4.1.2 隸屬度函數
隸屬度函數是一個對象x隸屬於集合A的程度。記爲μA(x)。自變量是集合A中的所有對象,0≤μA(x)≤1。當μA(x)=1說明x完全屬於A;μA(x)=0說明x完全不屬於A。
模糊集合A:
對於有限個對象x1,x2,...,xn來說,若這n個值都可能存在於集合A中,則模糊集合A可以表示爲:
A={(μA(xi),xi)}(4.1)
或者
A=i⋃μi/xi(4.2)
支持集S(A):
空間X中A的隸屬度大於0的對象的集合。
S(A)={x,x∈X,μA(x)>0}(4.3)
4.3 算法思想
4.3.1 符號說明
- n個樣本集合:{xi,i=1,2,...,3}
- 預定類別的數目: c
- 每個聚類的中心:mi,i=1,2,...,c
- 第i個樣本對於第j類的隸屬度:μj(xi)
(因爲模糊集表示的是樣本屬於某個類的程度,所以要考慮所有的樣本)
模糊C-means的聚類損失函數可以寫成:
Jf=j=1∑ci=1∑n[μj(xi)]b∣∣xi−mj∣∣2(4.4)
C-means中的聚類損失函數爲:
Je=i=1∑cy∈τi∑∣∣y−mi∣∣2(1.2)
在公式4.4中,b代表控制聚類結果模糊程度的常數,通常爲2。
- b=1:等同於C-means的確定性聚類結果
- b>1:控制模糊程度的聚類結果
- b→∞:完全模糊的解,各類算法都收斂到訓練樣本的中心,所有樣本都以等同的概率歸屬各個類,所以沒有聚類的意義。
4.3.2 FCM的損失函數
要求一個樣本對於各個聚類的隸屬度之和爲1,用公式表示爲∑j=1cμj(xi)=1,i=1,2,...,n,結合限制條件,可以求得:
minJf=j=1∑ci=1∑n[μj(xi)]b∣∣xi−mj∣∣2s.t.j=1∑c[μj(xi)]=1,i=1,2,...,n(4.5)
引入n個拉格朗日因子:
minJf=j=1∑ci=1∑n[μj(xi)]b∣∣xi−mj∣∣2−i=1∑nλi(j=1∑c[μj(xi)]−1)(4.6)
對均值mj求導有:
∂mj∂Jfmj=−2i=1∑n[μj(xi)]b∣∣xi−mj∣∣=−2i=1∑n[μj(xi)]bxi+2i=1∑n[μj(xi)]bmj=[μj(xi)]b[μj(xi)]bxi(4.7)
對隸屬度μj(xj)求導,記μj(xj)爲μji,後一半的求導結果爲:
∂μji∂Jf=−∂μji∂i=1∑nλi(j=1∑c[μji]−1)=−∂μji∂i=1∑n(j=1∑cλi[μji]−λi)=−i=1∑nj=1∑cλi=−i=1∑ncλi(4.8)
前一半的求導結果爲:
∂μji∂Jf=i=1∑nj=1∑cbμjib−1∣∣xi−mj∣∣2
即令:
∂μji∂Jf=i=1∑nj=1∑cbμjib−1∣∣xi−mj∣∣2−i=1∑ncλi=0=i=1∑n(j=1∑cbμjib−1∣∣xi−mj∣∣2−cλi)=0(4.9)
即相當於:
j=1∑cbμjib−1∣∣xi−mj∣∣2−cλi=j=1∑c(bμjib−1∣∣xi−mj∣∣2−λi)=⇒bμjib−1∣∣xi−mj∣∣2−λi=⇒μji=000(b∣∣xi−mj∣∣2λi)b−11(4.10)
因爲:
j=1∑c[μji]=1
所以(等式4.11中,注意λib−11實際上是在分母的位置)
j=1∑c(b∣∣xi−mj∣∣2λi)b−11(b∣∣xi−m1∣∣2λi)b−11+...+(b∣∣xi−mc∣∣2λi)b−11(λi)b−1−1∑j=1c(b∣∣xi−mj∣∣2)b−1−1j=1∑c(b∣∣xi−mj∣∣2)b−1−1∑j=1c(b∣∣xi−mj∣∣2)b−1−11=∑j=1c((b∣∣xi−mj∣∣2)1)b−111==1=1=1=(λi)b−1−1(λi)b−11(λi)b−11(4.11)
將4.11代入4.10
⇒μji====(b∣∣xi−mj∣∣2λi)b−11(b∣∣xi−mj∣∣2)b−11∑j=1c((b∣∣xi−mj∣∣2)1)b−111∑j=1c((b∣∣xi−mj∣∣2)1)b−11(b∣∣xi−mj∣∣2)b−111∑j=1c((∣∣xi−mj∣∣2)1)b−11(∣∣xi−mj∣∣2)b−111(4.12)
4.3.3 具體步驟
- 設定聚類數目c和參數b
- 初始化各個聚類的中心mi
- 重複下列運算,直到各個樣本的隸屬度穩定
- 根據聚類中心mj計算隸屬度函數μj(xi)
- 使用隸屬度函數μj(xi)更新隸屬度。
5. 改進後的模糊C-Means方法
5.1 算法思想
FZM算法從樣本的歸屬性方面進行了改進,但是針對野點的情況無法有效的解決。設想這樣一種情況,某個樣本遠離各類的聚類中心,而FCM中要求該樣本對於各類的隸屬度之和爲1,即∑j=1c[μj(xi)]=1,i=1,2,...,n,這樣某個野點對最終的迭代效果具有很大的影響。
因此,爲了克服此類情況,人們對限制條件進行了修改:
j=1∑ci=1∑n[μj(xi)]=n,i=1,2,...,n(5.1)
在該條件下,拉格朗日函數爲:
minJf=j=1∑ci=1∑n[μj(xi)]b∣∣xi−mj∣∣2−i=1∑nλi(k=1∑nj=1∑c[μj(xi)]−n)(5.2)
對均值mj求導結果不變,仍然爲:
∂mj∂Jfmj=−2i=1∑n[μj(xi)]b∣∣xi−mj∣∣=−2i=1∑n[μj(xi)]bxi+2i=1∑n[μj(xi)]bmj=[μj(xi)]b[μj(xi)]bxi(5.3)
對隸屬度μj(xj)求導,記μj(xj)爲μji,前一半的結果不變,後一半的求導結果爲:
∂μji∂Jf=−∂μji∂i=1∑nλi(k=1∑nj=1∑c[μji]−1)=−∂μji∂i=1∑n(k=1∑nj=1∑cλi[μji]−λi)=−i=1∑nk=1∑nj=1∑cλi=−i=1∑nk=1∑ncλi(5.4)
後面的推導思想同(4.9)~(4.12),最後的結果爲:
⇒μji=∑j=1c∑k=1n((∣∣xi−mj∣∣2)1)b−11(∣∣xi−mj∣∣2)b−11n(5.5)
5.2 改進FCM的缺點
- 與C-means一樣,仍然對聚類的初始值十分敏感,通常將使用C-means或者FCM處理樣本後得到的結果作爲初始值。
- 如果在迭代過程中出現某個聚類中心距離某個樣本非常近,則最後可能得到只包含這一個樣本的聚類
6. 參考文獻