1. 程式人生 > >【ML演算法】無監督學習——K-means聚類

【ML演算法】無監督學習——K-means聚類

前言

這一系列文章將介紹各種機器學習演算法,部分演算法涉及公示推導,我的部落格中有另一個板塊介紹基於python和R實現各種機器學習演算法,詳情見置頂的目錄。

K-means演算法

聚類演算法是一種無監督的機器學習演算法,通過距離測度實現樣本點的歸類,演算法的最終目的是使得聚簇內部樣本點相似度最大,聚簇間樣本點相似度最小,常見的聚類演算法有k-means聚類、層次聚類、DBCAN聚類等,本文介紹K-means聚類演算法,其他兩種演算法會陸續編輯。
K-means演算法的主要過程:
(1)選取K值
(2)隨機確定K個初始樣本中心點
(3)計算其他樣本點與聚簇中心的距離,將樣本總體分成K個類
(4)重新計算聚簇中心
(5)重複(3)(4)兩個過程,直到聚簇中心不發生變化,演算法收斂
由上面可以看出K-means聚類結果的主要影響因素如下:
(1)距離測度選擇。K-means聚類是以距離測度作為聚類依據,因此對於同一個樣本點,選取不同的距離測度,得到的距離也不同,關於距離測度,在KNN演算法中有所介紹,見文末,K-means聚類常用的距離測度為歐式距離,公式如下:

d(xi,xj)=k=1n(xi(k)xj(k))2=k=1n(xi(1)xj(1))2+(xi(2)xj(2))2++(xi(n)xj(n))2
(2)資料特徵。由於樣本點本身屬性具有的資料特徵,在做聚類時,會因為資料影響距離,最終影響聚類效果,比如 x 的有四個屬性,其屬性的資料範圍為:
x((0,1),(1,10),(1,100),(100,200))
,這種情況下,如果採取歐式距離測度,在計算時屬性3和屬性4的值對於距離的結果影響很大,可能直接影響了聚類結果。
處理方法:這種情況下可以進行資料預處理,對資料進行標準化,如0/1標準化、最小最大標準化,後續會在“machine learning演算法學習”版塊中介紹常用的資料預處理方法。
(3)k值選取。k值的選取在K-means演算法中是一個很常見又很重要的問題,選取好的k值,可以直接得到想要的聚類效果,如果k值選不好,可能會意向最終聚類效果。
處理方法:常見的選取k值的方法有以下兩種:一是先把樣本點plot出樣本散點圖觀察資料特徵,自己確定k值。二是設定一個迴圈,如
k[2,20]
,之後執行迴圈,找到聚類效果最好的情況對應的k值。
(4)初始中心點選取。由於樣本聚簇初始中心點是隨機選取的,具有不穩定性,如果隨機選取的初始點距離較近,則很可能增加迭代次數、影響最終的聚類結果。
處理方法:在選取初始點時,對選取原則加以限制,如隨機選取相互間距離較遠的k個點作為初始聚簇中心點,這就是K-means++的基本原則,將在下一節介紹。

K-means++演算法

K-means++演算法的基本思想為:使得初始選取的k箇中心點距離儘可能遠。其基本實現過程如下:
(1)隨機選取一個初始聚類中心點作為seed
(2)對於資料集中的每個點,分別計算它與seed點的距離 d(x) ,根據距離測度選出下一個中心點
(3)重複過程(2)直到選出k箇中心點
(4)執行K-means演算法
為了降低離群點對於聚類中心的影響,在(2)中選擇中心點的原則是: d(x) 較大的點,被選取作為聚類中心的概率較大。
選取方法:將(2)中每個點與seed點的距離 d(x) 儲存在陣列中,然後求和得到 sum(D(x)) ,取一個能落在sum(D(x)) 中的隨機值Random,然後Random=D(x) 直到其小於等於0,此時的點就是下一個中心點。
K-means++演算法可以確定初始聚類中心,但其也存在缺點:下一個中心點的選擇依賴前一箇中心點。

應用

聚類演算法應用廣泛,對於K-means演算法來講,常用作資料降維、探索性資料分析等,同時K-means演算法也經常用於進行基礎聚類挖掘研究,我在之前寫過一篇基於K-means聚類的臨終關懷現狀分析的文章,連結在文末。

參考資源