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