k-means算法以k爲參數(所指望的簇的個數),把n個對象分紅k個簇(單層劃分),用質心(數據點的平均值)定義簇的原型。使得簇內具備較高的類似度,而簇間的類似度較低。算法
經過聚類,咱們可以發現數據對象之間的關係。簇內的類似度越高,簇間的類似度越低,聚類效果越好。優化
①隨機選擇k個點做爲初始的聚類中心。spa
②對於剩下的點,根據其與聚類中心的距離,將其納入最近的簇,造成k個簇。對象
③對每一個簇,計算全部點的均值做爲新的聚類中心。原型
④重複②、③,直到聚類中心再也不改變。數據類型
①可能收斂於局部最小值,在大規模數據中收斂較慢。方法
②k值須要預先給定,屬於先驗知識。數據
③對初始選取的聚類中心敏感。這會致使①。參數
④並不適合全部的數據類型,好比不能處理非球形簇。數據處理
⑤對含離羣點的數據處理時存在問題。
爲了克服k-means收斂於局部最小值的問題,能夠採用二分k-means(bisecting K-means).
①將全部樣本當作一個簇。
②當簇小於k時,對於每一個簇i,計算總偏差,在簇i上進行2-means聚類,再計算該簇劃分爲兩個簇後的總偏差,選擇偏差最小的簇進行劃分。