1. 程式人生 > >模式識別(Pattern Recognition)學習筆記(三十六)-- 動態聚類演算法

模式識別(Pattern Recognition)學習筆記(三十六)-- 動態聚類演算法

如果不估計樣本的概率分佈,就無法從概率分佈的角度來定義聚類,這時我們就需要有一種新的對聚類的定義,一般的,根據樣本間的某種距離或某種相似性度量來定義聚類,即把相似的或距離近的樣本聚為一類,而把不相似或距離遠的樣本聚在其他類,這種基於相似性度量的聚類方法在實際應用中非常常用,主要可以分為動態聚類法和分層聚類法,本篇部落格我們主要來介紹常用動態聚類的方法。

動態聚類方法是一中普遍被採用的方法,具有以下三個要素:1)選定某種距離度量作為樣本間的相似性度量;2)確定某種可以評價聚類結果質量的準則函式;3)給定某個初始分類,然後用迭代演算法找出使得準則函式取極值的最好聚類結果。

一 K-Means聚類演算法

   K-Means聚類又叫C均值聚類,其基本思想是,通過迭代找到k個聚類的一種劃分方案,使得用這k個聚類的均值來表示相應各類樣本時所得到的總體誤差最小,所以K-Means是一種基於最小誤差平方和準則的聚類演算法。由於它在向量量化和影象分割上也有很廣泛的應用,所以有時也被稱為廣義Glogd演算法,簡稱GLA。

1.主要原理

 若Ni是第i個聚類的樣本數目,樣本均值為:       (1)

中各樣本與均值間的誤差平方和對所有類求和為:                (2)

為聚類結果的準則函式;對於不同的聚類,準則函式的值是不同的,但是能使其值極小的聚類才是誤差平方和準則下的最優結果,這種型別的聚類通常被稱為最小方差劃分。

由於上述準則函式是樣本集和聚類集合的函式,所以無法用解析的方法最小化,只能用迭代來解決,下面我們先來看看調整樣本類別劃分的方法。

假設已經有一個劃分方案,它把樣本y劃分在中,接下來假設對它做如下調整:

如果把樣本y從聚類中移到聚類中,這時兩個聚類的均值變為:



同時,對應的誤差平方和也變為:



由於其他聚類都沒有發生變化,所以總體誤差平方和的變化僅僅取決於上述兩個公式的變化。顯然,移出一樣本會導致類的平方誤差減小,而移入會導致增大,如果減小量大於增加量,則當前進行的樣本移動就有利於總體誤差平方和的減少,於是就進行這一移動操作,否則的話不操作。

2.核心思想

1)初始劃分k個聚類,利用公式(1)和(2)分別計算出各聚類的均值和誤差平方和;

2)任意取出一個樣本y,假設;

3)如果樣本數目等於1,則跳至2),否則繼續;

4)計算增加量和減小量:



j≠i;

5)考察增加量中的最小量,如果,就把樣本y從移到

6)重新計算各聚類的均值和誤差平方和;

7)在連續n次迭代後,如果總的誤差平方和不再改變,就停止迭代,否則跳至2);

不難看出,這是一個區域性搜尋演算法,並不能保證收斂到全域性最優解,且演算法的結果收初始劃分和樣本調整順序的影響。

初始劃分的方法有很多,一般的做法是,先選擇一些代表樣本點作為初始聚類的核心,然後根據距離把其餘的樣本劃分到各初始類中,代表點的選取有以下常用方法:

1)經驗:利用經驗確定聚類數,從資料中找出從直觀上看來是比較適合的代表點;

2)隨機:將全部資料隨機分成k類,計算每類的質心,將這些質心點作為每類的代表點;

3)按照樣本的自然排列順序或者將樣本隨機排序後用前k個數據點作為代表點;

4)先把全體樣本看做是一個大的聚類,代表點為其均值,然後確定兩個聚類問題的代表點,就是一聚類劃分的總均值和離它最遠的點,以此類推,得到k個聚類問題的代表點;

另外關於聚類數目k的確定,通常來說數目越多,誤差越小,當每一個樣本都自成一類時,誤差等於0,當然這是現實情況中不會發生的,實際應用中可以根據具體應用領域比較聚類結果,來決定那個聚類數目比較合理。

總結:K-Means演算法中,每調整一個樣本,就要重新計算一次均值和誤差,這種更改均值的方法屬於逐個樣本的修正;

演算法的難點:聚類數目的動態決定,類的合併與分裂;

二 ISODATA演算法

1.與K-Means演算法的不同

ISODATA演算法,叫做迭代自組織資料分析技術,可以看做是K-Means的一種改進,他們之間主要有兩點不同:1)ISODATA演算法不是每調整一個樣本的類別就更新一次各類的均值,而是在把全部樣本調整完後才更新計算各類的均值,相比於K-Means的逐個樣本修正,這種均值的更新方法叫做成批樣本修正,可以提高計算效率;2)ISODATA演算法在聚類過程中引入了對類別的評判準則,可以根據這些準則自動的將某些類別合併或分裂,從而得到更合理的聚類結果,也在一定程度上打破了事先給定類別數目的限制。

2.ISODATA演算法的演算法步驟

設有N個樣本組成的樣本集為,設定以下引數:

:期望得到的聚類數

:一個聚類中的最少樣本數

:標準差引數

:合併引數

:每次迭代允許合併的最大聚類對數

:最大迭代次數

1)初始化,設定初始聚類數c(不一定等於K),利用與K-Means相同的辦法確定c個初始中心

2)把所有樣本分到距離初始中心最近的類

3)如果某個類中樣本數目過少,即,則簡介去掉該類:根據個樣本到其他類中心的而距離分別合併入其他類,同時置c=c-1;

4)重新計算均值:


5)計算第j類樣本與其中心的平均距離和總平均距離:



6)如果達到最大迭代次數,停止;否則:

若當前聚類數c≤K/2,分裂轉7);

若當前聚類數c≥2K,或是偶數次迭代,合併轉8);

7)聚類的分裂

     a.對每各類,運用如下公式求出各維標準差:


其中,是第k個樣本的第i個分量;是當前第j個聚類中心的第i個分量;是第j類第i個分量的標準差;d為樣本維數;

     b.對每個類,求出標準差最大的分量;

     c.對各類的,若存在某個類的> ,且,或c≤K/2,則將分裂為兩類,置c=c+1,分裂的兩類中心分別為:



其中,分裂項可以為,0<k≤1;也可以為,即只在對應的特徵分量上把這一類分開。

8)聚類的合併

a.計算各類中心每兩個之間的距離

b.比較,對小於者進行升序排列:

c.從最小的開始,把每個對應的合併,組成新類,新的中心為:,同時置c=c-1,注意每一次迭代中要避免同一類被合併兩次;

9)若是最後一次迭代,終止;否則迭代次數加1,轉2);