初識聚類演算法 K均值 凝聚層次聚類和DBSCAN

2021-07-13 07:55:31 字數 3445 閱讀 2504

聚類分析就僅根據在資料中發現的描述物件及其關係的資訊,將資料物件分組(簇

)。其目標是,組內的物件相互之間是相似的,而不同組中的物件是不同的。組內相似性越大,組

間差別越大,聚類就越好。

先介紹下聚類的不同型別,通常有以下幾種:

(1)層次的與劃分的:如果允許簇具有子簇,則我們得到乙個層次聚類。層次聚類是巢狀簇的集族,組織成一棵樹。劃分聚類簡單地將資料物件劃分成不重疊的子集(簇

),使得每個資料物件恰在乙個子集中。

(2)互斥的、重疊的與模糊的:互斥的指每個物件都指派到單個簇。重疊的或是模糊聚類用來反映乙個物件同時屬於多個組的事實。在模糊聚類中,每個資料物件以乙個0和

1之間的隸屬權值屬於每個簇。

每個物件與各個簇的隸屬權值之和往往是1。

(3)完全的與部分的:完全聚類將每個物件指派到乙個簇中。部分聚類中,某些物件可能不屬於任何組,比如一些噪音物件。

聚類分析後發現的簇往往也具有不同的型別:

(1)明顯分離的:簇是物件的集合,不同組中的任意兩點之間的距離都大於組內任意兩點之間的距離。(1)

(2)基於原型的:簇是物件的集合,其中每個物件到定義該簇的原型的距離比到其他簇的原型的距離更近(或更加相似)。對於具有連續屬性的資料,簇的原型通常是質心,即簇中所有點的平均值。這種簇傾向於呈球狀。

(3)基於圖的:如果資料用圖表示,其中節點是物件,而邊代表物件之間的聯絡,則簇可以定義為連通分支,即互相連通但不與組外物件連通的物件組。基於圖的簇乙個重要例子就是基於臨近的簇,其中兩個物件是相連的,僅當他們的距離在指定的範圍之內。也就是說,每個物件到該簇某個物件的距離比不同簇中的任意點的距離更近。

(4)基於密度的:簇是物件的稠密區域,被低密度的區域環繞。當簇不規則或互相盤繞,並且有雜訊和離群點時,常常使用基於密度的簇定義。

下面介紹三種常用的聚類演算法:

(1)基本k

均值:基於原型的,劃分的聚類技術,試圖從全部資料物件中發現使用者指定個數的簇。

(2)凝聚層次聚類:開始每個點各成一簇,然後重複的合併兩個最近的簇,直到指定的簇個數。

(3)dbscan

:一種劃分的,基於密度的聚類演算法。

下面我們以對二維空間的資料點物件的聚類為例,依次介紹三面三種聚類演算法。我們使用的表示二維空間的資料點的原始檔中,每行為乙個資料點,格式是

x座標值

# y座標值。 基本

k均值:選擇k

個初始質心,其中

k是使用者指定的引數,即所期望的簇的個數。每次迴圈中,每個點被指派到最近的質心,指派到同乙個質心的點集構成乙個簇。然後,根據指派到簇的點,更新每個簇的質心。重複指派和更新操作,直到質心不發生明顯的變化。

為了定義二維空間的資料點之間的「最近」概念,我們使用歐幾里得距離的平方,即點

a(x1,y1)

與點b(x2,y3)

的距離為

dist(a,b)=(x1-x2)2+(y1-y2)2

。另外我們使用誤差的平方和

sse作為全域性的目標函式,即最小化每個點到最近質心的歐幾里得距離的平方和。在設定該

sse的情況下,可以使用數學證明,簇的質心就是該簇內所有資料點的平均值。

根據該演算法,實現如下**:

或是 聚類的效果如下圖,圖中的折線是歷次迴圈時

3個簇的質心的更新軌跡,黑點是初始質心:

我們檢視基本

k均值演算法實現步驟及上面的聚類效果可以發現,該聚類演算法將所有資料點都進行了指派,不識別噪音點。另外選擇適當的初試質心是基本

k均值過程的關鍵。其實,只要兩個初試質心落在乙個簇對的任何位置,就能得到最優聚類,因為質心將自己重新分布,每個簇乙個,是

sse最小。如果初試時乙個簇只有乙個質心,那麼基本

k均值演算法不能將該質心在簇對之間重新分布,只能有區域性最優解。另外,它不能處理非球形簇,不同尺寸和不同密度的簇。

關於基本

k均值演算法的其他還可以查閱陳皓的部落格:

凝聚層次聚類

:所謂凝聚的,指的是該演算法初始時,將每個點作為乙個簇,每一步合併兩個最接近的簇。另外即使到最後,對於噪音點或是離群點也往往還是各佔一簇的,除非過度合併。對於這裡的「最接近」,有下面三種定義。我在實現是使用了

min,該方法在合併時,只要依次取當前最近的點對,如果這個點對當前不在乙個簇中,將所在的兩個簇合併就行:

(1)單鏈(min):

定義簇的鄰近度為不同兩個簇的兩個最近的點之間的距離。

(2)全鏈(max):

定義簇的鄰近度為不同兩個簇的兩個最遠的點之間的距離。

(3)組平均:定義簇的鄰近度為取自兩個不同簇的所有點對鄰近度的平均值。

根據該演算法,實現如下**。開始時計算每個點對的距離,並按距離降序依次合併。另外為了防止過度合併,定義的退出條件是

90%的簇被合併,即當前簇數是初始簇數的

10%:

或是 聚類的效果如下圖,黑色是噪音點:

另外我們可以看出凝聚的層次聚類並沒有類似基本k均值

的全域性目標函式,沒有區域性極小問題或是很難選擇初始點的問題。合併的操作往往是最終的,一旦合併兩個簇之後就不會撤銷。當然其計算儲存的代價是昂貴的。

dbscan

:是一種簡單的,基於密度的聚類演算法。本次實現中,

dbscan

使用了基於中心的方法。在基於中心的方法中,每個資料點的密度通過對以該點為中心以邊長為

2*eps

的網格(鄰域)

內的其他資料點的個數來度量。根據資料點的密度分為三類點:

(1)核心點:該點在鄰域內的密度超過給定的閥值

minps。

(2)邊界點:該點不是核心點,但是其鄰域內包含至少乙個核心點。

(3)噪音點:不是核心點,也不是邊界點。

有了以上對資料點的劃分,聚合可以這樣進行:各個核心點與其鄰域內的所有核心點放在同乙個簇中,把邊界點跟其鄰域內的某個核心點放在同乙個簇中。

根據該演算法,實現如下**:

或是 聚類的效果如下圖,黑色是噪音點:

因為dbscan

使用簇的基於密度的定義,因此它是相對抗噪音的,並且能處理任意形狀和大小的簇。但是如果簇的密度變化很大,例如

abcd

四個簇,

ab的密度大大大於

cd,而且

ab附近噪音的密度與簇

cd的密度相當,這是當

minps

較大時,無法識別簇

cd,簇cd和

ab附近的噪音都被認為是噪音;當

minps

較小時,能識別簇

cd,但

ab跟其周圍的噪音被識別為乙個簇。這個問題可以基於共享最近鄰

(snn)

的聚類結局。

初識聚類演算法 K均值 凝聚層次聚類和DBSCAN

聚類分析就僅根據在資料中發現的描述物件及其關係的資訊,將資料物件分組 簇 其目標是,組內的物件相互之間是相似的,而不同組中的物件是不同的。組內相似性越大,組間差別越大,聚類就越好。先介紹下聚類的不同型別,通常有以下幾種 1 層次的與劃分的 如果允許簇具有子簇,則我們得到乙個層次聚類。層次聚類是巢狀簇...

聚類演算法之K均值聚類

k means聚類方法 1.介紹 k均值聚類是基於樣本集合劃分的聚類演算法。由於每個樣本在劃分的過程中只能屬於乙個類別,所以k means演算法屬於硬聚類。2.演算法過程 k均值聚類演算法是乙個迭代的過程,每次迭代包括兩個步驟 3.複雜度 k均值聚類演算法的複雜度o mnk 其中k表示類別數,m表示...

k均值聚類演算法

輸入 簇的數目k和包含n個物件的資料庫。輸出 k個簇,使平方誤差準則最小。演算法步驟 1.為每個聚類確定乙個初始聚類中心,這樣就有k 個初始聚類中心。2.將樣本集中的樣本按照最小距離原則分配到最鄰近聚類 3.使用每個聚類中的樣本均值作為新的聚類中心。4.重複步驟2.3直到聚類中心不再變化。5.結束,...