K-Means ++ 算法
Kmeans算法的缺陷
? 聚類(lèi)中心的個(gè)數(shù)K 需要事先給定,但在實(shí)際中這個(gè) K 值的選定是非常難以估計(jì)的,很多時(shí)候,事先并不知道給定的數(shù)據(jù)集應(yīng)該分成多少個(gè)類(lèi)別才最合適
? Kmeans需要人為地確定初始聚類(lèi)中心,不同的初始聚類(lèi)中心可能導(dǎo)致完全不同的聚類(lèi)結(jié)果。(可以使用Kmeans++算法來(lái)解決)
K-Means ++ 算法
k-means++算法選擇初始seeds的基本思想就是:初始的聚類(lèi)中心之間的相互距離要盡可能的遠(yuǎn)。
1. 從輸入的數(shù)據(jù)點(diǎn)集合中隨機(jī)選擇一個(gè)點(diǎn)作為第一個(gè)聚類(lèi)中心
2. 對(duì)于數(shù)據(jù)集中的每一個(gè)點(diǎn)x,計(jì)算它與最近聚類(lèi)中心(指已選擇的聚類(lèi)中心)的距離D(x)
3. 選擇一個(gè)新的數(shù)據(jù)點(diǎn)作為新的聚類(lèi)中心,選擇的原則是:D(x)較大的點(diǎn),被選取作為聚類(lèi)中心的概率較大
4. 重復(fù)2和3直到k個(gè)聚類(lèi)中心被選出來(lái)
5. 利用這k個(gè)初始的聚類(lèi)中心來(lái)運(yùn)行標(biāo)準(zhǔn)的k-means算法
從上面的算法描述上可以看到,算法的關(guān)鍵是第3步,如何將D(x)反映到點(diǎn)被選擇的概率上,一種算法如下:
1. 先從我們的數(shù)據(jù)庫(kù)隨機(jī)挑個(gè)隨機(jī)點(diǎn)當(dāng)“種子點(diǎn)”
2. 對(duì)于每個(gè)點(diǎn),我們都計(jì)算其和最近的一個(gè)“種子點(diǎn)”的距離D(x)并保存在一個(gè)數(shù)組里,然后把這些距離加起來(lái)得到Sum(D(x))。
3. 然后,再取一個(gè)隨機(jī)值,用權(quán)重的方式來(lái)取計(jì)算下一個(gè)“種子點(diǎn)”。這個(gè)算法的實(shí)現(xiàn)是,先取一個(gè)能落在Sum(D(x))中的隨機(jī)值Random,然后用Random -= D(x),直到其<=0,此時(shí)的點(diǎn)就是下一個(gè)“種子點(diǎn)”。
4. 重復(fù)2和3直到k個(gè)聚類(lèi)中心被選出來(lái)
5. 利用這k個(gè)初始的聚類(lèi)中心來(lái)運(yùn)行標(biāo)準(zhǔn)的k-means算法
可以看到算法的第三步選取新中心的方法,這樣就能保證距離D(x)較大的點(diǎn),會(huì)被選出來(lái)作為聚類(lèi)中心了。至于為什么原因比較簡(jiǎn)單,如下圖所示:
?
假設(shè)A、B、C、D的D(x)如上圖所示,當(dāng)算法取值Sum(D(x))*random時(shí),該值會(huì)以較大的概率落入D(x)較大的區(qū)間內(nèi),所以對(duì)應(yīng)的點(diǎn)會(huì)以較大的概率被選中作為新的聚類(lèi)中心。
轉(zhuǎn)載于:https://www.cnblogs.com/zjiaxing/p/5616679.html
總結(jié)
以上是生活随笔為你收集整理的K-Means ++ 算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C和指针 第四章 习题
- 下一篇: vim 插件之commentary