一起來讀西瓜書:第九章 聚類

1. 章節主要內容

“聚類”(clustering)算法是“無監督學習”算法中研究最多、應用最廣的算法,它試圖將數據集中的樣本劃分為若干個通常是不相交的子集,每個子集稱為一個“簇”(cluster)

不同的簇分布代表著聚類算法對這組數據集觀測的不同角度,比如在不同屬性上進行分類會導致聚類算法將西瓜劃分為:“有籽瓜簇” “無籽瓜簇”,”淺色瓜簇” “深色瓜簇”,甚至“本地瓜簇” “外地瓜簇”等類別。

在此基礎上我們稍微擴展一下,假設存在一個能對機器學習各種算法進行分類的聚類學習器,那么在訓練樣本是否有標記這個屬性上,它會將機器學習算法分為“監督學習簇”、“非監督學習簇”和“半監督學習簇”;在預測結果是否是連續值這個屬性上,它會將機器學習算法分為“回歸算法簇”和“分類算法簇”;在算法基本步驟這個屬性上,它會將機器學習算法分為“貝葉斯算法簇”、“決策樹算法簇”、“神經網絡算法簇”等類別

需說明的是,這些劃分的概念對聚類算法來說事先是未知的,聚類過程僅能自動生成簇結構,簇所對應的概念語義需由使用者來把握和命名

因為聚類是在未標注樣本上的分類算法,所以不像之前我們介紹的其它算法一樣,我們可以直觀的知道訓練出來的模型的好壞,即我們不能通過比對測試樣本的預測結果和真實預測結果誤差值來近似泛化誤差。

所以在介紹聚類的具體算法之前,我們得要先討論聚類算法涉及的最基本的問題:如何判斷一個聚類算法結果的好壞

1)聚類結果好壞的評估指標:性能度量

聚類性能度量亦稱聚類“有效性指標”(validity index),與監督學習一樣,它的目的是為了用來評估聚類結果的好壞,當我們能通過性能度量來評估聚類的好壞時,我們就可以通過將這個性能度量作為優化目標來生成更好的聚類結果。

那么,對于聚類算法來說,什么樣的結果是好的呢?

直觀上來看,我們希望“物以類聚”,即同一簇的樣本盡可能彼此相似,不同簇的樣本盡可能不同。換言之,聚類結果的“簇內相似度”(intra-cluster similarity)高且“簇間相似度”(inter-cluster similarity)低

按照這樣的定義,我們將聚類的性能度量大致劃分為了以下兩類:

[1]外部指標

這一類的性能度量是將聚類結果與某個“參考模型”(reference model)進行比較,比如與領域專家的劃分結果進行比較(其實這已經算是某種程度上對數據進行標注了),稱為“外部指標”(external index)

基于對參考模型權威的信任,我們可以認為參考模型對樣本的劃分是滿足簇內相似度高且簇間相似度低的。所以對于“外部指標”,我們的度量目的就是要使得我們的聚類結果與參考模型盡可能相近,通常通過將聚類結果與參考模型結果對應的簇標記向量進行兩兩比對,來生成具體的性能度量,其度量的中心思想是:聚類結果中被劃分到同一簇中的樣本在參考模型中也被劃分到同一簇的概率越高代表聚類結果越好。常用的性能指標有:Jaccard系數、FM指數、Rand指數

[2]內部指標

這一類的性能度量是直接考察聚類結果而不利用任何參考模型,稱為“內部指標”

“內部指標”通過計算簇內的樣本距離,以及簇間的樣本距離來對聚類結果進行評估。其度量的中心思想是:簇內的樣本距離近似于簇內相似度,簇間樣本距離近似于簇間相似度,通過計算并組合這些樣本/簇距離的值來構建一個符合需要的性能度量指標。常用的性能指標有:DB指數、Dunn指數

以DB指數為例,其代表的是:任意兩個簇 Ci 和 Cj,它們的簇內平均距離的和( avg(Ci) + avg(Cj) )與它們簇間距離 dist( center(Ci), center(Cj) ) 的比值的最大值。這個指數越小,代表聚類結果的簇間距離越大,而簇內距離越小。

在理解了距離度量是聚類算法中對相似度的近似之后,我們下一節好好介紹以下距離計算的概念、性質以及具體形式

2)簇內/簇間相似度度量:距離計算

對于距離函數 dist(. , .),若它是一個“距離度量”(distance measure),則需滿足以下一些基本性質:

非負性:兩點之間距離不為負;

同一性:兩個點只有在樣本空間上重合才可能距離為零;

對稱性:a到b的距離等于b到a的距離;

直遞性:a到c的距離加上c到b的距離大于等于a直接到b的距離;

[1]連續屬性上的距離計算

在連續屬性上,給定樣本 xi 和 xj,它們之間的距離一般通過“閔科夫斯基距離”來計算,它計算樣本 xi 和 xj 在每一個屬性上的數值差值的 p 次方的和的開 p 次方。當 p = 2時,“閔科夫斯基距離”即歐式距離。

[2]離散屬性上的距離計算

在離散屬性上,因為其在定義域上只有有限個取值,當這些取值是有序的時,如 {1, 2, 3},我們可以同樣用“閔科夫斯基距離”來計算,但當取值為無序時,如 {蘋果, 香蕉, 桃子},我們使用 VDM(Value Difference Metric)來計算。

VDMp(a, b)代表的是在屬性 u 上,取值為 a 和 b 的樣本在不同簇上分布比例的差值的 p 次方。它是通過分布比例的不同來對屬性上的相似度來進行近似的。

[3]注意項

需注意的是,通常我們是基于某種形式的距離來定義相似度度量的,距離越大,則相似度越小。然而, 用于相似度度量的距離未必一定要滿足距離度量的所有性質,尤其是直遞性。比如下邊的例子:


我們要讓人和人馬相似、人馬和馬相似,但是我們不能認為人和馬是相似的,在此情況下,要滿足直遞性就得要人和馬的相似度不大于4,而直觀上來看人和馬十分的不相近(距離應該遠大于4),所以在這里直遞性就不適合了。這種距離稱為“非度量距離”,在不少現實任務中,我們需要基于數據樣本來確定合適的距離計算式。

在解答了聚類的性能度量之后,我們終于可以開始對具體的聚類算法進行講解了,基于不同的學習策略,我們可以將聚類分為不同類型。下一節,我們將對不同策略下的聚類算法進行介紹。

3)原型聚類

原型聚類假設聚類結構能通過一組原型刻畫,在現實聚類任務中及其常見。通常情況下,算法先對原型進行初始化,然后對原型進行迭代更新求解。采用不同的原型表示、求解方式,將產生不同的算法

[1]k均值(k-means)算法

“k均值”算法的選定參數 k 將數據集劃分為 k 個簇,并通過迭代更新使得簇劃分最小化平方誤差。

算法步驟如下:

-> 首先,初始化 k 個簇,隨機選擇 k 個樣本作為 k 個簇的初始均值向量

-> 然后,不斷迭代以下幾步步驟

>> 對每個樣本 x ,計算其與每個簇均值向量的距離 d,

>> 選擇最近的簇 i 作為 x 的簇標記,并將 x 放入該簇集合 Ci 中

>> 對所有的簇集合,根據本次迭代得到的簇集合計算新的均值向量

>> 當均值向量均未更新時,退出迭代步驟

-> 最終,我們獲得了聚類計算的結果簇劃分

需注意,k是靠人工選擇的結果,大家可以通過對不同的 k 值進行試驗,或通過對數據集的理解來找到最合適的 k 的取值。

[2]學習向量量化(Learning Vector Quantization,簡稱LVQ)

與k均值算法類似,LVQ也是試圖找到一組原型向量(k均值算法中的簇均值向量集合就是一組原型向量)來刻畫聚類結構,但與一般聚類算法不同的是,LVQ假設數據樣本帶有類別標記,學習過程利用樣本的這些監督信息來輔助聚類

學習向量量化的算法步驟如下:

-> 首先,初始化 p 個原型向量(數據集中有幾個類別,p就為幾),隨機從每個類別中選擇一個數據樣本作為該類別的初始原型向量

-> 然后,不斷迭代以下幾個步驟

>> 從樣本集中隨機選取樣本 x,并計算它與每個原型向量的距離,

并找出最近距離 d 所對應的原型向量 pi

>> 如果 pi 的類標記等于 x 的類標記,則原型向量 pi 向 x 方向按

學習率移動

>> 如果?pi 的類標記不等于 x 的類標記,則原型向量 pi 向 x 反方

向按學習率移動

>> 當原型向量滿足條件時(如達到迭代次數、原型向量更新很小)

退出迭代

-> 最終,我們獲得了聚類計算的結果原型向量

[3]高斯混合聚類

與k均值、LVQ用原型向量來刻畫聚類結構不同,高斯混合聚類采用概率模型來表達聚類原型。相對于k均值聚類算法使用 k 個原型向量來表達聚類結構,高斯混合聚類使用 k 個高斯概率密度函數混合來表達聚類結構

于是迭代更新 k 個簇原型向量的工作轉換為了迭代更新 k 個高斯概率密度函數的任務。每個高斯概率密度函數代表一個簇,當一個新的樣本進來時,我們可以通過這 k 的函數的值來為新樣本分類

高斯混合聚類的算法步驟如下:

-> 首先,初始化高斯混合分布的模型參數

-> 然后,不斷迭代以下幾個步驟

>> 對數據集中的每一個樣本 x,計算其在每一個混合成份上的后驗概率

>> 根據算好的后驗概率,更新高斯混合分布每一個混合成份上的參數

>> 當滿足停止條件,如達到迭代次數、似然函數更新很小時退出迭代

-> 接著,根據最后的混合成份,我們將數據集劃分到不同的簇中

-> 最終,我們獲得簇劃分以及高斯混合分布函數模型

4)密度聚類

密度聚類假設聚類結構能通過樣本分布的緊密程度確定。通常情況下,密度聚類算法從樣本密度的角度來考察樣本之間的可連接性,并基于可連接樣本不斷擴展聚類簇以獲得最終的聚類結果。

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一種著名的密度聚類算法,它基于一組“鄰域”參數來刻畫樣本分布的緊密程度。DBSCAN算法的中心思想是將滿足一定可達關系能導出的最大密度相連樣本定義為一個簇,其通過兩個基本參數 e 和 MinPts 來定義這個可達關系。要理解 DBSCAN 算法,我們先了解下邊這些概念:

[1]“e - 鄰域”:e為鄰域半徑,任意一個樣本 xj 的 “e - 鄰域” 包含樣本集 D 中與樣本 xj 的距離不大于 e 的樣本集合;

[2]核心對象:當一個樣本 x 的 “e - 鄰域”內含有至少 MinPts 個樣本時,該樣本 x 是一個核心對象;

[3]密度直達:若 xj 位于 xi 的?“e - 鄰域”中,且 xi 是核心對象,則稱 xj 與 xi 密度直達

[4]密度可達:若 xi 與 xj 能通過一系列密度直達的點關聯起來,則 xi 與 xj 密度可達

[5]密度相連:若 xi 與 xj 都能通過 xk 密度可達,則稱 xi 與 xj 密度相連

DBSCAN算法的步驟如下:

-> 首先,初始化核心對象集合為空

-> 然后,對每個樣本計算其鄰域空間集合,并根據鄰域所含結點判斷是否為

核心對象,如果是則加入核心對象集合

-> 接著,當核心對象集合不為空時,不斷重復迭代以下幾個步驟

>> 隨機從核心對象集合中抽取出一個核心對象

>> 根據這個核心對象找出其密度相連的所有樣本集合

>> 將這些樣本集合設定為一個簇

>> 將該簇集合中出現的核心對象從核心對象集合中移除

-> 最終,我們獲得聚類計算的結果簇劃分

需注意的是,在完成計算之后,可能會存在一些數據是不屬于任何簇的,這些樣本被認為是噪聲或異常樣本。在個別應用場景下,這部分樣本將具有較高的價值,比如在反欺詐場景下,這部分不合群的樣本數據是欺詐行為數據的概率較高。

5)層次聚類(Hierarchical clustering)

層次聚類試圖在不同層次對數據集進行劃分,從而形成樹形的聚類結構。數據集的劃分可采用“自底向上”的聚合策略,也可采用“自頂向下”的分拆策略。

AGNES(AGglomerative NESting)是一種采用自底向上聚合策略的層次聚類算法,它的算法十分簡單,那就是先將每個樣本看作一個初始聚類簇,然后在算法運行的每一步找出距離最近的兩個聚類簇進行合并,該過程不斷重復,直到達到預設的聚類簇個數。

這個算法十分簡單,其中的關鍵是如何計算兩個聚類簇之間的距離。根據以下不同的距離定義,我們將得到不同分類結果:

[1]最小距離:兩個聚類簇樣本之間的最小距離,使用該距離定義的算法被稱為“單鏈接”算法

[2]最大距離:兩個聚類簇樣本之間的最大距離,使用該距離定義的算法被稱為“全鏈接”算法

[3]平均距離:兩個聚類簇樣本之間的距離之和的平均,使用該距離定義的算法被稱為“均鏈接”算法


上圖是在西瓜數據集上的層次聚類結果,采用的是最大距離,橫軸對應于樣本編號,縱軸對應于聚類簇距離

2. 基礎知識

1)無監督學習(unsupervised learning)

在無監督學習中,訓練樣本的標記信息是未知的,目標是通過對無標記訓練樣本的學習來揭示數據的內在性質和規律,為進一步的數據分析提供基礎。

2)監督學習(supervised learning)

顧名思義,監督學習與無監督學習相反,即在標記好的訓練樣本上進行訓練和學習的機器學習算法

3)高斯分布(Gaussian distribution)

高斯分布也叫“正態分布”(Normal Distribution)。若隨機變量X服從一個數學期望為μ、方差為σ^2的正態分布,記為N(μ,σ^2),其概率密度函數為正態分布的期望值μ決定了其位置,其標準差σ決定了分布的幅度。當μ = 0,σ = 1時的正態分布是標準正態分布。

4)協方差矩陣

在統計學與概率論中,協方差矩陣的每個元素是各個向量元素之間的協方差。即協方差矩陣 aij 代表的是樣本 xi 和樣本 xj 的協方差。

3. 總結

1)“聚類”(clustering)算法試圖將數據集中的樣本劃分為若干個通常是不相交的子集,每個子集稱為一個“簇”(cluster),每個簇可能對應于一些潛在的概念(類別)

2)聚類過程僅能自動生成簇結構,簇所對應的概念語義需由使用者來把握和命名

3)聚類性能度量的目的是找出使聚類結果的“簇內相似度”(intra-cluster similarity)高且“簇間相似度”(inter-cluster similarity)低的聚類結果

4)距離度量是聚類算法中對相似度的近似

5)基于不同的學習策略,我們可以將聚類分為:原型聚類、密度聚類以及層次聚類等不同類型

6)原型聚類假設聚類結構能通過一組原型刻畫

7)密度聚類假設聚類結構能通過樣本分布的緊密程度確定

8)層次聚類試圖在不同層次對數據集進行劃分,從而形成樹形的聚類結構

9)密度聚類可能會有樣本不屬于任何一個簇,這部分數據可被認為是噪聲或異常數據

10)原型聚類和層次聚類的簇數量是由使用者自己設定的,而密度聚類則是由算法自己學習得來

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容