1. 程式人生 > >機器學習---演算法---k-means演算法

機器學習---演算法---k-means演算法

轉自:https://blog.csdn.net/zhihua_oba/article/details/73832614

 

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

2、k-means演算法詳解
  k-means演算法以距離作為資料物件間相似性度量的標準,通常採用歐氏距離來計算資料物件間的距離。下面給出歐式距離的計算公式:

 


其中,D表示資料物件的屬性個數。
  k-means演算法聚類過程中,每次迭代,對應的類簇中心需要重新計算(更新):對應類簇中所有資料物件的均值,即為更新後該類簇的類簇中心。定義第k個類簇的類簇中心為Centerk,則類簇中心更新方式如下:


其中,Ck表示第k個類簇,|Ck|表示k個類簇中資料物件的個數,這裡的求和是指類簇CkCk中所有元素在每列屬性上的和,因此CenterkCenterk也是一個含有DD個屬性的向量,表示為Centerk=(Centerk,1,Centerk,2,...,Centerk,D)Centerk=(Centerk,1,Centerk,2,...,Centerk,D)。
  k-means演算法需要不斷地迭代來重新劃分類簇,並更新類簇中心,那麼迭代終止的條件是什麼呢?一般情況,有兩種方法來終止迭代:一種方法是設定迭代次數TT,當到達第TT次迭代,則終止迭代,此時所得類簇即為最終聚類結果;另一種方法是採用誤差平方和準則函式,函式模型如下:

其中,K表示類簇個數。當兩次迭代JJ的差值小於某一閾值時,即ΔJ<δΔJ<δ時,則終止迭代,此時所得類簇即為最終聚類結果。
  k-means演算法思想可描述為:首先初始化KK個類簇中心;然後計算各個資料物件到聚類中心的距離,把資料物件劃分至距離其最近的聚類中心所在類簇中;接著根據所得類簇,更新類簇中心;然後繼續計算各個資料物件到聚類中心的距離,把資料物件劃分至距離其最近的聚類中心所在類簇中;接著根據所得類簇,繼續更新類簇中心;……一直迭代,直到達到最大迭代次數TT,或者兩次迭代JJ的差值小於某一閾值時,迭代終止,得到最終聚類結果。演算法詳細流程描述如下:

 


  k-means演算法聚類過程示意圖,如下:

 

其中,黑色圓點代表類簇中心,白色圓點代表待聚類資料物件。
3、k-means演算法優缺點分析
- 優點:
  演算法簡單易實現;
- 缺點:
  需要使用者事先指定類簇個數KK;
  聚類結果對初始類簇中心的選取較為敏感;
  容易陷入區域性最優;
  只能發現球型類簇;

4、k-means演算法改進方法
  初始類簇中心的選取,可以通過k-means++演算法進行改進。