文章內容轉載自: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上對該算法的描述是如下:
- 從輸入的數據點集合中隨機選擇一個點作為第一個聚類中心;
- 對於數據集中的每一個點x,計算它與最近聚類中心(指已選擇的聚類中心)的距離D(x);
- 選擇一個新的數據點作為新的聚類中心,選擇的原則是:D(x)較大的點,被選取作為聚類中心的概率較大;
- 重復2和3直到k個聚類中心被選出來;
- 利用這k個初始的聚類中心來運行標准的k-means算法。