第10章 利用k均值聚類算法對未標(biāo)注數(shù)據(jù)分組

聚類是一種無監(jiān)督的學(xué)習(xí)徘六,它將相似的對象歸為同一個(gè)簇中。之所以成為k均值是因?yàn)樗梢园l(fā)現(xiàn)k個(gè)不同的簇钱雷,且每個(gè)簇的中心采用簇中所含值的均值計(jì)算而成。

聚類分析視圖將相似對象歸入同一簇棠耕,將不相似對象歸到不同簇。相似這一概念取決于所選擇的相似度計(jì)算方法柠新。前面介紹的各種相似度計(jì)算方法后面還會出現(xiàn)窍荧,而到底用那種相似度方法取決于具體應(yīng)用。

下面我們會構(gòu)建k均值方法并觀察期實(shí)際效果恨憎,然后討論簡單k均值算法中的缺陷蕊退。為了解決其中的一些缺陷,可以通過后處理來產(chǎn)生更好的簇憔恳。接著會給出一個(gè)更有效的稱為二分k均值的聚類算法瓤荔。最后給出一個(gè)實(shí)例應(yīng)用。

10.1? k均值聚類算法

k均值是發(fā)現(xiàn)給定數(shù)據(jù)集的k個(gè)簇的算法钥组。簇的個(gè)數(shù)k是用戶給定的输硝,每個(gè)簇通過其質(zhì)心,即簇中所有點(diǎn)的質(zhì)心來描述程梦。

k均值算法的工作流程:首先点把,隨機(jī)確定k個(gè)初始點(diǎn)為質(zhì)心。然后將數(shù)據(jù)集的每個(gè)點(diǎn)分配到一個(gè)簇屿附,具體來講郎逃,為每個(gè)點(diǎn)找距其最近的質(zhì)心,并將其分配給該質(zhì)心所對應(yīng)的簇挺份,這一步完成之后褒翰,每個(gè)簇的質(zhì)心更新為該簇所有點(diǎn)的均值。

求與某數(shù)據(jù)點(diǎn)最近的質(zhì)心意味著要進(jìn)行某種距離計(jì)算匀泊,這里使用的是歐氏距離影暴。此外,初始的k個(gè)隨機(jī)質(zhì)心需要在整個(gè)數(shù)據(jù)集邊界范圍之內(nèi)探赫。對數(shù)據(jù)集進(jìn)行畫圖如下:


不同大小紅點(diǎn)代表不同簇型宙,藍(lán)點(diǎn)代表各簇的質(zhì)心(testSet.txt文件)

PS:畫個(gè)圖也費(fèi)我老半天時(shí)間額~郁悶~

算法主要就是計(jì)算質(zhì)心-分配-重新計(jì)算,不斷迭代伦吠,直到所有數(shù)據(jù)點(diǎn)的簇分配結(jié)果不再改變?yōu)橹棺倍摇W詈笏惴ǚ祷貎蓚€(gè)矩陣:centroids有k行n列,用來裝質(zhì)心數(shù)據(jù)毛仪,k行表示k個(gè)質(zhì)心搁嗓,n行表示質(zhì)心數(shù)據(jù)維度。clusterAssment有m行2列箱靴,m行對應(yīng)數(shù)據(jù)集中m個(gè)數(shù)據(jù)點(diǎn)腺逛,第一列記錄該數(shù)據(jù)點(diǎn)所在簇索引值,第二列記錄該數(shù)據(jù)點(diǎn)與所在簇質(zhì)心的距離衡怀,即存儲誤差棍矛。

PS:python神操作:數(shù)組b賦值給矩陣a安疗,則a成了數(shù)組類型并得到相應(yīng)的值。而數(shù)組b賦給矩陣a的某一列后够委,數(shù)據(jù)a還是矩陣荐类,并得到了b的對應(yīng)值。此外茁帽,數(shù)組可以與某一個(gè)數(shù)加減乘除玉罐,結(jié)果是數(shù)組的對應(yīng)元素與這個(gè)值加減乘除。最后潘拨,random.rang(m,n)生成m行n列數(shù)組吊输,數(shù)組元素是0到1之間的隨機(jī)數(shù)。

10.2 使用后處理來提高聚類性能

在k均值聚類中簇的數(shù)目k是一個(gè)用戶預(yù)先定義好的參數(shù)铁追,而用戶并不知道該設(shè)置成多少為最好璧亚。在包含簇結(jié)果的矩陣中保存著每個(gè)點(diǎn)的誤差,即該點(diǎn)到簇質(zhì)心的距離平方值脂信。下面我們可以用該誤差來評價(jià)聚類質(zhì)量的方法癣蟋。

k均值算法收斂但聚類效果較差的原因:k均值算法收斂到局部最小值,而不是全局最小值狰闪。

一種用于度量聚類效果的指標(biāo)是SSE(誤差平方和)疯搅,即clusterAssment矩陣的第一列之和,SSE值越小表示數(shù)據(jù)越接近它們的質(zhì)心埋泵,聚類效果也越好幔欧。一種肯定可以降低SSE值的方法是增加簇的個(gè)數(shù),但是這違背了聚類的目標(biāo)丽声,聚類的目標(biāo)是在保持簇不變的情況下提高簇的質(zhì)量礁蔗。

所以,我們應(yīng)該對簇進(jìn)行后處理雁社,一種方法是將具有最大SSE的簇劃分成兩個(gè)簇浴井,具體實(shí)現(xiàn)就是將最大簇包含的點(diǎn)過濾出來,然后再這些點(diǎn)上運(yùn)行k均值算法霉撵,k設(shè)為2磺浙。而為了保持簇的總數(shù)不變,可以將某兩個(gè)簇合并徒坡,那么又該按照什么依據(jù)合并呢撕氧?

有兩種量化辦法:第一種,合并最近的質(zhì)心喇完,即計(jì)算所有質(zhì)心之間的距離伦泥,然后合并最近的兩個(gè)質(zhì)心。第二種,合并兩個(gè)使得SSE增幅最小的質(zhì)心不脯,即合并兩個(gè)簇然后算總SSE值府怯,這需要在所有可能的兩個(gè)簇上重復(fù)上述操作,知道找到合并最佳的簇為止跨新。

10.3? 二分k均值算法

為了克服k均值算法收斂于局部最小值的問題,有人提出了二分k均值算法坏逢,該算法首先將所有點(diǎn)作為一個(gè)簇域帐,然后將該簇一分為二,之后選擇其中一個(gè)簇繼續(xù)一分為二是整,選擇哪個(gè)簇取決于對其劃分是否可以最大程度降低SSE的值肖揣。上述劃分過程不斷重復(fù),直到得到用戶指定的簇?cái)?shù)為止浮入。

另一種做法是選擇SSE最大的簇進(jìn)行劃分龙优,直到簇的數(shù)目達(dá)到用戶指定的數(shù)目為止。

下面的操作是對第一種方法的實(shí)現(xiàn)事秀,即劃分依據(jù)是降低劃分后總的SSE值彤断。代碼思路很簡單,就是對所有的簇都進(jìn)行k均值劃分易迹,然后計(jì)算總SSE值宰衙,找到能使SSE值最小的劃分簇,將其劃分睹欲,將被劃分簇的質(zhì)心矩陣和誤差矩陣加入總數(shù)據(jù)集的質(zhì)心矩陣和誤差矩陣供炼,直到簇的個(gè)數(shù)滿足用戶指定的參數(shù)。

下面給出用二分k均值算法進(jìn)行劃分后的結(jié)果圖:


不同大小紅點(diǎn)代表不同簇窘疮,藍(lán)點(diǎn)代表各簇的質(zhì)心(testSet.txt文件)

此次劃分用的數(shù)據(jù)與上一張圖一樣袋哼,只是方法不同:前面用的是k均值聚類算法,初始質(zhì)心是隨機(jī)選取的闸衫,劃分后得到的效果并不好涛贯,這從圖上就能看出來。而這里用的是二分k均值算法蔚出,是從一個(gè)簇不斷劃分而來疫蔓,劃分結(jié)果明顯比上一張好些。

下面我又用二分k均值聚類算法在另一個(gè)數(shù)據(jù)集做了劃分身冬,結(jié)果如下:


不同大小紅點(diǎn)代表不同簇衅胀,藍(lán)點(diǎn)代表各簇的質(zhì)心(testSet2.txt文件)

劃分結(jié)果~外瑞固的~

10.4? 本章小結(jié)

聚類是一種無監(jiān)督學(xué)習(xí)方法。所謂無監(jiān)督學(xué)習(xí)方法酥筝,就是事先不知道要尋找的內(nèi)容滚躯,即沒有目標(biāo)向量。聚類將數(shù)據(jù)點(diǎn)歸到多個(gè)簇中,其中相似的點(diǎn)處于同一個(gè)簇掸掏,而不相似的點(diǎn)處于不同的簇中茁影。聚類可以使用多種不同的方法來計(jì)算相似度。

一種廣泛使用的聚類方法是k均值算法丧凤,其中k是用戶指定的要?jiǎng)?chuàng)建的簇的數(shù)目募闲。k均值聚類算法以k個(gè)隨機(jī)質(zhì)心開始。算法會計(jì)算每個(gè)點(diǎn)到質(zhì)心的距離愿待。每個(gè)點(diǎn)會分配到距其最近的簇質(zhì)心浩螺,然后緊接著基于新分配到簇的點(diǎn)更新簇質(zhì)心。以上過程重復(fù)數(shù)次仍侥,直到簇質(zhì)心不再改變要出。

這個(gè)方法簡單有效,但容易受到初始簇質(zhì)心的影響农渊。為了更好的聚類效果患蹂,可以使用一種稱為二分k均值的聚類算法。

二分k均值聚類算法首先將所有點(diǎn)作為一個(gè)簇砸紊,然后使用k均值算法(k=2)對其劃分传于。下一迭代時(shí),選擇有最大誤差的簇進(jìn)行劃分醉顽。該過程重復(fù)直到k個(gè)簇創(chuàng)建成功為止格了。

二分k均值的聚類效果要好于k均值算法。

over~? ^_^

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末徽鼎,一起剝皮案震驚了整個(gè)濱河市盛末,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌否淤,老刑警劉巖悄但,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異石抡,居然都是意外死亡檐嚣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門啰扛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嚎京,“玉大人,你說我怎么就攤上這事隐解“暗郏” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵煞茫,是天一觀的道長帕涌。 經(jīng)常有香客問我摄凡,道長,這世上最難降的妖魔是什么蚓曼? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任亲澡,我火速辦了婚禮,結(jié)果婚禮上纫版,老公的妹妹穿的比我還像新娘床绪。我一直安慰自己,他們只是感情好其弊,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布癞己。 她就那樣靜靜地躺著,像睡著了一般瑞凑。 火紅的嫁衣襯著肌膚如雪末秃。 梳的紋絲不亂的頭發(fā)上概页,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天籽御,我揣著相機(jī)與錄音,去河邊找鬼惰匙。 笑死技掏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的项鬼。 我是一名探鬼主播哑梳,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼绘盟!你這毒婦竟也來了鸠真?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤龄毡,失蹤者是張志新(化名)和其女友劉穎吠卷,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沦零,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡祭隔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了路操。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疾渴。...
    茶點(diǎn)故事閱讀 40,498評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖屯仗,靈堂內(nèi)的尸體忽然破棺而出搞坝,到底是詐尸還是另有隱情,我是刑警寧澤魁袜,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布瞄沙,位于F島的核電站己沛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏距境。R本人自食惡果不足惜申尼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望垫桂。 院中可真熱鬧师幕,春花似錦、人聲如沸诬滩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疼鸟。三九已至后控,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間空镜,已是汗流浹背浩淘。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吴攒,地道東北人张抄。 一個(gè)月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像洼怔,于是被迫代替她去往敵國和親署惯。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容