K-means算法的原理、優缺點及改進(轉)


文章內容轉載自:http://blog.csdn.net/sinat_35512245/article/details/55051306   

                            http://blog.csdn.net/baimafujinji/article/details/50570824

----------------------------------------------------------------------------------------------------------------------------------------------------

                                                                   K-means方法是一種非監督學習算法,它解決的是聚類問題

1、算法簡介:K-means方法是聚類中的經典算法,數據挖掘十大經典算法之一;算法接受參數k,然后將事先輸入的n個數據對象划分為k個聚類以便使得所獲得的聚類滿足聚類中的對象相似度較高,而不同聚類中的對象相似度較小。

2、算法思想:以空間中k個點為中心進行聚類,對最靠近他們的對象歸類,通過迭代的方法,逐次更新各聚類中心的值,直到得到最好的聚類結果。

3、算法描述:

(1)適當選擇c個類的初始中心; 
(2)在第k次迭代中,對任意一個樣本,求其到c個類的各中心的距離,將該樣本歸到距離最短的那個中心所在的類(也成為簇); 
(3)利用均值等方法更新該類的中心值; 
(4)對於所有的C個聚類中心,如果利用(2)(3)的迭代法更新后,值保持不變,則迭代結束;否則繼續迭代。

注:對於距離函數和中心類型的某些組合,算法總是收斂到一個解,即K均值到達一種狀態,聚類結果和中心都不再改變。但為了避免過度迭代所導致的時間消耗,實踐中,也常用一個較弱的條件替換掉“中心不再發生變化”這個條件。例如,使用“直到僅有1%的點改變簇”。

4、算法舉例:

       詳細內容參看:http://blog.csdn.net/sinat_35512245/article/details/55051306

5、優、缺點:

優點:

1、該算法時間復雜度為O(tkmn),(其中,t為迭代次數,k為簇的數目,m為記錄數,n為維數)與樣本數量線性相關,所以,對於處理大數據集合,該算法非常高效,且伸縮性較好;

2、原理簡單,實現容易。

缺點:

1、聚類中心的個數K 需要事先給定,但在實際中這個 K 值的選定是非常難以估計的,很多時候,事先並不知道給定的數據集應該分成多少個類別才最合適; 

2、Kmeans需要人為地確定初始聚類中心,不同的初始聚類中心可能導致完全不同的聚類結果。(可以使用K-means++算法來解決);

3、結果不一定是全局最優,只能保證局部最優;

4、對噪聲和離群點敏感;

5、該方法不適於發現非凸面形狀的簇或大小差別很大的簇;

6、需樣本存在均值(限定數據種類)。

 6、算法改進

  針對上述第2個缺陷,可以使用Kmeans++算法來解決。 k-means++算法選擇初始seeds的基本思想就是:初始的聚類中心之間的相互距離要盡可能的遠。wiki上對該算法的描述是如下:

  1. 從輸入的數據點集合中隨機選擇一個點作為第一個聚類中心;
  2. 對於數據集中的每一個點x,計算它與最近聚類中心(指已選擇的聚類中心)的距離D(x);
  3. 選擇一個新的數據點作為新的聚類中心,選擇的原則是:D(x)較大的點,被選取作為聚類中心的概率較大;
  4. 重復2和3直到k個聚類中心被選出來;
  5. 利用這k個初始的聚類中心來運行標准的k-means算法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM