五、分群法
分群法(clustering)[7] 是一種最普遍將資料分類成群的方法,其主要的目 的乃在於找出資料中較相似的幾個群組(group),並找出各個群組的代表點,藉 以 達 到 降 低 資 料 數 目 的 目 的 。 這 些 分 好 類 的 成 群 資 料 便 泛 稱 「 叢 聚 」
(cluster)。
一 般 而 言 , 分 群 法 可 以 大 致 歸 為 「 階 層 式 分 群 法 」 ( hierarchical clustering)與「分割式分群法」(partitional clustering)兩大類,而整個分 群法流程可大略歸為下面三點:
1. 收集資料
2. 使用某種方法進行分群 3. 測試分群結果
4. 檢測分群結果,如果未達預期效果,則回到步驟二,再次進行分群
5 – 1. 階層式分群法
階層式分群法(hierarchical clustering)透過一種巢狀架構的方式,將資 料層層分裂或聚合,整個階層式分群法可以由圖 5-1.a 的樹狀結構來表示。如果採 用聚合的方式,階層式分群法可由樹狀結構的底部開始;如果採用分裂的方式,則 由樹狀結構的頂端開始層層分裂。
X1 X2 X3 X4 X5
圖 5-1.a 階層式分群法樹狀結構圖
5 – 1 - 1.階層式聚合演算法
階層式聚合演算法(hierarchical agglomerative algorithm)由樹狀結構的 底部開始層層聚合。一開始我們將每一筆資料視為一個叢聚(cluster),假設我 們現在擁有 n 筆資料,則將這 n 筆資料視為 n 個叢聚,亦即每個叢聚包含一筆資 料:
1. 將每筆資料視為一個叢聚C i
2. 找出所有叢聚間,距離最接近的兩個叢聚C 、i C j 3. 合併C 、 C 成為一個新的叢聚 i j
4. 假如目前的叢聚數目不只一個且多於我們預期的叢聚數目,則重複步驟二 在步驟二中,究竟何謂「距離最接近的兩個叢聚C 、 」呢?在單一連結聚 合演算法(single-linkage agglomerative algorithm)中,叢聚與叢聚間的距離 可以定義為不同叢聚中最接近兩點間的距離:
i Cj
) , ( min )
,
(
,a b
b
a
d
C C d
j
i C
j C
i
=
∈ ∈在完整連結聚合演算法(complete-linkage agglomerative algorithm)中,
叢聚間的距離定義為不同叢聚中最遠兩點間的距離:
) , ( max )
,
(
,a b
b
a
d
C C d
j
i C
j C
i
=
∈ ∈在平均連結聚合演算法(average-linkage agglomerative algorithm)中,
叢聚間的距離則定義為不同叢聚間各點與各點間距離總和的平均:
∑
∈∈
=
j j i
i C C C
C j
i
d
n C n
C d
b a
b a
,
) , 1 (
) , (
其中, 表示C 的資料個數。
Ci
n i
另外,我們也可以採用沃德法(Ward's method)來估測叢聚間的距離:
∑
∪∈
−
=
j
i C
C j
i
C C d
a
μ
a
2) , (
其中,μ表示Ci ∪Cj的平均值。
5 – 1 - 2.階層式分裂演算法
階層式分裂演算法(hierarchical divisive algorithm)顧名思義由樹狀結 構的頂端開始,如同細胞分裂般層層將直徑最大的叢聚一分為二,或者是更多更小
的叢聚,直到叢聚數目達到我們預期的目標。而所謂叢聚的直徑 D 指的是一個叢聚 中,最遠兩點間的距離。假設現在有一個叢聚 C,那麼 C 的直徑可以表示為:
) , ( max )
( , a b
b
a d
C
D = ∈C ∈C
在介紹階層式分裂演算法之前,我們要先定義某一點 x 與某個叢聚 C 的距離 d
(x, C)。假設叢聚 C 中包含 n 筆資料:
C x ) , 1 (
C x ) , 1 (
) , (
∈
∉
=
∑
∑
∈,
,
y
y x y x
x C
d n d
C d
−1
∈≠ y x y C
n
整個階層式分裂演算法的流程可概述如下:
1. 將全部的資料視為同一個叢聚
2. 在現有的叢聚中,挑出直徑最大的叢聚 C
3. 在 C 中找出最不相似的一點 x,亦即d(x, C)≧max(d(y, C)),其中 y 屬於 C 4. 將 x 由 C 中分裂出來形成新的叢聚 N。假設原有的叢聚 C 中仍剩下的資料稱為 Mc 5. 重複步驟六、七,直到 C 與 N 都不再變化
6. 計算 Mc中每筆資料 m 與叢聚 C 的距離及叢聚 N 的距離d(m, C)、d(m, N)
7. 假如d(m, C)大於 d(m, N),則將 m 由叢聚 C 分裂出來歸入 N
8. 如果目前的叢聚數目仍然少於資料個數且少於我們預期的標準,則回到步驟二
5 – 2. 分割式分群法
分割式分群法(partitional clustering)不像階層式分群法會進行一層層的 聚合、分裂程序,而是在一開始即給定分群的叢聚數目,然後藉著自動化的反覆修 正,達到分群的目的。
一般而言,分割式分群法的目的是希望盡量減小每個叢聚中,每一點與叢聚中 心(cluster center)的距離平方差(square error)。假設我們現在擁有一組包 含 K 個叢聚的資料,其中叢聚 C 中包含 nc筆資料(xi, x2, …, xnc),C 的叢聚中 心為 xc,則該叢聚的平方差 ec可以定義為:
∑
=−
= nc
i 1
)2
( i c
c x x
e
而這 K 個叢聚的總和平方差 E 便是每個叢聚的平方差總和:
∑
== K
j 1
ej
E
5 – 2 - 1.Forgy's Algorithm
在所有的分割式分群法(partitional clustering)之中,最基本的方法莫過 於 Forgy's algorithm [6] 了。在演算法開始進行前,我們必須事先決定好預期 分群的叢聚數目。假設預期的分群叢聚數目為 c,則 Forgy's algorithm 可概述如 下:
1. 隨機選取 c 的起始點,將之分別視為 c 個叢聚的群中心
2. 對每一個資料點 x,尋找與之最接近的群中心,並將 x 加入該叢聚
3. 檢查步驟二中是否有任何資料點的叢聚分配發生改變,如果沒有,則結束 Forgy's Algorithm
4. 計算新的叢聚中心(該叢聚中所有資料點的平均向量),並跳回步驟二
5 – 2 - 2.K-means Algorithm
K-means algorithm [18] 與 Forgy's algorithm 相當類似,最大的差別在於 K-means algorithm 具有線上即時更新群中心的特性,也有人將之稱為 C-means algorithm,在演算法開始進行前,一樣必須事先決定好預期分群的叢聚數目。假 設預期的分群叢聚數目為 k,則 K-means algorithm 可概述如下:
1. 隨機選取 c 的起始點,將之分別視為 c 個叢聚的群中心
2. 對每一個資料點 x,尋找與之最接近的群中心,並將 x 加入該叢聚,隨即計算新的 叢聚中心(該叢聚中原有的資料點加上 x 後的平均向量)
3. 檢查每一個資料點目前與之最接近的叢聚中心是否和他的叢聚分配一致,如果不 是,則回到步驟二
5 – 2 - 3.模糊 C-means 分群法
模糊 C-means 分群法(fuzzy C-means clustering)[12] 簡稱 FCM,乃是一 種根據 C-means algorithm 衍生而來的分群法,Bezdek 在 1973 年首先提出該方法 [13],透過模糊邏輯的概念,希望能進一步提升分群的效果。
FCM 與 C-means 最大的差異在於加入了模糊的概念,資料點 x 將不再絕對地屬 於任何叢聚,而是以一個介於 0-1 之間的數字來表示 x 隸屬於某個叢聚的程度。
假設我們現在預期的分群數目為 c(c1, c2, …, cc),整組資料包含 n 點(x1, x2, …, xn),則我們可以以一個 c×n 的矩陣 U 來表示每個資料點隸屬於每個叢聚
的程度。倘若我們針對其中一點 xj而言,他隸屬於各個叢聚的程度總和應該正好 等於 1。
)
(5 2 3.1
..., , 2 , 1 , 1
1
−
−
=
∀
∑
==
n j
u
c i
ij
根據矩陣 U,我們可以定義出我們的目標函數(objective function)J:
)
(5 2 3.2
) , ( ) ( )
,..., , ,
( 2
1 1
1
−
−
=
=
∑ ∑∑
= =
= i j
c 2
1 c c c x
c J u dist
U
J c
i n j
m ij c
i i
其中,m 為權重係數,可以是介於[1, ∞)之間的任何數。dist(ci,xj)是 ci與 xj之間的距離函數,一般皆直接採用歐幾里得距離。
為了滿足方程式(5-2-3.1)的先決條件,我們可以根據方程式(5-2-3.2)訂 出新的目的函數 Jnew:
)
(5 2 3.3
) 1 (
) , ( ) (
) 1 (
) ,..., , , ( ) ,..., , , ,..., , , (
1 1
2
1 1
1 1
2 1
−
−
− +
=
− +
=
∑ ∑
∑∑
∑ ∑
= =
= =
= =
n j
c i
ij j c
i n j
m ij
n j
c i
ij j n
new
u dist
u
u U
J U
J
λ λ λ
λ λ
j i
c 2 1 c
2 1
x c
c c c c
c c
其中,λi為相對於方程式(5-2-3.1)n 組限制的 Lagrange multipliers。
為了求得最佳化的 Jnew,我們針對各傳入參數分別進行微分,便可歸納出下列 結論:
)
(5 2 3.4
)
( ) (
1
1 − −
=
∑
∑
=
= n j
m ij n j
m ij
u
u j
i
x c
)
(5 2 3.5
) (
1
1
1
2 − −
=
∑
= c − km kj ij ij
d u d
根據上面的定義,整個模糊 C-means 分群法的步驟如下:
1. 任意填寫 U 中各行列位置的數值(0-1),但須滿足方程式(5-2-3.1)
2. 根據方程式(5-2-3.4),計算各叢聚的叢聚中心 ci
3. 根據方程式(5-2-3.2),計算目的函數 Jnow。假如 Jnow已經小於某個標準,或者 這次的分群改良效果(Jpre-Jnow)已經過小,則結束本演算法
4. 根據方程式(5-2-3.5)計算新的矩陣 U,並回到步驟二
5 – 2 - 4.向量量化
向量量化(vector quantization)[15] 可以說是近年來在降低資料量上最常 被提出討論的方法之一,尤其是在傳統資料壓縮的領域上,向量量化更是不可缺乏 的一環。
在整個向量量化的過程中,最重要的工作便是編碼表(codebook)的設計。所 謂編碼表,指的是一群編碼向量(codevector 或 codeword)的集合,而我們最終 的目標,便是以這些挑選出來的編碼向量來代表該空間中全部的資料向量。
舉例來說,如圖 5-2-4.a 所示,在一個二維的空間中,我們將整個空間分割成 若干等分,每個等分以一個編碼向量(黑點)來代表,如此一來,空間中全部的向 量都可以只這些有限的編碼向量來代替,這便是向量量化的精神所在。
圖 5-2-4.a:二維空間上的向量量化範例
假設 x 是 D 維空間中的向量,在圖形辨識流程中,x 可能就代表某種特徵字串
(feature string),例如在影像處理中可能是 DCT 係數,在語音辨識中可能是 LPC(linear prediction coefficient),我們希望透過某種對應方式 Q,將全部 的 x 對應到同樣是 D 維空間中有限的編碼向量 yi上,而 yi的數目,便稱為該編碼 表的大小。
) (x yi =Q
從 直 觀 上 來 看 , 對 應 Q 的 目 的 當 然 是 希 望 向 量 x 對 應 到 yi 後 的 失 真
(distortion) d(x, yi)能越低越好。而 d(x, yi)可以各式各樣的距離估測 或是失真估測方式,例如平方差(square error)。
最基本的向量量化演算法應該要算是 1980 年 Y. Linde, A. Buzo, 和 R. Gray 共同提出的向量量化演算法 [25],後來人們就將該演算法稱為 LBG 演算法。LBG 演算法在本質上採用了 k-means 分群法 [1],根據預期的編碼表大小(假設是 k),將所有的訓練向量(training vector)分為 k 群,而各群的群中心便成為代 表各群的編碼向量。
之後,各種改良的向量量化演算法不斷被提出來 [21] [9],基本上都採用一 種樹狀的分類方式,整個向量量化的過程可以簡化成以下幾個步驟:
1. 將全部的訓練向量歸成一群
2. 挑選某種分割特徵,將每個樹狀結構最底層的叢聚分割成兩部分,並進行 k-means 分群法
3. 假如最底層的叢聚數目仍然小於預期的編碼表大小,則回到步驟二 4. 計算樹狀結構最底層每個叢聚的群中心,即為代表各群的編碼向量
在步驟二中的分割特徵,則根據不同的應用及不同的演算法而有所不同,例如 在影像處理中,便可能是擁有最大變異量的 DCT 係數 [3] ,亦或是採用主要分量 分析法(principal component analysis)找出較為重要的投影特徵 [26]。