今天,和大家分享一下機器學習之無監督學習中的常見的聚類方法。
在無監督學習中,我們的數據并不帶有任何標簽,因此在無監督學習中要做的就是將這一系列無標簽的數據輸入到算法中,然后讓算法找到一些隱含在數據中的結構,通過下圖中的數據,可以找到的一個結構就是數據集中的點可以分成兩組分開的點集(簇),能夠圈出這些簇(cluster)的算法,就叫做聚類算法(clustering algorithm)。
聚類算法的應用
市場分割:將數據庫中客戶的信息根據市場進行不同的分組,從而實現對其分別銷售或者根據不同的市場進行服務改進。
社交網絡分析:通過郵件最頻繁聯系的人及其最頻繁聯系的人來找到一個關系密切的群體。
組織計算機集群:在數據中心里,計算機集群經常一起協同工作,可以用它來重新組織資源、重新布局網絡、優化數據中心以及通信數據。
了解銀河系的構成:利用這些信息來了解一些天文學的知識。
聚類分析的目標是將觀測值劃分為組(“簇”),以便分配到同一簇的觀測值之間的成對差異往往小于不同簇中的觀測值之間的差異。聚類算法分為三種不同的類型:組合算法、混合建模和模式搜索。
常見的幾種聚類算法有:
K-Means Clustering
Hierarchical Clustering
Agglomerative Clustering
Affinity Propagation
Mean Shift Clustering
Bisecting K-Means
DBSCAN
OPTICS
BIRCH
K-means
K-means 算法是目前最流行的聚類方法之一。
K-means 是由貝爾實驗室的 Stuart Lloyd 在 1957 年提出來的,最開始是用于脈沖編碼調制,直到 1982 年才將該算法對外公布。1965 年,Edward W.Forgy 發布了相同的算法,因此 K-Means 有時被稱為 Lloyd-Forgy。
在聚類問題中,我們會給定一組未加標簽的數據集,同時希望有一個算法能夠自動地將這些數據分成有緊密關系的的(coherent)子集(subsets) 或是簇(clusters)。K 均值(K-means)算法是現在最熱門最為廣泛運用的聚類算法。
直觀理解 K 均值算法:
假如有一個無標簽的數據集(上圖左),并且我們想要將其分為兩個簇,現在執行 K 均值算法,具體操作如下:
第一步,隨機生成兩個點(因為想要將數據聚成兩類)(上圖右),這兩個點叫做聚類中心(cluster centroids)。
第二步,進行 K 均值算法的內循環。K 均值算法是一個迭代算法,它會做兩件事情,第一個是簇分配(cluster assignment),第二個是移動聚類中心(move centroid)。
內循環的第一步是要進行簇分配,也就是說,遍歷每一個樣本,再根據每一個點到聚類中心距離的遠近將其分配給不同的聚類中心(離誰近分配給誰),對于本例而言,就是遍歷數據集,將每個點染成紅色或藍色。
內循環的第二步是移動聚類中心,將紅色和藍色的聚類中心移動到各自點的均值處(每組點的平均位置)。
接著就是將所有的點根據與新的聚類中心距離的遠近進行新的簇分配,如此循環,直至聚類中心的位置不再隨著迭代而改變,并且點的顏色也不再發生改變,此時可以說 K 均值已經聚合了。該算法在找出數據中兩個簇的方面做的相當好。
K-Means算法的優點:
簡單易懂,計算速度較快,適用于大規模數據集。
缺點:
例如對于非球形簇的處理能力較差,容易受到初始簇心的選擇影響,需要預先指定簇的數量K等。
此外,當數據點之間存在噪聲或者離群點時,K-Means算法可能會將它們分配到錯誤的簇中。
Hierarchical Clustering
層次聚類(Hierarchical Clustering)顧名思義就是按照某個層次對樣本集進行聚類操作,這里的層次實際上指的就是某種距離定義。
層次聚類最終的目的是消減類別的數量,所以在行為上類似于樹狀圖由葉節點逐步向根節點靠近的過程,這種行為過程又被稱為“自底向上”。
更通俗的,層次聚類是將初始化的多個類簇看做樹節點,每一步迭代,都是將兩兩相近的類簇合并成一個新的大類簇,如此反復,直至最終只剩一個類簇(根節點)。
層次聚類策略分為兩種基本范式:聚集型(自下而上)和分裂型(自上而下)。
與層次聚類相反的是分裂聚類(divisive clustering),又名 DIANA(Divise Analysis),它的行為過程為“自頂向下”。
應用 K-means 的結果取決于要搜索的聚類數量的選擇和起始配置分配。相反,層次聚類方法不需要這樣的規范。相反,它們要求用戶根據兩組觀察值之間的成對差異性,指定(不相交)觀察組之間的差異性度量。顧名思義,它們產生層次結構表示,其中層次結構每個級別的集群都是通過合并下一個較低級別的集群來創建的。在最低級別,每個集群包含一個觀察值。在最高級別,只有一個集群包含所有數據。
優點:
距離和規則的相似度容易定義,限制少;
不需要預先制定聚類數;
可以發現類的層次關系;
可以聚類成其它形狀。
缺點:
計算復雜度太高;
奇異值也能產生很大影響;
算法很可能聚類成鏈狀。
Agglomerative Clustering
凝聚層次聚類(Agglomerative Clustering)是一種自底向上的聚類算法,它將每個數據點視為一個初始簇,并將它們逐步合并成更大的簇,直到達到停止條件為止。在該算法中,每個數據點最初被視為一個單獨的簇,然后逐步合并簇,直到所有數據點被合并為一個大簇。
優點:
適用于不同形狀和大小的簇,且不需要事先指定聚類數目。
該算法也可以輸出聚類層次結構,便于分析和可視化。
缺點:
計算復雜度較高,尤其是在處理大規模數據集時,需要消耗大量的計算資源和存儲空間。
該算法對初始簇的選擇也比較敏感,可能會導致不同的聚類結果。
Affinity Propagation
Affinity Propagation(AP)算法,通常被翻譯為近鄰傳播算法或者親和力傳播算法,
Affinity Propagation 是一種基于圖論的聚類算法,旨在識別數據中的"exemplars"(代表點)和"clusters"(簇)。與 K-Means 等傳統聚類算法不同,Affinity Propagation 不需要事先指定聚類數目,也不需要隨機初始化簇心,而是通過計算數據點之間的相似性得出最終的聚類結果。
優點:
不需要制定最終聚類族的個數
已有的數據點作為最終的聚類中心,而不是新生成一個簇中心。
模型對數據的初始值不敏感。
對初始相似度矩陣數據的對稱性沒有要求。
相比與 k-centers 聚類方法,其結果的平方差誤差較小。
缺點:
該算法的計算復雜度較高,需要大量的存儲空間和計算資源;
對于噪聲點和離群點的處理能力較弱。
Mean Shift Clustering
Mean Shift Clustering 是一種基于密度的非參數聚類算法,其基本思想是通過尋找數據點密度最大的位置(稱為"局部最大值"或"高峰"),來識別數據中的簇。算法的核心是通過對每個數據點進行局部密度估計,并將密度估計的結果用于計算數據點移動的方向和距離。算法的核心是通過對每個數據點進行局部密度估計,并將密度估計的結果用于計算數據點移動的方向和距離。
優點:
不需要指定簇的數目,且對于形狀復雜的簇也有很好的效果。
算法還能夠有效地處理噪聲數據。
缺點:
計算復雜度較高,尤其是在處理大規模數據集時,需要消耗大量的計算資源和存儲空間;
該算法還對初始參數的選擇比較敏感,需要進行參數調整和優化。
Bisecting K-Means
Bisecting K-Means 是一種基于 K-Means 算法的層次聚類算法,其基本思想是將所有數據點劃分為一個簇,然后將該簇分成兩個子簇,并對每個子簇分別應用 K-Means 算法,重復執行這個過程,直到達到預定的聚類數目為止。
算法首先將所有數據點視為一個初始簇,然后對該簇應用K-Means算法,將該簇分成兩個子簇,并計算每個子簇的誤差平方和(SSE)。然后,選擇誤差平方和最大的子簇,并將其再次分成兩個子簇,重復執行這個過程,直到達到預定的聚類數目為止。
優點:
具有較高的準確性和穩定性,能夠有效地處理大規模數據集,并且不需要指定初始聚類數目。
該算法還能夠輸出聚類層次結構,便于分析和可視化。
缺點:
計算復雜度較高,尤其是在處理大規模數據集時,需要消耗大量的計算資源和存儲空間。
此外該算法對初始簇的選擇也比較敏感,可能會導致不同的聚類結果。
DBSCAN
具有噪聲的基于密度的聚類方法(Density-Based Spatial Clustering of Applications with Noise,DBSCAN)是一種典型的基于密度的空間聚類算法。
基于密度的方法的特點是不依賴于距離,而是依賴于密度,從而克服基于距離的算法只能發現“球形”聚簇的缺點。
DBSCAN算法的核心思想是:對于一個給定的數據點,如果它的密度達到一定的閾值,則它屬于一個簇中;否則,它被視為噪聲點。
優點:
這類算法能克服基于距離的算法只能發現“類圓形”(凸)的聚類的缺點;
可發現任意形狀的聚類,且對噪聲數據不敏感;
不需要指定類的數目 cluster;
算法中只有兩個參數,掃描半徑 (eps)和最小包含點數(min_samples)。
缺點:
計算復雜度,不進行任何優化時,算法的時間復雜度是O(N^{2}),通常可利用R-tree,k-d tree, ball;
tree索引來加速計算,將算法的時間復雜度降為O(Nlog(N));
受eps影響較大。在類中的數據分布密度不均勻時,eps較小時,密度小的cluster會被劃分成多個性質相似的cluster;eps較大時,會使得距離較近且密度較大的cluster被合并成一個cluster。在高維數據時,因為維數災難問題,eps的選取比較困難;
依賴距離公式的選取,由于維度災害,距離的度量標準不重要;
不適合數據集集中密度差異很大的,因為eps和metric選取很困難。
OPTICS
OPTICS(Ordering Points To Identify the Clustering Structure)是一種基于密度的聚類算法,其能夠自動確定簇的數量,同時也可以發現任意形狀的簇,并能夠處理噪聲數據。
OPTICS 算法的核心思想是:對于一個給定的數據點,通過計算它到其它點的距離,確定其在密度上的可達性,從而構建一個基于密度的距離圖。然后,通過掃描該距離圖,自動確定簇的數量,并對每個簇進行劃分。
優點:
能夠自動確定簇的數量,并能夠處理任意形狀的簇,并能夠有效地處理噪聲數據。
該算法還能夠輸出聚類層次結構,便于分析和可視化。
缺點:
計算復雜度較高,尤其是在處理大規模數據集時,需要消耗大量的計算資源和存儲空間。
該算法對于密度差異較大的數據集,可能會導致聚類效果不佳。
BIRCH
BIRCH(Balanced Iterative Reducing and Clustering using Hierarchies)是一種基于層次聚類的聚類算法,其可以快速地處理大規模數據集,并且對于任意形狀的簇都有較好的效果。
BIRCH算法的核心思想是:通過對數據集進行分級聚類,逐步減小數據規模,最終得到簇結構。BIRCH算法采用一種類似于B樹的結構,稱為CF樹,它可以快速地插入和刪除子簇,并且可以自動平衡,從而確保簇的質量和效率。
優點:
能夠快速處理大規模數據集,并且對于任意形狀的簇都有較好的效果。
該算法對于噪聲數據和離群點也有較好的容錯性。
缺點:
對于密度差異較大的數據集,可能會導致聚類效果不佳;
對于高維數據集的效果也不如其他算法。