聚類是一種無監督的學習,將相似的對象放到同一簇中,有點像是全自動分類,簇內的對象越相似,簇間的對象差別越大,則聚類效果越好。
1、k均值聚類算法
k均值聚類將數據分為k個簇,每個簇通過其質心,即簇中所有點的中心來描述。首先隨機確定k個初始點作為質心,然后將數據集分配到距離最近的簇中。然后將每個簇的質心更新為所有數據集的平均值。然后再進行第二次劃分數據集,直到聚類結果不再變化為止。
偽代碼為
隨機創建k個簇質心
當任意一個點的簇分配發生改變時:
對數據集中的每個數據點:
對每個質心:
計算數據集到質心的距離
將數據集分配到最近距離質心對應的簇
對每一個簇,計算簇中所有點的均值并將均值作為質心
2、二分k均值算法
K均值算法可能會收斂到局部最小值,而非全局最小。一種用于度量聚類效果的指標為誤差平方和(SSE)。因為取了平方,更加重視原理中心的點。為了克服k均值算法可能會收斂到局部最小值的問題,有人提出來二分k均值算法。
首先將所有點作為一個簇,然后將該簇一分為二,然后選擇所有簇中對其劃分能夠最大程度減低SSE的值的簇,直到滿足指定簇數為止。
偽代碼
將所有點看成一個簇
計算SSE
while 當簇數目小于k時:
for 每一個簇:
計算總誤差
在給定的簇上進行k均值聚類(k=2)
計算將該簇一分為二的總誤差
選擇使得誤差最小的那個簇進行劃分操作
python實現
代碼及數據集下載:K-means
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://blog.csdn.net/weixin_37895339/article/details/78634144