無監(jiān)督學習-聚類

引言

文章根據(jù)udacity 的機器學習視頻進行整理,提供給初學者進行參考。主要圍繞幾種聚類算法:K-Means、層次聚類、DBSCAN、高斯混合模型聚類(GMM) 幾種聚類算法進行敘述。簡單講述算法原理、算法在sklearn中實現(xiàn)、相關(guān)應用案例的論文、算法優(yōu)缺點等。最后介紹評價聚類算法的兩種指標:調(diào)整蘭德系數(shù)和輪廓系數(shù)。

相關(guān)參考學習視頻:

udacity--機器學習(PS:國外導師視頻課程,中文字幕。課程簡潔易懂、生動形象。具有項目實戰(zhàn)、導師項目審核特色。比較推薦入門。點擊此處可獲得課程優(yōu)惠券

coursera--吳恩達機器學習(PS:? 吳恩達的機器學習一直備受入門的歡迎。內(nèi)容詳細、由淺入深。)

書籍:吳恩達機器學習筆記

1. K均值聚類(K-Means)

1.1 算法概述

K-均值是最普及的聚類算法,算法接受一個未標記的數(shù)據(jù)集,然后將數(shù)據(jù)聚類成不同的組。

K-均值是一個迭代算法,假設我們想要將數(shù)據(jù)聚類成 n 個組,其方法為:

????1. 首先選擇 k 個隨機的點,稱為聚類中心(cluster centroids), 也叫質(zhì)心;

????2. 對于數(shù)據(jù)集中的每一個數(shù)據(jù),按照距離 K 個中心點的距離,將其與距離最近的中心點關(guān)聯(lián)起來,與同一個中心點關(guān)聯(lián)的所有點聚成一類。

????3. 計算每一個組的平均值,將該組所關(guān)聯(lián)的中心點移動到平均值的位置。

可視化均值聚類過程??稍?a href="http://www.itdecent.cn/%E2%97%8B%20https://www.naftaliharris.com/blog/visualizing-k-means-clustering/" target="_blank">此點擊進行詳細了解。該網(wǎng)站將均值聚類的方法通過動態(tài)畫方式進行展示,可以幫助理解均值聚類的過程。

1.2 K-Means 性質(zhì)

K-Means 在指定質(zhì)心之后,需要進行多次迭代。在“多次迭代”和“更新質(zhì)心”的中,會算法最終達到收斂。但不幸的是算法最終會收斂,但是收斂最終集群卻不唯一,這取決于初始化的質(zhì)心的位置。如何初始化質(zhì)心的位置?(可見1.3 K-Means 初始化策略)

K-Means 需要先指定 k 值,即聚類的數(shù)量。通常情況下,并不知道聚類的數(shù)量為多少?選擇聚類數(shù)量可通過肘部法 (見1.4 選擇聚類的數(shù)量)。

1.3 K-Means 初始化策略

如何初始化K-Means質(zhì)心的位置? 有三種方法:

1. 隨機初始化所有的聚類中心點。隨機選擇 K 個訓練實例,然后令K個聚類中心分別于K個訓練實例相等,但有可能會停留在一個局部最小值處,這取決于初始化情況。解決這個問題,通常需要多次運行 K-均值算法,每一次都重新進行隨機初始 化,最后再比較多次運行 K-均值的結(jié)果,選擇代價函數(shù)最小的結(jié)果。這種方法如果K比較大,那么效果不會有明顯改善。

2. 以“最遠的”啟發(fā)式方法實現(xiàn)。隨機初始化第一個質(zhì)心,然后將第二個質(zhì)心初始化為距離它最遠的數(shù)據(jù)點。

3.?k-means ++?;?K-Means 的改進。它的工作方式與“最遠的”啟發(fā)式相似,不同的是,它選擇了一個點,其概率與其到最近的質(zhì)心的距離的平方成正比,而不是選擇第j個質(zhì)心為距前一個質(zhì)心最遠的點。

1.4 選擇聚類的數(shù)量

通常情況下,選擇聚類的數(shù)量是需要根據(jù)不同的問題,人工進行選擇的。選擇的時候思考運用 K-均值算法聚類的動機是什么,然后選擇能最好服務于該目的標聚類數(shù)。

當選擇聚類數(shù)目時,通常會用到一個 “肘部法則” 的方法:

關(guān)于“肘部法則”,所需要做的是改變 k 值,也就是聚類類別數(shù)目的總數(shù)。這里利用K-均值的代價函數(shù)(又叫畸變函數(shù))如圖:

選擇的K值不同,代價函數(shù)表現(xiàn)表現(xiàn)也不一樣。通常情況下是 K 值越多,代價函數(shù)越小。但在實際中 K 值(代表聚類數(shù)量) 不是要越多越好。K 值和代價函數(shù)之間通常可表現(xiàn)如下圖:

上圖中,可以看到這樣的曲線,像一個人的肘部。K 的選擇從 1 到 2 ,2 到 3 時代價函數(shù) J 下降最大。在 3 之后代價函數(shù) J 下降變緩。看起來當選擇 K = 3 時是相對比較好的。

選擇聚類數(shù)目也可以參考 輪廓系數(shù)。見“6.3 內(nèi)部評價指標-輪廓系數(shù)

1.5 K-Means 的表現(xiàn)

K-Means在具有大致相等大小和大致規(guī)則形狀的聚類的數(shù)據(jù)集中效果最好。但在一些 “月牙數(shù)據(jù)” 中,K 值表現(xiàn)就不盡人意。如下圖K-means在一些數(shù)據(jù)集中的表現(xiàn)結(jié)果。

盡管有利有弊,但k-means算法還是聚類分析中的主要工具:它可在許多實際數(shù)據(jù)集上很好地工作,并且相對較快,易于實現(xiàn)且易于理解。許多改進或推廣k均值的聚類算法,例如:k中值,k medoids,k-means ++用于高斯混合EM算法。

1.6 Sklearn 中的 K-Means

sklearn 中 K-Means 的相關(guān)介紹及實現(xiàn)

sklearn 中封裝 K-Means API

exmaple :

2. 層次聚類(Hierarchical Clustering)

2.1 概述

層次聚類(Hierarchical Clustering)是聚類算法的一種,通過計算不同類別數(shù)據(jù)點間的相似度來創(chuàng)建一棵有層次的嵌套聚類樹。層次如同公司內(nèi)部的人員體系,最高層是老板、老板下面是部門經(jīng)理、部門經(jīng)理下面是每個部門的員工。

層次聚類可以直觀的了解類之間的關(guān)系。如下圖:

2.2 四種不同的層次聚類法

2.2.1 概述

層次聚類法在主要有:單鏈接聚類法、全鏈接聚類法、組平均聚類、離差平方和法。四種不同的層次聚類算法基本原理基本相同,主要區(qū)別在于衡量距離的方式不同。

2.2.2 單鏈接聚類

基本原理:?

1. 假設數(shù)據(jù)特征如下圖模式:

2. 先假設每個點是一個類,然后計算任意兩個類之間的距離。把距離最近的兩個類合并成一個類。建立第一層,

如下圖:將 1 和 2 合并為一類;4 和 5 合并為一類;6 和 8 合并為一類;3 、7 單獨為一個類。

3. 在上面的基礎上再計算兩個類之間的距離。把距離最近的兩個類合并為一個類。組建為第二層。

上圖中可見:7 類 距離 [6,8] 類比較近。 這里注意單鏈接算法中兩個類的距離,是以兩個類中兩點之間的最短距離為標準,如:7 到 6 的距離。由此,可將 3 、1、2 合并為一類;7、6、8 合并為一類。

4. 以此建立為一個完整的系統(tǒng)樹。如下圖:

單鏈接聚類法衡量距離的方法是兩類之間兩點最短的距離。將距離最短的類合并。如下圖:

2.2.3 全鏈接聚類法表現(xiàn)

全鏈接聚類中衡量距離的方法是兩類中最遠的兩點之間的距離,這樣的衡量方法使得產(chǎn)生的類比較緊湊。

但是這些點可能是其他類中的一部分,全鏈接聚類法就忽視了它們,只考慮最遠的兩點。因此需要考慮其他方法,可參考下面的組平均和離差平方法。

如下圖兩個類中兩點之間的最遠距離:

2.2.4 組平均聚類法

組平均聚類法計算的是任意兩點之間的距離,然后取平均值。

如下圖:

2.2.4 離差平方和法

離差平方和法是sklearn中預設的一種層次聚類法。這種方法的目的就是把合并類時的變量最小化。

離差平方和法計算兩類間距離的方法:

1. 找一個中心點,取所有點之間的平均位置,所得即為中心點。

2. 然后計算所有點與中心點之間的距離。分別計算其平方、再相加

3. 再減去類中的變量平方。找到類中變量的方法:找到每個類的中心點,然后計算類中點到中心點的距離。

下圖中:X 為中心點、C 為兩類中的點到中心點的距離、A 和 B 分別為類中變量的平方。

2.3 表現(xiàn)

層次聚類中各種聚類算法在數(shù)據(jù)集中的表現(xiàn):

優(yōu)點:

層次表達、內(nèi)容鮮明、把聚類結(jié)果可視化。特別是當數(shù)據(jù)有層次結(jié)構(gòu)的時候,例如生物學。

缺點:

對噪音和離群值比較敏感。需要提前清理噪聲

計算量大。如果數(shù)據(jù)規(guī)模大、算法的執(zhí)行會比較慢。

案例:

把分泌蛋白聚類,并創(chuàng)建不同的類表示不同種類的真菌

論文:Using Hierarchical Clustering of Secreted Protein Families to Classify and Rank Candidate Effectors of Rust Fungi

2.4 sklearn 中的層次聚類

sklearn 中的層次聚類法https://scikit-learn.org/stable/modules/clustering.html#hierarchical-clustering

sklearn 中的層次聚類APIhttps://scikit-learn.org/stable/modules/generated/sklearn.cluster.FeatureAgglomeration.html#sklearn.cluster.FeatureAgglomeration

如果需要繪制層次樹,需要借助 SciPy :

3. 密集聚類(DBSCAN)

3.1 概述

密集聚類指的是具有噪聲的基于密度的聚類方法。對噪聲具有很強的適用性。一般是把密集分布的點進行聚類,再將剩余的點標記為噪聲。這種算法對 “月牙” 數(shù)據(jù)非常適用

3.2 基本原理

1. 假定這是對應的數(shù)據(jù)特征:

2. DBSCAN 在開始時任意選擇一點。選擇這個點后,查看點的領域。所謂領域是由 Epsilon 界定的,在算法開始時候指定。假如指定 Epsilon = 1 如下圖:

3. 該點的領域內(nèi)沒有任何點,則它不屬于任何類,標記為噪聲。再重新選擇一個點查看領域。

4. 如果重新選擇的點中,包括其他點。需要查看包含點的數(shù)量是否滿足指定數(shù)量。這里的指定數(shù)量用MinPts 指定,也是在算法開始時指定。假如指定 MinPts = 5 。表示領域內(nèi)必須由5個或5個以上的點才滿足要求,否則標為噪聲。如下圖找到Cluster 1

5. 同時再繼續(xù)尋找,如果遇到多個數(shù)據(jù)點緊湊在一起,如下圖,則標記為 cluster 2

3.3 表現(xiàn)

DBSCAN與K-Means 算法對比,在各種數(shù)據(jù)集的表現(xiàn):

優(yōu)點

不需要指明類的數(shù)量。DBSCAN能根據(jù)點的分布密度找到類。

不受限于某種外形的類,能靈活找到并分離各種形狀和大小的類

能處理噪聲和離群值

缺點

從兩個類可達的邊界點被分配給另一個類,因為這個類先發(fā)現(xiàn)的這個邊界點,由于各個點被隨機拜訪,這種情況不能保證回傳相同的聚類。但這種情況大多數(shù)數(shù)據(jù)集不會出現(xiàn)。

在找到不同密度的類方面有一定的困難?;谶@個可以用DBSCAN的變體HDBSCAN 即具有噪聲的基于密度的高層次空間聚類算法

應用案例

網(wǎng)絡流量的研究。論文:Traffic Classification Using Clustering Algorithms

對溫度數(shù)據(jù)值做異常檢測論文:Anomaly detection in temperature data using dbscan algorithm

3.4 sklearn 中的DBSCAN

sklearn 中的DBSCAN :https://scikit-learn.org/stable/modules/clustering.html#hierarchical-clustering

sklearn 中 DBSCAN 的 APIhttps://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html#sklearn.cluster.DBSCAN

4. 高斯混合模型聚類(GMM)

4.1 概述

高斯混合模型聚類(Gaussian Mixture Models) 是一種相對溫和的聚類算法。意思是數(shù)據(jù)中的每個點,每個樣本都屬于現(xiàn)有的類。只是隸屬不同。

例如:有這樣的一組一維數(shù)據(jù)集。

高斯混合模型算法會檢查每個點,算法會認為該點似乎是由高斯分布產(chǎn)生的。由此產(chǎn)生不同的隸屬度。如下圖:

高斯混合模型聚類算法是一種相對超前的算法。這種算法假設每個類都遵循統(tǒng)計分布的規(guī)律,它利用大量的概率和統(tǒng)計學知識來找出這些類。生活中很多都數(shù)據(jù)分布都遵循高斯分布(也叫正太分布) 的規(guī)律。如學生成績、人的身高。

4.2 一維高斯混合模型

4.2.1 一維高斯分布

1. 簡單概述一維高斯分布。以考試成績?yōu)槔?,考試成績一般都遵循高斯分布,如下圖:

2. 上圖中,中間可能有重疊的部分,無法看清,這時候需要借助柱狀體表示。柱狀圖的高度即為學生取得的分數(shù)。其中最高的柱狀表示頻次最多。即該分數(shù)段的學生最多。如下圖:

3.?由柱狀圖可以描述高斯分布或正太分布的曲線,同時描述正太分布曲線的數(shù)字有:平均值、標準差。在統(tǒng)計學中,以平均值為中心,向左減一個標準差,向右則加一個標準差。在1個標準差的范圍內(nèi)數(shù)據(jù)概率是 68%。(詳細可見統(tǒng)計學知識)。如下圖:

4.2.2 一維高斯混合模型聚類

同樣借助考試成績?yōu)槔齺砻枋鲆痪S高斯混合模型聚類。如下圖的數(shù)據(jù)集。

1. 假設數(shù)據(jù)集是由數(shù)學成績和物理成績混合的,因為是混合而成的數(shù)據(jù),所以它并不是高斯分布。如下圖:

2.?但是在高斯混合模型中,能夠通過高斯混合分布,找到這是兩個類。高斯混合分布本身并不是高斯模型,而是兩個高斯混合模型的混合物,但包含兩個高斯分布。借助高斯分布,判斷點屬于對應的類。

如下圖:

4.3 二維高斯混合模型聚類

4.3.1 二維高斯分布

1. 同樣以考試成績?yōu)槔?,如下圖是學生的兩門考試成績,包含了平均值和標準差。

2. 借助二維圖表,把 chemistry Score 設置為 X 軸,Geology Score 設置為 Y 軸。將對應的數(shù)據(jù)投射到圖表中。如下圖:

3. 可以看到每個變量呈現(xiàn)高斯分布,因此被稱為多維高斯狀態(tài)分布。如果用一種視覺化看待,圓心是兩條軸的平均值,第一個橢圓是每條軸的平均值或加或減標準差,包含 68 % 的數(shù)據(jù),第二個橢圓包含95%的數(shù)據(jù)集,第三個包含 99% 數(shù)據(jù)集。

4.3.2 二維高斯混合模型聚類

1. 假設有這樣的兩組數(shù)據(jù),均為多變量高斯分布,也叫二維高斯分布。如下圖:

2.?假設現(xiàn)在將兩組數(shù)據(jù)集混合之后,無法檢索原來的數(shù)據(jù)集。現(xiàn)在得到的數(shù)據(jù)集也不符合高斯分布。但我們知道這是由兩個符合高斯分布的數(shù)據(jù)集混合而成的。如下圖:

3.?到此實現(xiàn)利用高斯分布規(guī)律找到兩個類,需要借助期望最大化算法(EM)。

算法步驟:

step 1: 初始化K個高斯分布(在本例中 K = 2)。需要給它們均值和標準差,有很多方法可以實現(xiàn)。最樸素方法是將它們設置為數(shù)據(jù)集本身的平均值。實踐中還有一種更好的方法,是在數(shù)據(jù)集上使用K均值,然后使用K均值生成聚類初始化高斯分布。

在這個例子中,我們選取任意點,為每個高斯選擇隨機均值和隨機方差(方差不是標準差,方差是標準差的平方) 。到此完成了第一步,如下圖:

step 2: 將數(shù)據(jù)軟聚類成初始化的的兩個高斯。這一步驟稱為 E 步驟。

數(shù)據(jù)集中,每個點有兩個值,可以看著 feature1 和 feature2 。該步驟需要計算每個點的隸屬度。

計算方式如下圖:

step3: 基于軟聚類重新估計高斯。這一步驟稱為M步驟

該步驟是將 step2 中的所有點對聚類的隸屬度,用這些隸屬度為高斯模型提出新的參數(shù),即新的均值和方差。所以該步驟以 step2 的結(jié)果作為輸入,輸出新的均值和方差

新的均值計算:

新的方差計算:

現(xiàn)在有了新方差和均值,對比之前的均值和方差,可以看到有微微移動。這樣的過程可能需要重復5、10、20、30次直到收斂。

step4: 利用評估對數(shù)似然來檢查收斂。如果收斂,則返回結(jié)果。否則返回第二步反復進行,直到收斂

通過選取的方差、均值來最大化。其結(jié)果可以表示為,值越大,說明該模型里有需要的數(shù)據(jù)集

4.3.3 期望最大化示例

在上一節(jié)中使用高斯混合模型找到聚集的數(shù)據(jù)集。

如下圖:(黃色圓圈為需要找到的數(shù)據(jù)集)

上圖中很明顯使用圓形的高斯分布,無法收斂得到最終的兩個類。這是因為沒有選擇好初始化參數(shù)。我們需要做一個更好類型的初始化來初始化K值。這里可先使用K-Means的結(jié)果初始化高斯模型。使用K-Means做高斯混合模型的默認值,協(xié)方差為 full ,初始化將是K-Means的默認值。如果我們進行這個一個過程,將可能是這樣的。如下圖:

這可能是最近兩個數(shù)據(jù)集的模型,這就是高斯混合模型實現(xiàn)的。其他聚類模型或許無法實現(xiàn)。

4.4 表現(xiàn)

優(yōu)點:

提供軟聚類,軟聚類是多個實例屬性的隸屬度。(比如說:你正在對文檔進行分類,并且希望每個文檔有多個主題和類別。高斯混合模型聚類對這類場景很有用)

聚類方面具有靈活性,一個聚類中可以包含另一個聚類

缺點:

對初始化值比較敏感,可能收斂的局部最優(yōu),但不是全局最優(yōu)。

收斂速度慢

相關(guān)應用論文

Nonparametric discovery of human routines from sensor data

Application of the Gaussian mixture model in pulsar astronomy

Speaker Verification Using Adapted Gaussian Mixture Models

Adaptive background mixture models for real-time tracking

參考:

https://www.youtube.com/watch?v=lLt9H6RFO6A

4.4 Sklearn 中的高斯混合模型

sklearn 中高斯混合模型的APIhttps://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html?highlight=mixture#sklearn.mixture.GaussianMixture

5. 聚類分析過程

使用各種聚類算法的目的主要在于將數(shù)據(jù)集 data 轉(zhuǎn)化為 知識knowledge 。這個聚類算法的分析過程如下圖,選擇聚類算法只是其中一步。

step 1 :特征選擇和特征提取

特征選擇:從一組候選特征中選擇特征,不必對所有的數(shù)據(jù)集使用聚類方法,有時候數(shù)據(jù)集特征可能有成千上百。進行聚類需要消耗大量的資源,我們需要使用一些工具來選取特征。

特征提取:對數(shù)據(jù)進行轉(zhuǎn)換,以生成有用的特征。最好的例子是PCA即主成成分分析。

step 2 :? 選擇聚類算法。

根據(jù)數(shù)據(jù)的特征選擇合適的算法。通常是試驗那一種算法能有更好的結(jié)果。沒有一個算法普遍適合。

step 3 :聚類評價。

即評估一個聚類的效果如何,因此除了在情況下對結(jié)果進行可視化之外,還需要一些評估方法,這些方法被稱為指數(shù),每一個指數(shù)稱為聚類的有效評價指標。

step 4 :聚類結(jié)果的解釋

可以從最終聚類結(jié)構(gòu)中得到什么樣的見解

6. 聚類驗證

6.1 概述

聚類評價是客觀和定量評估聚類結(jié)果的過程。聚類評價指數(shù)有三種:外部指標、內(nèi)部指標、相對指標

外部指標:這是處理有標簽數(shù)據(jù)集時候使用的評分。因此在有標簽數(shù)據(jù)集的情況下,可使用外部指標來進行評價。

內(nèi)部指標:在數(shù)據(jù)集沒有標簽的情況下,則需要采用內(nèi)部指標進行評價。僅使用數(shù)據(jù)來衡量數(shù)據(jù)和結(jié)構(gòu)之間的吻合度。

相對指標:這些指標表明兩個聚類結(jié)構(gòu)中,哪一種在某種意義上更好。基本上所有的外部指標都能作為相對指標。

大多數(shù)評價指標都是通過緊湊性和可分性來定義的。緊湊性是衡量一聚類中元素之間彼此的距離??煞中允遣煌垲愔g距離

6.2 外部評價指標-調(diào)整蘭德系數(shù)

外部評價指標是當數(shù)據(jù)集有標簽時使用的評分方法。

在下圖中可以看到在sklearn中給定的評分方法和范圍。輸入原始的標簽,它會產(chǎn)生在范圍內(nèi)的一個得分。大多數(shù)在[0,1] 內(nèi)。但調(diào)整蘭德系數(shù)在[-1, 1]。

調(diào)整蘭德系數(shù)中,調(diào)整蘭德系數(shù)中 ARI 值為評價指標,ARI 越接近 1 。聚類結(jié)構(gòu)越好。

可參考論文:Details of the Adjusted Rand index

6.3 內(nèi)部評價指標-輪廓系數(shù)

內(nèi)部評價指標是當無數(shù)據(jù)標簽時使用的評價指標。

在下圖中可以看到在sklearn中給定的評分方法和范圍。其中給定的輪廓系數(shù)評分范圍在[-1, 1] 內(nèi)。它會給任何一個聚類在[-1,1] 之間的一個評分

輪廓系數(shù)評價指標

1. 假設這是一個已經(jīng)聚類完成的數(shù)據(jù)集。需要利用輪廓系數(shù)進行評價打分。

2. 輪廓系數(shù)評分公式:

參數(shù) a : 同一個聚類中到某個點其他樣本的平均距離,如下圖,藍色直線的距離。

參數(shù) b:b 是某個點距離其他類中的點最近的距離平均值。如下圖,就是黃色直線距離。

將a 和 b 代入公式即可得到輪廓系數(shù)。

獲取每個點的輪廓系數(shù),取平均值。就得到這個聚類的輪廓系數(shù)。

3. 參考不同數(shù)據(jù)集情況下, K 值情況下輪廓系數(shù)的??傻弥狵=3時候聚類結(jié)構(gòu)最好。同時可以借助輪廓系數(shù)來找到最優(yōu)的 K 值,即聚類數(shù)量。

但在DBSCAN下不能使用輪廓系數(shù)。

在“圓形”數(shù)據(jù)集情況下,DBSCAN聚類效果比較好,但是評分卻比較低。如下圖舉例,所以在DBSCAN中,可參考基于密度的聚類驗證

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容