k-means算法詳解

k-means算法詳解

1、算法簡介

k-means算法是一種聚類算法,所謂聚類,即根據相似性原則,將具有較高相似度的數據對象劃分至同一類簇,將具有較高相異度的數據對象劃分至不同類簇。聚類與分類最大的區別在於,聚類過程爲無監督過程,即待處理數據對象沒有任何先驗知識,而分類過程爲有監督過程,即存在有先驗知識的訓練數據集。
k-means算法中的k代表類簇個數,means代表類簇內數據對象的均值(這種均值是一種對類簇中心的描述),因此,k-means算法又稱爲k-均值算法。k-means算法是一種基於劃分的聚類算法,以距離作爲數據對象間相似性度量的標準,即數據對象間的距離越小,則它們的相似性越高,則它們越有可能在同一個類簇。數據對象間距離的計算有很多種,k-means算法通常採用歐氏距離來計算數據對象間的距離。

2、算法詳解

k-means算法以距離作爲數據對象間相似性度量的標準,通常採用歐氏距離來計算數據對象間的距離。下面給出歐式距離的計算公式:
這裏寫圖片描述
其中,D表示數據對象的屬性個數。
  k-means算法聚類過程中,每次迭代,對應的類簇中心需要重新計算(更新):對應類簇中所有數據對象的均值,即爲更新後該類簇的類簇中心。定義第k個類簇的類簇中心爲CenterkCenterk,則類簇中心更新方式如下:
這裏寫圖片描述
其中,Ck表示第k個類簇,|Ck|表示第k個類簇中數據對象的個數,這裏的求和是指類簇Ck中所有元素在每列屬性上的和,因此Centerk也是一個含有D個屬性的向量,表示爲Centerk=(Centerk,1,Centerk,2,…,Centerk,D)。
  k-means算法需要不斷地迭代來重新劃分類簇,並更新類簇中心,那麼迭代終止的條件是什麼呢?一般情況,有兩種方法來終止迭代:一種方法是設定迭代次數T,當到達第T次迭代,則終止迭代,此時所得類簇即爲最終聚類結果;另一種方法是採用誤差平方和準則函數,函數模型如下:
這裏寫圖片描述
其中,K表示類簇個數。當兩次迭代J的差值小於某一閾值時,即ΔJ<δΔJ<δ時,則終止迭代,此時所得類簇即爲最終聚類結果。
  k-means算法思想可描述爲:首先初始化K個類簇中心;然後計算各個數據對象到聚類中心的距離,把數據對象劃分至距離其最近的聚類中心所在類簇中;接着根據所得類簇,更新類簇中心;然後繼續計算各個數據對象到聚類中心的距離,把數據對象劃分至距離其最近的聚類中心所在類簇中;接着根據所得類簇,繼續更新類簇中心;……一直迭代,直到達到最大迭代次數T,或者兩次迭代J的差值小於某一閾值時,迭代終止,得到最終聚類結果。算法詳細流程描述如下:
這裏寫圖片描述

  k-means算法聚類過程示意圖,如下:
這裏寫圖片描述
其中,黑色圓點代表類簇中心,白色圓點代表待聚類數據對象。

3、算法優缺點分析

  • 優點:
      算法簡單易實現;
  • 缺點:
      需要用戶事先指定類簇個數K;
      聚類結果對初始類簇中心的選取較爲敏感;
      容易陷入局部最優;
      只能發現球型類簇;

4、改進算法k-means++

k-means++算法選擇初始seeds的基本思想就是:初始的聚類中心之間的相互距離要儘可能的遠。算法的描述如下:
1、從輸入的數據點集合中隨機選擇一個點作爲第一個聚類中心
2、對於數據集中的每一個點x,計算它與最近聚類中心(指已選擇的聚類中心)的距離D(x)
3、選擇一個新的數據點作爲新的聚類中心,選擇的原則是:D(x)較大的點,被選取作爲聚類中心的概率較大
4、重複2和3直到k個聚類中心被選出來
利用這k個初始的聚類中心來運行標準的k-means算法
這裏寫圖片描述

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