第十一章 K-Means(K均值)演算法模型實現(下)
KMeans的應用
聚類是數據挖掘領域中重要的技術之一,用於發現數據中未知的分類。聚類分析已經有了很長的研究歷史,其重要性已經越來越受到人們的肯定。聚類演算法是機器學習、數據挖掘和模式識別等研究方向的重要研究內容之一,在識別數據對象的內在關係方面,具有極其重要的作用。聚類主要應用於模式識別中的語音識別、字元識別等,機器學習中的聚類演算法應用於圖像分割,圖像處理中,主要用於數據壓縮、信息檢索。聚類的另一個主要應用是數據挖掘、時空資料庫應用、序列和異常數據分析等。此外,聚類還應用於統計科學,同時,在生物學、地質學、地理學以及市場營銷、銀行客戶等級劃分等方面也有著重要的作用。
優點
1.演算法快速、簡單;2.當聚類是密集的,且類與類之間區別明顯時,效果較好。3.對大數據集有較高的效率並且是可伸縮性的;4.時間複雜度近於線性,而且適合挖掘大規模數據集。
K-Means聚類演算法的時間複雜度是O(nkt) ,其中n代表數據集中對象的數量,t代表著演算法迭代的次數,k代表著簇的數目。缺點
1.在 K-means 演算法中 K 是事先給定的,這個 K 值的選定是非常難以估計的。有的演算法是通過類的自動合併和分裂,得到較為合理的類型數目 K,例如 ISODATA 演算法。
2.在 K-means 演算法中,首先需要根據初始聚類中心來確定一個初始劃分,然後對初始劃分進行優化。這個初始聚類中心的選擇對聚類結果有較大的影響,一旦初始值選擇的不好,可能無法得到有效的聚類結果,這也成為 K-means演算法的一個主要問題。對於該問題的解決,許多演算法採用遺傳演算法,例如文獻 中採用遺傳演算法(GA)進行初始化,以內部聚類準則作為評價指標。
3.從 K-means 演算法框架可以看出,該演算法需要不斷地進行樣本分類調整,不斷地計算調整後的新的聚類中心,因此當數據量非常大時,演算法的時間開銷是非常大的。所以需要對演算法的時間複雜度進行分析、改進,提高演算法應用範圍。
應用案例
k-means演算法一個有趣的應用示例:中國男足近幾年到底在亞洲處於幾流水平?
今年中國男足可算是杯具到家了,幾乎到了過街老鼠人人喊打的地步。對於目前中國男足在亞洲的地位,各方也是各執一詞,有人說中國男足亞洲二流,有人說三流,還有人說根本不入流,更有人說其實不比日韓差多少,是亞洲一流。既然爭論不能解決問題,我們就讓數據告訴我們結果吧。
下圖是我採集的亞洲15隻球隊在2005年-2010年間大型杯賽的戰績(由於澳大利亞是後來加入亞足聯的,所以這裡沒有收錄)。
其中包括兩次世界盃和一次亞洲杯。我提前對數據做了如下預處理:對於世界盃,進入決賽圈則取其最終排名,沒有進入決賽圈的,打入預選賽十強賽賦予40,預選賽小組未出線的賦予50。對於亞洲杯,前四名取其排名,八強賦予5,十六強賦予9,預選賽沒出現的賦予17。這樣做是為了使得所有數據變為標量,便於後續聚類。
下面先對數據進行[0,1]規格化,下面是規格化後的數據:
接著用k-means演算法進行聚類。設k=3,即將這15支球隊分成三個集團。
現抽取日本、巴林和泰國的值作為三個簇的種子,即初始化三個簇的中心為A:{0.3, 0, 0.19},B:{0.7, 0.76, 0.5}和C:{1, 1, 0.5}。下面,計算所有球隊分別對三個中心點的相異度,這裡以歐氏距離度量。下面是我用程序求取的結果:
從做到右依次表示各支球隊到當前中心點的歐氏距離,將每支球隊分到最近的簇,可對各支球隊做如下聚類:
中國C,日本A,韓國A,伊朗A,沙特A,伊拉克C,卡達C,阿聯酋C,烏茲別克B,泰國C,越南C,阿曼C,巴林B,朝鮮B,印尼C。
第一次聚類結果:
A:日本,韓國,伊朗,沙特;
B:烏茲別克,巴林,朝鮮;
C:中國,伊拉克,卡達,阿聯酋,泰國,越南,阿曼,印尼。
下面根據第一次聚類結果,調整各個簇的中心點。
A簇的新中心點為:{(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}
用同樣的方法計算得到B和C簇的新中心點分別為{0.7, 0.7333, 0.4167},{1, 0.94, 0.40625}。
用調整後的中心點再次進行聚類,得到:
第二次迭代後的結果為:
中國C,日本A,韓國A,伊朗A,沙特A,伊拉克C,卡達C,阿聯酋C,烏茲別克B,泰國C,越南C,阿曼C,巴林B,朝鮮B,印尼C。
結果無變化,說明結果已收斂,於是給出最終聚類結果:
亞洲一流:日本,韓國,伊朗,沙特
亞洲二流:烏茲別克,巴林,朝鮮
亞洲三流:中國,伊拉克,卡達,阿聯酋,泰國,越南,阿曼,印尼
看來數據告訴我們,說國足近幾年處在亞洲三流水平真的是沒有冤枉他們,至少從國際杯賽戰績是這樣的。
其實上面的分析數據不僅告訴了我們聚類信息,還提供了一些其它有趣的信息,例如從中可以定量分析出各個球隊之間的差距,例如,在亞洲一流隊伍中,日本與沙特水平最接近,而伊朗則相距他們較遠,這也和近幾年伊朗沒落的實際相符。另外,烏茲別克和巴林雖然沒有打進近兩屆世界盃,不過憑藉預算賽和亞洲杯上的出色表現佔據B組一席之地,而朝鮮由於打入了2010世界盃決賽圈而有幸進入B組,可是同樣奇蹟般奪得2007年亞洲杯的伊拉克卻被分在三流,看來亞洲杯冠軍的分量還不如打進世界盃決賽圈重啊。其它有趣的信息,有興趣的朋友可以進一步挖掘。
上面的應用案例取自參考文獻3,資料有點久遠,只供學習演算法運用。Kmeans演算法目前就寫這麼多,之後有應用與新的自己的改進或想法會繼續補充的。
參考文獻
1、《機器學習實戰》(書)
2、《k-means聚類演算法的研究》(碩士論文)
3、演算法雜貨鋪——KMeans均值聚類(博客)
4、K均值聚類(kmeans)演算法及應用(博客)
5、其他各種網站(略)
推薦閱讀:
※無序數組的中第k小的數字
※圖書館大媽二分稍微升級
※一個帶限制條件的均勻洗牌問題
※015 3Sum[M]
※最小生成樹 - 包教包會
TAG:演算法 |