MATLAB-k均值分類

K-means算法是最簡單的一種聚類算法。算法的目的是使各個樣本與所在類均值的誤差平方和達到最小(這也是評價K-means算法最後聚類效果的評價標準)

K-means聚類算法的一般步驟:

  初始化。輸入基因表達矩陣作爲對象集X,輸入指定聚類類數N,並在X中隨機選取N個對象作爲初始聚類中心。設定迭代中止條件,比如最大循環次數或者聚類中心收斂誤差容限。

  進行迭代。根據相似度準則將數據對象分配到最接近的聚類中心,從而形成一類。初始化隸屬度矩陣。

  更新聚類中心。然後以每一類的平均向量作爲新的聚類中心,重新分配數據對象。

  反覆執行第二步和第三步直至滿足中止條件。

K-均值聚類法的概述

  之前在參加數學建模的過程中用到過這種聚類方法,但是當時只是簡單知道了在matlab中如何調用工具箱進行聚類,並不是特別清楚它的原理。最近因爲在學模式識別,又重新接觸了這種聚類算法,所以便仔細地研究了一下它的原理。弄懂了之後就自己手工用matlab編程實現了,最後的結果還不錯,嘿嘿~~~

  簡單來說,K-均值聚類就是在給定了一組樣本(x1, x2, 。。.xn) (xi, i = 1, 2, 。。。 n均是向量) 之後,假設要將其聚爲 m(《n) 類,可以按照如下的步驟實現:

  Step 1: 從 (x1, x2, 。。.xn) 中隨機選擇 m 個向量(y1,y2,。。.ym) 作爲初始的聚類中心(可以隨意指定,不在n個向量中選擇也可以);

  Step 2: 計算 (x1, x2, 。。.xn) 到這 m 個聚類中心的距離(嚴格來說爲 2階範數);

  Step 3: 對於每一個 xi(i = 1,2,。。.n)比較其到 (y1,y2,。。.ym) 距離,找出其中的最小值,若到 yj 的距離最小,則將 xi 歸爲第j類;

  Step 4: m 類分好之後, 計算每一類的均值向量作爲每一類新的聚類中心;

  Step 5: 比較新的聚類中心與老的聚類中心之間的距離,若大於設定的閾值,則跳到 Step2; 否則輸出分類結果和聚類中心,算法結束。

單介紹下kmeans算法流程:

  假設要把樣本集分爲c個類別,算法描述如下:

  (1)適當選擇c個類的初始中心;

  (2)在第k次迭代中,對任意一個樣本,求其到c各中心的距離,將該樣本歸到距離最短的中心所在的類;

  (3)利用均值等方法更新該類的中心值;

  (4)對於所有的c個聚類中心,如果利用(2)(3)的迭代法更新後,值保持不變,則迭代結束,否則繼續迭代。

  該算法的最大優勢在於簡潔和快速。算法的關鍵在於初始中心的選擇和距離公式。

MATLAB函數Kmeans
  使用方法:

  Idx=Kmeans(X,K)

  [Idx,C]=Kmeans(X,K)

  [Idx,C,sumD]=Kmeans(X,K)

  [Idx,C,sumD,D]=Kmeans(X,K)

  […]=Kmeans(…,’Param1’,Val1,’Param2’,Val2,…)

  各輸入輸出參數介紹:

  X: N*P的數據矩陣,N爲數據個數,P爲單個數據維度

  K: 表示將X劃分爲幾類,爲整數

  Idx: N*1的向量,存儲的是每個點的聚類標號

  C: K*P的矩陣,存儲的是K個聚類質心位置

  sumD: 1*K的和向量,存儲的是類間所有點與該類質心點距離之和

  D: N*K的矩陣,存儲的是每個點與所有質心的距離

  […]=Kmeans(…,‘Param1’,Val1,‘Param2’,Val2,…)

  這其中的參數Param1、Param2等,主要可以設置爲如下:

  1. ‘Distance’(距離測度)

  ‘sqEuclidean’ 歐式距離(默認時,採用此距離方式)

  ‘cityblock’ 絕度誤差和,又稱:L1

  ‘cosine’ 針對向量

  ‘correlaTIon’ 針對有時序關係的值

  ‘Hamming’ 只針對二進制數據

  2. ‘Start’(初始質心位置選擇方法)

  ‘sample’ 從X中隨機選取K個質心點

  ‘uniform’ 根據X的分佈範圍均勻的隨機生成K個質心

  ‘cluster’ 初始聚類階段隨機選擇10%的X的子樣本(此方法初始使用’sample’方法)

  matrix 提供一K*P的矩陣,作爲初始質心位置集合

  3. ‘Replicates’(聚類重複次數) 整數

下面來看看K-means是如何工作的:

  K均值聚類算法的MATLAB實現

  圖中圓形爲聚類中心,方塊爲待聚類數據,步驟如下:

  (a)選取聚類中心,可以任意選取,也可以通過直方圖進行選取。我們選擇三個聚類中心,並將數據樣本聚到離它最近的中心;

  (b)數據中心移動到它所在類別的中心;

  (c)數據點根據最鄰近規則重新聚到聚類中心;

  (d)再次更新聚類中心;不斷重複上述過程直到評價標準不再變化

  評價標準:

  clip_image016[6]

  假設有M個數據源,C個聚類中心。µc爲聚類中心。該公式的意思也就是將每個類中的數據與每個聚類中心做差的平方和,J最小,意味着分割的效果最好。

 

  K-means面臨的問題以及解決辦法:

  1.它不能保證找到定位聚類中心的最佳方案,但是它能保證能收斂到某個解決方案(不會無限迭代)。

  解決方法:多運行幾次K-means,每次初始聚類中心點不同,最後選擇方差最小的結果。

  2.它無法指出使用多少個類別。在同一個數據集中,例如上圖例,選擇不同初始類別數獲得的最終結果是不同的。

  解決方法:首先設類別數爲1,然後逐步提高類別數,在每一個類別數都用上述方法,一般情況下,總方差會很快下降,直到到達一個拐點;這意味着再增加一個聚類中心不會顯著減少方差,保存此時的聚類數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章