1. 程式人生 > >淺談K-means聚類演算法

淺談K-means聚類演算法

K-means演算法的起源

  1967年,James MacQueen在他的論文《用於多變數觀測分類和分析的一些方法》中首次提出 “K-means”這一術語。1957年,貝爾實驗室也將標準演算法用於脈衝編碼調製技術。1965年,E.W. Forgy發表了本質上相同的演算法——Lloyd-Forgy演算法,所以這一演算法有時也被稱為Lloyd-Forgy演算法。更高效的版本則被Hartigan and Wong提出。

K-means演算法的原理

  K-Means聚類演算法是聚類演算法之一,其中K表示類別的數量,也就是說,我們想要將資料分成幾個類別,Means表示均值。K值決定了初始質心(通常是隨機選擇的中心)的數量。K值是幾,必須有幾個質心。 簡而言之,K-Means聚類演算法是一種通過均值聚類資料點的演算法。

K-means演算法的過程

1、首先輸入K的值,將資料集分為K個類別。

2、從這組資料中隨機選擇K個數據點作為初始大哥(初始質心),其它資料點都作為小弟。

3、對資料集中每一個小弟,計算與每一個大哥的距離,離哪個大哥距離最近,就分配給哪個大哥。

4、每一個大哥手下都聚集了一幫小弟,這時候召開黑幫會議,推選出新的大哥(新的質心)。

5、如果新大哥和老大哥之間的距離很小或為0,說明新任大哥靠譜,選舉結束(可以認為我們進行的聚類已經達到期望的結果,演算法終止)。

6、如果新大哥和老大哥之間的距離很大,需要重新選舉新大哥,分配小弟(重複3~5的步驟)。

K-means演算法的例子

【例】以下是一組使用者的年齡資料,使用K-means演算法劃分資料。

   15,15,16,19,19,20,22,28,35,40

【步驟】

(1)我們將K值定為2,並隨機選擇16和22作為初始大哥。

(2)分別計算每一個小弟與初始大哥的距離,劃分門派,距離相同的隨機劃分。

表1 第一次劃分資料

所有資料

距16距離

距22距離

門派1(16)

門派2(22)

15

1

7

16

22

15

1

7

15

20

16

0

6

15

28

19

3

3

19

35

19

3

3

19

40

20

4

2

 

 

22

6

0

 

 

28

12

6

 

 

35

19

13

 

 

40

24

18

 

 

 

(3)分別計算兩個門派的均值,把均值推選為新的大哥(新質心)。門派1的均值為16.8,門派2的均值為29.我們以新大哥代替老大哥,並重復之前的操作計算每一個小弟與新大哥的距離,再次劃分門派。

表2 第二次劃分資料

所有資料

距16.8距離

距29距離

門派1(16.8)

門派2(29)

15

1.8

14

15

28

15

1.8

14

15

35

16

0.8

13

16

40

19

2.2

10

19

 

19

2.2

10

19

 

20

3.2

9

20

 

22

5.2

7

22

 

28

11.2

1

 

 

35

18.2

6

 

 

40

23.2

11

 

 

 

(4)此時門派1均值18,門派2均值34.33,推舉為新大哥,重複劃分門派。

表3 第三次劃分資料

所有資料

距18距離

距34.33距離

門派1(18)

門派2(34.33)

15

3

19.33

15

28

15

3

19.33

15

35

16

2

18.33

16

40

19

1

18.33

19

 

19

1

18.33

19

 

20

2

14.33

20

 

22

4

12.33

22

 

28

10

6.33

 

 

35

17

0.67

 

 

40

22

5.67

 

 

 

(5)計算門派1均值為18,門派2均值為34.33,推舉為新大哥,此時新大哥和老大哥距離為0,選舉結束。

年齡資料被劃分為兩類,如上圖所示,15--22為一類,28--40為一類。

 K-means演算法的有趣用例

1.文件分類器

根據標籤、主題和文件內容將文件分為多個不同的種類。這是一個非常標準且經典的K-means演算法分類問題。首先需要對文件進行初始化處理,將每個文件都用向量來表示,並使用術語頻率來識別常用術語進行文件分類,這一步很有必要。然後對文件向量進行聚類以識別文件組中的相似性。

2.物品傳輸優化

使用K-means演算法的組合找到無人機最佳發射位置和使用遺傳演算法來解決旅行商的行車路線問題,優化無人機物品傳輸過程。

3.識別犯罪地點

使用城市中特定地區的相關犯罪資料,分析犯罪型別、犯罪地點以及兩者之間的聯絡,可以對城市中容易犯罪的地區做高質量的偵查。這是基於德里飛行情報區犯罪資料的論文。

4.客戶分類

聚類能夠幫助營銷人員改善他們的客戶群(在其目標區域內工作),並根據客戶的購買歷史、興趣或活動監控來對客戶類別做進一步的細分。這是關於電信運營商如何將預付費客戶分為充值模式、傳送簡訊和瀏覽網站幾個類別的白皮書。對客戶進行分類有助於公司針對特定客戶群制定特定的廣告。

5.球隊狀態分析

分析球員的狀態一直都是體育界的一個重點。隨著競爭越來越激烈,機器學習在這個領域也扮演著至關重要的角色。要是你想建立一個優秀的球隊並且喜歡根據球員的狀態來識別類似的球員,那麼K-means演算法是一個很好的選擇。

6.保險欺詐檢測

機器學習在汽車、醫療保險和保險欺詐檢測領域中應用廣泛。利用以往欺詐性索賠的歷史資料,根據它和欺詐性模式聚類的相似性來識別新的索賠。由於保險欺詐可能會對公司造成數百萬美元的損失,因此欺詐檢測對公司來說至關重要。這是汽車保險中使用聚類來檢測欺詐的白皮書。

7.乘車資料分析

面向大眾公開的Uber乘車資訊的資料集,為我們提供了大量關於交通、運輸時間、高峰乘車地點等有價值的資料集。分析這些資料不僅對Uber大有好處,而且有助於我們對城市的交通模式進行深入的瞭解,來幫助我們做城市未來規劃。

8.網路分析犯罪分子

網路分析是從個人和團體中收集資料來識別二者之間的重要關係的過程。網路分析源自於犯罪檔案,該檔案提供了調查部門的資訊,由此對犯罪現場的罪犯進行分類。

9.呼叫記錄詳細分析

呼叫詳細記錄(CDR)是電信公司收集的關於使用者呼叫,短訊息和網路活動等資訊的集合。將通話詳細記錄與客戶個人資料結合在一起,這就能幫助電信公司對客戶需求做更多的預測。

10.IT警報的自動化聚類

大型企業IT基礎架構技術元件(如網路,儲存或資料庫)會生成大量的警報資訊。由於警報資訊可以指向具體的操作,因此必須對警報資訊進行手動篩選,確保後續過程的優先順序。對資料進行聚類可以對警報類別和平均修復時間做深入瞭解,有助於對未來故障進行預