K均值算法总结
這幾天在一個項目上需要用到K均值聚類算法,以前都是直接利用百度老師copy一個Kmeans算法代碼,這次想自己利用已知的算法思想編寫一下,編寫才知道,雖然熟悉了算法思想,真正實現時,還是遇到不少bug,這就是小學老師說的"眼高手低",還是需要親自動手實現一下,才算真正的掌握思想。
回顧一下Kmeas算法思想,將若干元素聚為k類,使之,每一類內的元素相似度較高,類間的元素相似度較低,達到將若干元素劃分的目的,具體如下:
1.初始化質心,初始化質心有多種初始化方法,我熟知的有兩種,隨機選擇k個元素,作為k個初始質心;利用最大最小原則初始化質心。
前者簡單,不做解釋,重點解釋一下后者,"最大最小"
這里,兩個元素距離較近,認為是相似的,距離較遠,相似度低
1)第一個質心是隨機選取的,這里用隨機數作為第一個質心
2)第二個質心的選擇:選取剩下的元素到第一個質心的相似度的最小值,作為第二個質心(通俗理解是找一個距離第一個質心最遠的元素)
3)第三個質心的選擇:找一個距離第一個,第二個質心最遠的元素(剩下的元素到第一個,第二個質心的相似度=max(sim(元素,第一個質心),sim(元素,第二個質心))),然后min(max(sim(元素,第一個質心),sim(元素,第二個質心))),這就是最大最小的具體體現。
4)剩下的質心選擇同3)
2.在確定了K個初始質心之后,然后對剩下的n-k個元素,劃分到距離最近的質心中,這樣每個簇中就多于1個元素
3.更新每一個簇中的質心
4.求每個簇的誤差,進而求總誤差,如果滿足閾值要求,就終止算法,不滿足進入5.
5.迭代對每個元素執行2中的劃分,質心不再變化,就終止算法,否則就繼續更新質心,執行5.
下面是算法代碼:
http://yunpan.cn/cyRsyLbzwqekE? 提取碼 edb0
?
轉載于:https://www.cnblogs.com/yuwenfeng/p/4210007.html
總結
- 上一篇: JavaScript闭包学习笔记
- 下一篇: 【云图】如何设置支付宝里的家乐福全国连锁