模式分類(Pattern Recognition/Classification)筆記--聚類分析算法
模式分類課程筆記。碼字不易,轉載注明出處:http://www.cnblogs.com/Lin-chun/p/6894544.html
1、什么是聚類分析算法
在講聚類算法之前,需要先了解一下什么是監督學習和無監督學習。所謂的監督學習就是發現原始數據屬性和標簽屬性之間的內在模式關系。然后利用這些模式預測新的數據實例中目標屬性的值。換句話說就是希望學習到已標簽化的數據的內在模式,從而能用這種模式去預測相近的新數據。而無監督學習是沒有目標屬性的方法,希望的是直接找到數據的內在固有屬性。所謂的無監督和有監督的關鍵差別在於有無人工標注的原始數據。接着我們看一下聚類分析的詳細定義。聚類分析是一種通過發現對象的內在類別性質,使對象間彼此相似(或相關)的部分聚集,並與其他類別中的對象盡量不相關(或遠離)。可以從下圖中看出,聚類算法的目標是讓數據相同類的類內距盡量達到最小,而讓不同類的類間距盡量達到最大。顯然,從定義來看,聚類算法是一種無監督的算法。
2、聚類算法的種類
聚類算法其實有很多種,但是大體上來分可以分為划分聚類以及層次聚類。前者的目標是讓數據能划分為彼此不重疊的子集,后者則是一組嵌套的聚集組織形成層次樹。可以從下面的圖示中得到兩種算法的差別:
划分聚類:每個實例都被安置在特定的第K個非重疊的類別中。由於只輸出一組集群,所以用戶通常必須輸入所需聚類數量K。
層次聚類:生成一組以層次樹形式組織的嵌套聚類,其聚類過程可被可視化為樹狀圖。
雖然聚類算法有多種多樣,但是我們可以對聚類算法做統一建模。假設數據點$j$到聚類中心$i$的聚類為$Se_{ji}$,我們可以用距離來作為目標函數,$Se_{K_i}=\sum_{x_j \ in Cluster_i}\parallel x_j - C_i \parallel ^2$。這樣總的目標函數就是:
$\quad min Se_k =\sum_{i=1}^{k}Se_{K_i}$
3、K-means聚類算法
K-means聚類是一種很常見的划分聚類算法。假設我們有一組數據集$D=\left \{X_1,X_2,...,X_n \right \}$,其中$X_i=(x_{i1},x_{i2},...,x_{ir})$是實值向量空間$X \subseteq R^r$中的向量。$r$是數據中的屬性(維度)。K-meas算法將數據划分為k個聚類,每個類中都有個聚類中心。具體的算法如下:
1.輸入要聚類的個數k;
2.初始化k個聚類中心,通常采用隨機的方式來確定;
3.通過將它們分配給最近的聚類中心來確定所有N個對象具體屬於哪個類別;
4.假定上一步的划分為正確,重新在新的划分基礎上評估k個聚類中心;
5.如果任意一個對象沒有在迭代中重新進行類別划分,那么退出迭代,否則轉到第三步。
下面的圖例可以顯示聚類的詳細步驟
到目前為止,我們介紹了K-means算法的大致思路,然而還有一個問題沒有解決,那就是如何確定聚類的數目k。在實際的應用中,我們並不知道類別到底是多少,或者我們並不清楚數據的分布情況。下面我們舉個例子:
下面這組數據中,理想的狀態為兩聚類,然而事實上我們並不知道聚類的數目。
我們嘗試着用k=1,k=2,k=3,,,不同的參數有不同的目標函數值。
把k=1到6得到的目標函數數據進行繪制,得到如下圖:
從上述的實驗結果我們可以看出,聚類個數從1到2的時候目標函數值出現了一個很陡的下降,那么我們是不是可以從這個圖上獲得一些啟示,從而對目標函數做一定的改進?顯然,如果在目標函數的后面加入一個帶有k的正則項,那么就能將上述的實驗結果引入最終的目標函數中。回顧下上面的聚類目標函數:
$\quad Se_{K_i}=\sum_{x_j \ in Cluster_i}\parallel x_j - C_i \parallel ^2$。
$\quad min Se_k =\sum_{i=1}^{k}Se_{K_i}$
我們有理由將上述$ min Se_K$寫成$ min Se_K+cK$的形式,其中$c$是任意的常數。
雖然我們能對其目標函數進行改進,但是K-means聚類還是有先天的缺點的。
1.聚類算法對於異常值很敏感。解決異常值的干擾通常是在移除距離聚類中心過遠的數據點,或者對數據進行重采樣,因為數據中的異常值被重新采樣得到的幾率會大大降低。
2.聚類算法對於初始種子點的選擇很敏感。解決方案通過隨機采樣k個種子點,然后利用一些算法做前期處理使得種子點更加滿足我們的需求。
3.對於非超橢球的數據難以聚類。
雖然K-means具很多缺點,但是由於具有高效以及簡潔的表示,K-means聚類仍舊是最流行的聚類算法之一。另外從機器學習的角度來講,由於“沒有免費的午餐”定理,任何機器學習算法在無限多的數據集中,期望總是趨於一致。因此其他算法也具有不同的缺點。從這個角度上來看,簡單而效果好的方法才是更重要的。
4、模糊C均值聚類算法
模糊C聚類算法(FCM)通過最小化下列目標函數達到聚類效果:
$J_f(C,m)=\sum_{i=1}^{C}\sum_{k=1}^{N}(u_{k,i})^md_{k,i}$
$s.t. \sum_{i=1}^{C}u_{i,k}=1$
其中,$C$ - 是聚類的個數
$N $ - 是數據點的個數
$u_{k,i}$ - 是第k個點到第i個聚類中心的模糊隸屬度
$d_{k,i}$ - 是第k個數據點到聚類中心i歐式距離
$m \in (1,\infty)$ - 是模糊權重因子定義了結果的模糊程度(通常m=2)
為了描述FCM算法,我們需要對一些概念進行定義,首先根據數據的模糊權重分布定義聚類的中心$v$,
$v_i=\frac{\sum_{k=1}^{N}(u_{k,i}^m x_k)}{\sum_{k=1}^{N}(u_{k,i})^m},i=1,2,...,C$
最小化划分函數將會得到下列的隸屬度表達式:
$u_{i,k}=\frac{1}{\sum^{C}_{j=1}(\frac{d_{k,i}}{d{k,j}})^{\frac{2}{m-1}}}$
歐式距離定義為:
$(d_{k,i})^2=\parallel x_k-v_i\parallel^2$
接着有了上述的定義,我們就能進一步對FCM算法進行描述:
1.選擇類別的數目$C,2\leq C\leq n$;讓$m=2$,初始化$U^{(0)}$,一般都是取隨機值
2.計算出聚類的中心$v_i$;
3.計算出新的隸屬度划分矩陣$U^{(1)}$;
4.對比$U^{(j)}$和$U^{(j+1)}$。如果隸屬度的變化程度小於給定閾值,那么停止迭代,否則就回到第2步。
為了進一步理解FCM聚類,我們給出一個具體的例子:
初始的中心點為3和11,m設置為2
對於節點2(第1個點),計算出隸屬度:
$u_{1,1}=\frac{1}{(\frac{2-3}{2-3})^\frac{2}{2-1}+(\frac{2-3}{2-11})^\frac{2}{2-1}}=\frac{1}{1+\frac{1}{81}}=\frac{81}{82}=98.78\%$
$u_{1,2}=\frac{1}{(\frac{2-11}{2-3})^\frac{2}{2-1}+(\frac{2-11}{2-11})^\frac{2}{2-1}}=\frac{1}{1+81}=\frac{1}{82}=1.22\%$
對於節點3(第2個點)
$u_{2,1}=100\%$
$u_{2,2}=0\%$
對於節點4(第3個點)
$u_{3,1}=\frac{1}{(\frac{4-3}{4-3})^\frac{2}{2-1}+(\frac{4-3}{4-11})^\frac{2}{2-1}}=\frac{1}{1+\frac{1}{49}}=\frac{1}{\frac{50}{49}}=98\%$
$u_{3,2}=\frac{1}{(\frac{4-11}{4-3})^\frac{2}{2-1}+(\frac{4-11}{4-11})^\frac{2}{2-1}}=\frac{1}{1+49}=\frac{1}{50}=2\%$
對於節點7(第4個點)
$u_{4,1}=\frac{1}{(\frac{7-3}{7-3})^\frac{2}{2-1}+(\frac{7-3}{7-11})^\frac{2}{2-1}}=\frac{1}{1+1}=\frac{1}{2}=50\%$
$u_{4,2}=\frac{1}{(\frac{7-11}{7-3})^\frac{2}{2-1}+(\frac{7-11}{7-11})^\frac{2}{2-1}}=\frac{1}{1+1}=\frac{1}{2}=50\%$
更新聚類中心:
$v_1=\frac{0.9878^2*2+1^2*3+0.98^2*4+0.5^2*7+....}{0.98^2+1^2+0.98^2+0.5^2+...}$
$v_2=\frac{0.0122^2*2+0^2*3+0.02^2*4+0.5^2*7+...}{0.0122^2+0^2+0.02^2+0.5^2+...}$
5、融合聚類算法
融合聚類算法是層次聚類的一種。層次聚類又可以分自頂向下的Divisive與自底向上的Agglomerative。融合聚類是一種比較流行的層次聚類技術。基本的算法比較簡單,基本上可以從下列過程中得到:
首先計算距離矩陣,接着讓每個點聚為一個類,不斷重復把兩個相近的類融合為一個,並更新距離矩陣。最后更新直到只剩下一個類。過程圖可以總結如下:
那么從上述的過程來看,我們還需要直到如何更新距離矩陣。兩個類之間的平均成對距離可以定義為:
6、總結
- 無監督的學習是探索數據中的一些內在結構。
- 聚類分析是將數據點分組成類,使得類內相似度高,類間相似度低。
- k-means是最流行的算法,由於其簡單性和效率。
- 模糊c均值從人類的模糊想法出發,表示模糊的量。
- 層次聚類產生組織為層次樹的嵌套集群。