日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法杂货铺——k均值聚类(K-means)

發(fā)布時(shí)間:2025/4/16 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法杂货铺——k均值聚类(K-means) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

算法雜貨鋪——k均值聚類(K-means)

2010-09-20 20:05 by T2噬菌體,?57998?閱讀,?48?評(píng)論,?收藏,?編輯

4.1、摘要

????? 在前面的文章中,介紹了三種常見的分類算法。分類作為一種監(jiān)督學(xué)習(xí)方法,要求必須事先明確知道各個(gè)類別的信息,并且斷言所有待分類項(xiàng)都有一個(gè)類別與之對(duì)應(yīng)。但是很多時(shí)候上述條件得不到滿足,尤其是在處理海量數(shù)據(jù)的時(shí)候,如果通過預(yù)處理使得數(shù)據(jù)滿足分類算法的要求,則代價(jià)非常大,這時(shí)候可以考慮使用聚類算法。聚類屬于無監(jiān)督學(xué)習(xí),相比于分類,聚類不依賴預(yù)定義的類和類標(biāo)號(hào)的訓(xùn)練實(shí)例。本文首先介紹聚類的基礎(chǔ)——距離與相異度,然后介紹一種常見的聚類算法——k均值和k中心點(diǎn)聚類,最后會(huì)舉一個(gè)實(shí)例:應(yīng)用聚類方法試圖解決一個(gè)在體育界大家頗具爭議的問題——中國男足近幾年在亞洲到底處于幾流水平。

4.2、相異度計(jì)算

????? 在正式討論聚類前,我們要先弄清楚一個(gè)問題:如何定量計(jì)算兩個(gè)可比較元素間的相異度。用通俗的話說,相異度就是兩個(gè)東西差別有多大,例如人類與章魚的相異度明顯大于人類與黑猩猩的相異度,這是能我們直觀感受到的。但是,計(jì)算機(jī)沒有這種直觀感受能力,我們必須對(duì)相異度在數(shù)學(xué)上進(jìn)行定量定義。

??????設(shè),其中X,Y是兩個(gè)元素項(xiàng),各自具有n個(gè)可度量特征屬性,那么X和Y的相異度定義為:,其中R為實(shí)數(shù)域。也就是說相異度是兩個(gè)元素對(duì)實(shí)數(shù)域的一個(gè)映射,所映射的實(shí)數(shù)定量表示兩個(gè)元素的相異度。

????? 下面介紹不同類型變量相異度計(jì)算方法。

4.2.1、標(biāo)量

????? 標(biāo)量也就是無方向意義的數(shù)字,也叫標(biāo)度變量。現(xiàn)在先考慮元素的所有特征屬性都是標(biāo)量的情況。例如,計(jì)算X={2,1,102}和Y={1,3,2}的相異度。一種很自然的想法是用兩者的歐幾里得距離來作為相異度,歐幾里得距離的定義如下:

??????

????? 其意義就是兩個(gè)元素在歐氏空間中的集合距離,因?yàn)槠渲庇^易懂且可解釋性強(qiáng),被廣泛用于標(biāo)識(shí)兩個(gè)標(biāo)量元素的相異度。將上面兩個(gè)示例數(shù)據(jù)代入公式,可得兩者的歐氏距離為:

??????

????? 除歐氏距離外,常用作度量標(biāo)量相異度的還有曼哈頓距離和閔可夫斯基距離,兩者定義如下:

????? 曼哈頓距離:

????? 閔可夫斯基距離:

????? 歐氏距離和曼哈頓距離可以看做是閔可夫斯基距離在p=2和p=1下的特例。另外這三種距離都可以加權(quán),這個(gè)很容易理解,不再贅述。

????? 下面要說一下標(biāo)量的規(guī)格化問題。上面這樣計(jì)算相異度的方式有一點(diǎn)問題,就是取值范圍大的屬性對(duì)距離的影響高于取值范圍小的屬性。例如上述例子中第三個(gè)屬性的取值跨度遠(yuǎn)大于前兩個(gè),這樣不利于真實(shí)反映真實(shí)的相異度,為了解決這個(gè)問題,一般要對(duì)屬性值進(jìn)行規(guī)格化。所謂規(guī)格化就是將各個(gè)屬性值按比例映射到相同的取值區(qū)間,這樣是為了平衡各個(gè)屬性對(duì)距離的影響。通常將各個(gè)屬性均映射到[0,1]區(qū)間,映射公式為:

??????

????? 其中max(ai)和min(ai)表示所有元素項(xiàng)中第i個(gè)屬性的最大值和最小值。例如,將示例中的元素規(guī)格化到[0,1]區(qū)間后,就變成了X’={1,0,1},Y’={0,1,0},重新計(jì)算歐氏距離約為1.732。

4.2.2、二元變量

????? 所謂二元變量是只能取0和1兩種值變量,有點(diǎn)類似布爾值,通常用來標(biāo)識(shí)是或不是這種二值屬性。對(duì)于二元變量,上一節(jié)提到的距離不能很好標(biāo)識(shí)其相異度,我們需要一種更適合的標(biāo)識(shí)。一種常用的方法是用元素相同序位同值屬性的比例來標(biāo)識(shí)其相異度。

????? 設(shè)有X={1,0,0,0,1,0,1,1},Y={0,0,0,1,1,1,1,1},可以看到,兩個(gè)元素第2、3、5、7和8個(gè)屬性取值相同,而第1、4和6個(gè)取值不同,那么相異度可以標(biāo)識(shí)為3/8=0.375。一般的,對(duì)于二元變量,相異度可用“取值不同的同位屬性數(shù)/單個(gè)元素的屬性位數(shù)”標(biāo)識(shí)。

????? 上面所說的相異度應(yīng)該叫做對(duì)稱二元相異度。現(xiàn)實(shí)中還有一種情況,就是我們只關(guān)心兩者都取1的情況,而認(rèn)為兩者都取0的屬性并不意味著兩者更相似。例如在根據(jù)病情對(duì)病人聚類時(shí),如果兩個(gè)人都患有肺癌,我們認(rèn)為兩個(gè)人增強(qiáng)了相似度,但如果兩個(gè)人都沒患肺癌,并不覺得這加強(qiáng)了兩人的相似性,在這種情況下,改用“取值不同的同位屬性數(shù)/(單個(gè)元素的屬性位數(shù)-同取0的位數(shù))”來標(biāo)識(shí)相異度,這叫做非對(duì)稱二元相異度。如果用1減去非對(duì)稱二元相異度,則得到非對(duì)稱二元相似度,也叫Jaccard系數(shù),是一個(gè)非常重要的概念。

4.2.3、分類變量

????? 分類變量是二元變量的推廣,類似于程序中的枚舉變量,但各個(gè)值沒有數(shù)字或序數(shù)意義,如顏色、民族等等,對(duì)于分類變量,用“取值不同的同位屬性數(shù)/單個(gè)元素的全部屬性數(shù)”來標(biāo)識(shí)其相異度。

4.2.4、序數(shù)變量

????? 序數(shù)變量是具有序數(shù)意義的分類變量,通常可以按照一定順序意義排列,如冠軍、亞軍和季軍。對(duì)于序數(shù)變量,一般為每個(gè)值分配一個(gè)數(shù),叫做這個(gè)值的秩,然后以秩代替原值當(dāng)做標(biāo)量屬性計(jì)算相異度。

4.2.5、向量

????? 對(duì)于向量,由于它不僅有大小而且有方向,所以閔可夫斯基距離不是度量其相異度的好辦法,一種流行的做法是用兩個(gè)向量的余弦度量,其度量公式為:

??????

????? 其中||X||表示X的歐幾里得范數(shù)。要注意,余弦度量度量的不是兩者的相異度,而是相似度!

4.3、聚類問題

????? 在討論完了相異度計(jì)算的問題,就可以正式定義聚類問題了。

??????所謂聚類問題,就是給定一個(gè)元素集合D,其中每個(gè)元素具有n個(gè)可觀察屬性,使用某種算法將D劃分成k個(gè)子集,要求每個(gè)子集內(nèi)部的元素之間相異度盡可能低,而不同子集的元素相異度盡可能高。其中每個(gè)子集叫做一個(gè)簇。

????? 與分類不同,分類是示例式學(xué)習(xí),要求分類前明確各個(gè)類別,并斷言每個(gè)元素映射到一個(gè)類別,而聚類是觀察式學(xué)習(xí),在聚類前可以不知道類別甚至不給定類別數(shù)量,是無監(jiān)督學(xué)習(xí)的一種。目前聚類廣泛應(yīng)用于統(tǒng)計(jì)學(xué)、生物學(xué)、數(shù)據(jù)庫技術(shù)和市場營銷等領(lǐng)域,相應(yīng)的算法也非常的多。本文僅介紹一種最簡單的聚類算法——k均值(k-means)算法。

4.4、K-means算法及其示例

????? k均值算法的計(jì)算過程非常直觀:

????? 1、從D中隨機(jī)取k個(gè)元素,作為k個(gè)簇的各自的中心。

????? 2、分別計(jì)算剩下的元素到k個(gè)簇中心的相異度,將這些元素分別劃歸到相異度最低的簇。

????? 3、根據(jù)聚類結(jié)果,重新計(jì)算k個(gè)簇各自的中心,計(jì)算方法是取簇中所有元素各自維度的算術(shù)平均數(shù)。

????? 4、將D中全部元素按照新的中心重新聚類。

????? 5、重復(fù)第4步,直到聚類結(jié)果不再變化。

????? 6、將結(jié)果輸出。

????? 由于算法比較直觀,沒有什么可以過多講解的。下面,我們來看看k-means算法一個(gè)有趣的應(yīng)用示例:中國男足近幾年到底在亞洲處于幾流水平?

????? 今年中國男足可算是杯具到家了,幾乎到了過街老鼠人人喊打的地步。對(duì)于目前中國男足在亞洲的地位,各方也是各執(zhí)一詞,有人說中國男足亞洲二流,有人說三流,還有人說根本不入流,更有人說其實(shí)不比日韓差多少,是亞洲一流。既然爭論不能解決問題,我們就讓數(shù)據(jù)告訴我們結(jié)果吧。

????? 下圖是我采集的亞洲15只球隊(duì)在2005年-2010年間大型杯賽的戰(zhàn)績(由于澳大利亞是后來加入亞足聯(lián)的,所以這里沒有收錄)。

????? 其中包括兩次世界杯和一次亞洲杯。我提前對(duì)數(shù)據(jù)做了如下預(yù)處理:對(duì)于世界杯,進(jìn)入決賽圈則取其最終排名,沒有進(jìn)入決賽圈的,打入預(yù)選賽十強(qiáng)賽賦予40,預(yù)選賽小組未出線的賦予50。對(duì)于亞洲杯,前四名取其排名,八強(qiáng)賦予5,十六強(qiáng)賦予9,預(yù)選賽沒出現(xiàn)的賦予17。這樣做是為了使得所有數(shù)據(jù)變?yōu)闃?biāo)量,便于后續(xù)聚類。

????? 下面先對(duì)數(shù)據(jù)進(jìn)行[0,1]規(guī)格化,下面是規(guī)格化后的數(shù)據(jù):

????? 接著用k-means算法進(jìn)行聚類。設(shè)k=3,即將這15支球隊(duì)分成三個(gè)集團(tuán)。

????? 現(xiàn)抽取日本、巴林和泰國的值作為三個(gè)簇的種子,即初始化三個(gè)簇的中心為A:{0.3, 0, 0.19},B:{0.7, 0.76, 0.5}和C:{1, 1, 0.5}。下面,計(jì)算所有球隊(duì)分別對(duì)三個(gè)中心點(diǎn)的相異度,這里以歐氏距離度量。下面是我用程序求取的結(jié)果:

????? 從做到右依次表示各支球隊(duì)到當(dāng)前中心點(diǎn)的歐氏距離,將每支球隊(duì)分到最近的簇,可對(duì)各支球隊(duì)做如下聚類:

????? 中國C,日本A,韓國A,伊朗A,沙特A,伊拉克C,卡塔爾C,阿聯(lián)酋C,烏茲別克斯坦B,泰國C,越南C,阿曼C,巴林B,朝鮮B,印尼C。

????? 第一次聚類結(jié)果:

????? A:日本,韓國,伊朗,沙特;

????? B:烏茲別克斯坦,巴林,朝鮮;

????? C:中國,伊拉克,卡塔爾,阿聯(lián)酋,泰國,越南,阿曼,印尼。

????? 下面根據(jù)第一次聚類結(jié)果,調(diào)整各個(gè)簇的中心點(diǎn)。

????? A簇的新中心點(diǎn)為:{(0.3+0+0.24+0.3)/4=0.21, (0+0.15+0.76+0.76)/4=0.4175, (0.19+0.13+0.25+0.06)/4=0.1575} = {0.21, 0.4175, 0.1575}

????? 用同樣的方法計(jì)算得到B和C簇的新中心點(diǎn)分別為{0.7, 0.7333, 0.4167},{1, 0.94, 0.40625}。

????? 用調(diào)整后的中心點(diǎn)再次進(jìn)行聚類,得到:

????? 第二次迭代后的結(jié)果為:

????? 中國C,日本A,韓國A,伊朗A,沙特A,伊拉克C,卡塔爾C,阿聯(lián)酋C,烏茲別克斯坦B,泰國C,越南C,阿曼C,巴林B,朝鮮B,印尼C。

????? 結(jié)果無變化,說明結(jié)果已收斂,于是給出最終聚類結(jié)果:

????? 亞洲一流:日本,韓國,伊朗,沙特

????? 亞洲二流:烏茲別克斯坦,巴林,朝鮮

????? 亞洲三流:中國,伊拉克,卡塔爾,阿聯(lián)酋,泰國,越南,阿曼,印尼

????? 看來數(shù)據(jù)告訴我們,說國足近幾年處在亞洲三流水平真的是沒有冤枉他們,至少從國際杯賽戰(zhàn)績是這樣的。

????? 其實(shí)上面的分析數(shù)據(jù)不僅告訴了我們聚類信息,還提供了一些其它有趣的信息,例如從中可以定量分析出各個(gè)球隊(duì)之間的差距,例如,在亞洲一流隊(duì)伍中,日本與沙特水平最接近,而伊朗則相距他們較遠(yuǎn),這也和近幾年伊朗沒落的實(shí)際相符。另外,烏茲別克斯坦和巴林雖然沒有打進(jìn)近兩屆世界杯,不過憑借預(yù)算賽和亞洲杯上的出色表現(xiàn)占據(jù)B組一席之地,而朝鮮由于打入了2010世界杯決賽圈而有幸進(jìn)入B組,可是同樣奇跡般奪得2007年亞洲杯的伊拉克卻被分在三流,看來亞洲杯冠軍的分量還不如打進(jìn)世界杯決賽圈重啊。其它有趣的信息,有興趣的朋友可以進(jìn)一步挖掘。

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的算法杂货铺——k均值聚类(K-means)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。