聚類算法——ISODATA算法


1. 與K-均值算法的比較
–K-均值算法通常適合於分類數目已知的聚類,而ISODATA算法則更加靈活;
–從算法角度看, ISODATA算法與K-均值算法相似,聚類中心都是通過樣本均值的迭代運算來決定的;
–ISODATA算法加入了一些試探步驟,並且可以結合成人機交互的結構,使其能利用中間結果所取得的經驗更好地進行分類。
 
2. ISODATA算法基本步驟和思路

(1)  選擇某些初始值。可選不同的參數指標,也可在迭代過程中人為修改,以將N個模式樣本按指標分配到各個聚類中心中去。

(2)  計算各類中諸樣本的距離指標函數。

(3)~(5)按給定的要求,將前一次獲得的聚類集進行分裂和合並處理((4)為分裂處理,(5)為合並處理),從而獲得新的聚類中心。

(6)  重新進行迭代運算,計算各項指標,判斷聚類結果是否符合要求。經過多次迭代后,若結果收斂,則運算結束。

3. ISODATA算法流程圖:

4.ISODATA算法

第一步:輸入$N$個模式樣本$\{x_i, i = 1, 2, …, N\}$

           預選$N_c$個初始聚類中心$\{ z_1 ,z_2 , \ldots z_{N_c } \} $,它可以不等於所要求的聚類中心的數目,其初始位置可以從樣本中任意選取。

           預選:$K$  = 預期的聚類中心數目;

                    $\theta_N$ = 每一聚類域中最少的樣本數目,若少於此數即不作為一個獨立的聚類;

                    $\theta_S$ = 一個聚類域中樣本距離分布的標准差;

                    $\theta_c$= 兩個聚類中心間的最小距離,若小於此數,兩個聚類需進行合並;

                    $L$= 在一次迭代運算中可以合並的聚類中心的最多對數;

                    $ I$  = 迭代運算的次數。

第二步:將$N$個模式樣本分給最近的聚類$S_j$,假若$D_j = \min \{ \left\| {x - z_i } \right\|,i = 1,2, \cdots N_c \} $

           ,即$||x-z_j||$的距離最小,則$x \in S_j $。

第三步:如果$S_j$中的樣本數目SjN,則取消該樣本子集,此時Nc減去1。

           (以上各步對應基本步驟(1))

 

第四步:修正各聚類中心

\[
\begin{array}{*{20}c}
{z_j = \frac{1}{{N_j }}\sum\limits_{x \in S_j } x ,} & {j = 1,2, \cdots ,N_c } \\
\end{array}
\]

第五步:計算各聚類域Sj中模式樣本與各聚類中心間的平均距離

\[
\begin{array}{*{20}c}
{\bar D_j = \frac{1}{{N_j }}\sum\limits_{x \in S_j } {\left\| {x - z_j } \right\|} ,} & {j = 1,2, \cdots ,N_c } \\
\end{array}
\]

第六步:計算全部模式樣本和其對應聚類中心的總平均距離

\[
\bar D = \frac{1}{N}\sum\limits_{j = 1}^N {N_j \bar D_j }
\]

(以上各步對應基本步驟(2))

 

第七步:判別分裂、合並及迭代運算

  1. 若迭代運算次數已達到I次,即最后一次迭代,則置θc =0,轉至第十一步。
  2. 若$N_c \le \frac{K}{2}$
    ,即聚類中心的數目小於或等於規定值的一半,則轉至第八步,對已有聚類進行分裂處理。
  3. 若迭代運算的次數是偶數次,或$N_c \ge 2K$
    ,不進行分裂處理,轉至第十一步;否則(即既不是偶數次迭代,又不滿足$N_c \ge 2K$),轉至第八步,進行分裂處理。

(以上對應基本步驟(3))

 

第八步:計算每個聚類中樣本距離的標准差向量

\[
\sigma _j = (\sigma _{1j} ,\sigma _{2j} , \ldots ,\sigma _{nj} )^T
\]

          其中向量的各個分量為

\[
\sigma _{ij} = \sqrt {\frac{1}{{N_j }}\sum\limits_{k = 1}^{N_j } {(x_{ik} - z_{ij} )^2 } }
\]

          式中,i = 1, 2, …, n為樣本特征向量的維數,j = 1, 2, …, Nc為聚類數,Nj為Sj中的樣本個數。

第九步:求每一標准差向量{σj, j = 1, 2, …, Nc}中的最大分量,以{σjmax, j = 1, 2, …, Nc}代表。

第十步:在任一最大分量集{σjmax, j = 1, 2, …, Nc}中,若有σjmaxS ,同時又滿足如下兩個條件之一:

  1. $\bar D_j > \bar D$和Nj > 2(θN + 1),即Sj中樣本總數超過規定值一倍以上,
  2. $N_c \le \frac{K}{2}$

       則將zj 分裂為兩個新的聚類中心和,且Nc加1。 中對應於σjmax的分量加上kσjmax,其中;中對應於σjmax的分量減去kσjmax

       如果本步驟完成了分裂運算,則轉至第二步,否則繼續。

      (以上對應基本步驟(4)進行分裂處理)

 

第十一步:計算全部聚類中心的距離

                  \[D_{ij} = || z_i - z_j ||,i = 1, 2, …, N_c-1 ,j =i+1, …, N_c\]

第十二步:比較Dij 與θc 的值,將Dijc 的值按最小距離次序遞增排列,即

\[
\{ D_{i_1 j_1 } ,D_{i_2 j_2 } , \ldots ,D_{i_L j_L } \}
\]

             式中$D_{i_1 j_1 } < D_{i_2 j_2 } < \ldots < D_{i_L j_L } $。

第十三步:將距離為$D_{i_kj_k}$的兩個聚類中心$Z_{i_k}$和$Z_{j_k}$合並,得新的中心為:

              \[z_k^\ast= \frac{1}{{N_{i_k } + N_{j_k } }}[N_{i_k } z_{i_k } + N_{j_k } z_{j_k } ],k = 1,2, \cdots ,L\]

              式中,被合並的兩個聚類中心向量分別以其聚類域內的樣本數加權,使$Z_k^\ast$為真正的平均向量。

             (以上對應基本步驟(5)進行合並處理)

 

第十四步:如果是最后一次迭代運算(即第I次),則算法結束;否則,若需要操作者改變輸入參數,轉至第一步;若輸入參數不變,轉至第二步。

              在本步運算中,迭代運算的次數每次應加1。

 [算法結束]

5.例子:試用ISODATA算法對如下模式分布進行聚類分析:

\[\{x_1(0,0),x_2(3,8),x_3(2,2),x_4(1,1),x_5(5,3),x_6(4,8),x_7(6,3),x_8(5,4),x_9(6,4),x_{10}(7,5)\}\]

 

我們可以知道,N=10,n=2。假設取初始值$N_c=1$,z1=x1=(0 0)T,則運算步驟如下:

(1)   設置控制參數

            取K=3,θN=1,θS=1,θc=4,L=1,I=4

(2)   按最小距離原則將模式集(xi)中每個模式分到某一類中。

          由於此時只有一個聚類中心,因此S1={x1, x2, …, x10},N1=10

(3)   因N1N ,無子集可拋

(4)   修改聚類中心

\[
z_1 = \frac{1}{{N_1 }}\sum\limits_{x \in S_1 } {x = \left( {\begin{array}{*{20}c}
{3.9} \\
{3.8} \\
\end{array}} \right)}
\]

(5)   計算模式樣本與聚類中心間的平均距離$\bar D_1 $

\[
{\bar D_1 = \frac{1}{{N_1 }}\sum\limits_{x \in S_1 } {\left\| {x - z_1 } \right\|} = 3.0749}
\]

(6)   計算全部模式樣本和其對應聚類中心的總平均距離

\[
\bar D = \bar D_1 = 3.0749
\]

(7)   因不是最后一次迭代,且$N_c<K/2$,進入(8)

(8)   計算S1中的標准差向量

\[
\sigma _1 = \left( {\begin{array}{*{20}c}
{2.2113} \\
{2.5219} \\
\end{array}} \right)
\]

(9) $\sigma_{1\max}$  中的最大分量是2.5219,因此 $\sigma_{1\max}= 2.5219$。

(10)因$\sigma_{1\max}>\theta_s$ 且$N_c<\frac{K}{2}$,可將z1分裂成兩個新的聚          類。設$r_j = 0.5\sigma _{1\max } \approx 1.261$.則

\[
z_1^ + = \left( {\begin{array}{*{20}c}
{3.9} \\
{5.061} \\
\end{array}} \right),z_1^ - = \left( {\begin{array}{*{20}c}
{3.9} \\
{2.539} \\
\end{array}} \right)
\]

           為方便起見,將$z_1^+$和$z_1^-$表示為z1和z2,Nc加1 ,$N_c=2$.

(11)   重新進行分類

樣本點

特征值

到z1的距離

到z2的距離

聚類結果

X1

0

0

6.3893

4.6537

S2

X2

3

8

3.0737

5.5347

S1

X3

2

2

3.6027

1.975

S2

X4

1

1

4.9902

3.2831

S2

X5

5

3

2.3362

1.1927

S2

X6

4

8

2.9407

5.4619

S1

X7

6

3

2.9424

2.15

S2

X8

5

4

1.5283

1.8288

S1

X9

6

4

2.3528

2.5582

S1

X10

7

5

3.1006

3.9581

S1

\[
{\rm{S}}1 = \{ {\rm{x2,x6,x8,x9,x10\} ,N}}_1 = 5
\]

\[
{\rm{S2 = \{ x1,x3,x4,x5,x7\} ,N}}_2 = 5
\]

(12)   因N1N 且N2N,無子集可拋。

(13)   修改聚類中心

\[
{z_1 = \frac{1}{{N_1 }}\sum\limits_{x \in S_1 } {x = \left( {\begin{array}{*{20}c}
5 \\
{5.8} \\
\end{array}} \right)} }
\]

\[
{z_2 = \frac{1}{{N_2 }}\sum\limits_{x \in S_2 } {x = \left( {\begin{array}{*{20}c}
{2.8} \\
{1.8} \\
\end{array}} \right)} }
\]

(14)   計算模式樣本與聚類中心間的平均距離$\bar D_j ,j=1,2$

\[
{\bar D_1 = \frac{1}{{N_1 }}\sum\limits_{x \in S_1 } {\left\| {x - z_1 } \right\|} = {\rm{ 2}}{\rm{.2806}}}
\]

\[
{\bar D_2 = \frac{1}{{N_2 }}\sum\limits_{x \in S_2 } {\left\| {x - z_2 } \right\|} = {\rm{2}}{\rm{.4093}}}
\]

(15)   計算全部模式樣本和其對應聚類中心的總平均距離$\bar D$

\[
\bar D = \frac{1}{N}\sum\limits_{j = 1}^N {N_j \bar D_j } = \frac{1}{{10}}\sum\limits_{j = 1}^2 {N_j \bar D_j = {\rm{2}}{\rm{.345}}}
\]

(16)   因是偶數次迭代,所以進行合並

(17)   計算聚類對之間的距離

\[
{D_{12} = \left\| {z_1 - z_2 } \right\| = {\rm{4}}{\rm{.5651}}}
\]

(18)   比較$D_{12}$ 與θc ,$D_{12}$>θc,所以聚類中心不發生合並

(19)   沒有達到所需的聚類數,所以繼續進行,重新分類

樣本點

特征值

到z1的距離

到z2的距離

聚類結果

X1

0

0

7.6577

3.3287

S2

X2

3

8

2.9732

6.2032

S1

X3

2

2

4.8415

0.82462

S2

X4

1

1

6.2482

1.9698

S2

X5

5

3

2.8

2.506

S2

X6

4

8

2.4166

6.3151

S1

X7

6

3

2.9732

3.4176

S1

X8

5

4

1.8

3.1113

S1

X9

6

4

2.0591

3.8833

S1

X10

7

5

2.1541

5.2802

S1

\[
{\rm{S}}1 = \{ {\rm{x2,x6,x7,x8,x9,x10\} ,N}}_1 = 6
\]

\[
{\rm{S2 = \{ x1,x3,x4,x5\} ,N}}_2 = 4
\]

(20)   因N1N 且N2N,無子集可拋。

(21)   修改聚類中心

\[
{z_1 = \frac{1}{{N_1 }}\sum\limits_{x \in S_1 } {x = \left( {\begin{array}{*{20}c}
{{\rm{5}}{\rm{.1667}}} \\
{{\rm{5}}{\rm{.3333}}} \\
\end{array}} \right)} }
\]

\[
{z_2 = \frac{1}{{N_2 }}\sum\limits_{x \in S_2 } {x = \left( {\begin{array}{*{20}c}
2 \\
{1.5} \\
\end{array}} \right)} }
\]

(22)   計算模式樣本與聚類中心間的平均距離,$\bar D_1,j=1,2$

\[
{\bar D_1 = \frac{1}{{N_1 }}\sum\limits_{x \in S_1 } {\left\| {x - z_1 } \right\|} = {\rm{2}}{\rm{.2673}}}
\]

\[
{\bar D_2 = \frac{1}{{N_2 }}\sum\limits_{x \in S_2 } {\left\| {x - z_2 } \right\|} = {\rm{1}}{\rm{.868}}}
\]

(23)   計算全部模式樣本和其對應聚類中心的總平均距離$\bar D$

\[
\bar D = \frac{1}{N}\sum\limits_{j = 1}^N {N_j \bar D_j } = \frac{1}{{10}}\sum\limits_{j = 1}^2 {N_j \bar D_j = {\rm{ 2}}{\rm{.1076}}}
\]

(24)   此次是奇數次迭代,並且$N_c>\frac{K}{2}$,所以進行分裂操作

(25)   計算${\rm{S}}1 = \{ {\rm{x2,x6,x7,x8,x9,x10\} }}$

和$S21 = \{ x1,x3,x4,x5\} $

的標准差

\[
\sigma _1 = \left( {\begin{array}{*{20}c}
{1.3437} \\
{1.972} \\
\end{array}} \right),\sigma _2 = \left( {\begin{array}{*{20}c}
{1.8708} \\
{1.118} \\
\end{array}} \right)
\]

(26)${\rm{\sigma }}_{{\rm{1max}}} {\rm{ = 1}}{\rm{.972,\sigma }}_{{\rm{2max}}} {\rm{ = 1}}{\rm{.8708}}$

(27)此時,$\sigma_{1\max}=1.972>\theta_s,N_1=6>2(\theta_N+1)=4$且$\bar D_1>\bar D $,所以滿足分裂的條件,將S1進行分裂。

設$\r_j=0.5\sigma_{1\max}\approx 0.986$,則

\[
{z_1^ + = \left( {\begin{array}{*{20}c}
{{\rm{5}}{\rm{.1667}}} \\
{{\rm{6}}{\rm{.3193}}} \\
\end{array}} \right),z_1^ - = \left( {\begin{array}{*{20}c}
{{\rm{5}}{\rm{.1667}}} \\
{{\rm{4}}{\rm{.3473}}} \\
\end{array}} \right)}
\]

 為方便起見,將$Z_1^+$和$Z_^-$表示為$Z_{11}$和$Z_{12}$,$N_c$加1,$N_c=3$.

(28)重新進行分類

樣本點

特征值

到的距離

到的距離

到的距離

聚類結果

X1

0

0

8.1626

6.7523

2.5

S2

X2

3

8

2.7421

4.247

6.5765

S11

X3

2

2

5.3558

3.9418

0.5

S2

X4

1

1

6.7569

5.3447

1.118

S2

X5

5

3

3.3235

1.3576

3.3541

S12

X6

4

8

2.046

3.8345

6.8007

S11

X7

6

3

3.4223

1.5842

4.272

S12

X8

5

4

2.3253

0.38524

3.9051

S12

X9

6

4

2.4645

0.90278

4.717

S12

X10

7

5

2.2587

1.946

6.1033

S12

\[S11=\{x2,x6\},N_{11}=2\]

\[S12=\{x5,x7,x8,x9,10\},N_{12}=5\]

(29)   因N11N 且N12N且N2N,無子集可拋

(30)   修改聚類中心

\[S2=\{x1,x3,x4\},N_2=3\]

\[
{z_{11} = \frac{1}{{N_{11} }}\sum\limits_{x \in S_{11} } {x = \left( {\begin{array}{*{20}c}
{3.5} \\
8 \\
\end{array}} \right)} }
\]

\[
{z_{12} = \frac{1}{{N_{12} }}\sum\limits_{x \in S_{12} } {x = \left( {\begin{array}{*{20}c}
{5.8} \\
{3.8} \\
\end{array}} \right)} }
\]

\[
{z_2 = \frac{1}{{N_2 }}\sum\limits_{x \in S_2 } {x = \left( {\begin{array}{*{20}c}
1 \\
1 \\
\end{array}} \right)} }
\]

(31)   計算模式樣本與聚類中心間的平均距離$\bar D_j$

\[
{\bar D_{11} = \frac{1}{{N_{11} }}\sum\limits_{x \in S_{11} } {\left\| {x - z_{11} } \right\|} = {\rm{ 0}}{\rm{.5}}}
\]

\[
{\bar D_{12} = \frac{1}{{N_{12} }}\sum\limits_{x \in S_{12} } {\left\| {x - z_{12} } \right\|} = {\rm{ 0}}{\rm{.9521}}}
\]

\[
{\bar D_2 = \frac{1}{{N_2 }}\sum\limits_{x \in S_2 } {\left\| {x - z_2 } \right\|} = {\rm{0}}{\rm{.94281}}}
\]

(32)   計算全部模式樣本和其對應聚類中心的總平均距離$\bar D$

\[
\bar D = \frac{1}{N}\sum\limits_{}^{} {N_j \bar D_j } = \frac{1}{{10}}\sum\limits_{}^{} {N_j \bar D_j = {\rm{0}}{\rm{.85889}}}
\]

(33)   因是偶數次迭代,所以進行合並

(34)   計算聚類對之間的距離

 

 Z11 Z12  Z13 
 Z11

0

4.7885

7.433

Z12 

4.7885

0

5.557

Z2 

7.433

5.557

0

所以

\[
{D_{1112} = \left\| {z_{11} - z_{12} } \right\| = {\rm{4}}{\rm{.7885 > }}\theta _c = 4}
\]

\[
{D_{112} = \left\| {z_{11} - z_2 } \right\| = 7.433{\rm{ > }}\theta _c = 4}
\]

\[
{D_{122} = \left\| {z_{12} - z_2 } \right\| = 5.557{\rm{ > }}\theta _c = 4}
\]

            故沒有可以合並的類

(35)   最后一次迭代,算法結束。

             最終的聚類結果是

\[
S_1 = \{ x_2 ,x_6 \} ,S_2 = \{ x_5 ,x_7 ,x_8 ,x_9 ,x_{10} \} ,S_3 = \{ x_1 ,x_3 ,x_4 \} ,N_2 = 3
\]

6 .聚類結果的評價
     迅速評價聚類結果,在上述迭代運算中是很重要的,特別是具有高維特征向量的模式,不能直接看清聚類效果,因此,可考慮用以下幾個指標來評價聚類效果:
    –聚類中心之間的距離
          •距離值大,通常可考慮分為不同類
    –聚類域中的樣本數目
          •樣本數目少且聚類中心距離遠,可考慮是否為噪聲
    –聚類域內樣本的距離方差
          •方差過大的樣本可考慮是否屬於這一類
 
     模式聚類目前還沒有一種通用的放之四海而皆准的准則,往往需要根據實際應用來選擇合適的方法。

 

該資料整理於國科大《模式識別》講稿和作業。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM