『壹』 聚類(Clustering)
首先我們先來認識一下什麼是聚類任務。
聚類是「無監督學習(unsupervised learning)」中重要的一種。其目標是:通過對無標記的訓練樣本學習,來揭示數據內在的性質以及規律,為進一步的數據分析做基礎。聚類的結果是一個個的簇(Cluster)。所以來說,聚類通常作為其他學習演算法的先導,比如在分類問題中,常常先做聚類,基於聚類的不同簇來進行分類模型的訓練。
我們先來認識空中一下聚類演算法涉及到兩個基本問題:性能度量 & 距離計算。後面我們再具體講解聚類的經典演算法。
由於聚類演算法是無監督式學習,不依賴於樣本的真實標記。所以聚類並不能像監督學習例如分類那樣,通過計算對錯(精確度/錯誤率)來評價學習器的好壞或者作為學習器的優化目標。一般來說,聚類有兩類性能度量指標:外部指標和內部指標
所謂外部,是將聚類結果與某個參考模型的結果進行比較, 以參考模型的輸出作為標准,來評價聚類的好壞。 假設聚類給出的結果為 λ,參考模型給出的結果是λ*,則我們將樣本進行兩兩配對,定義:
內部指標不依賴任何外部模型,直接對聚類的結果進行評估。直觀來說: 簇內高內聚,簇間低耦合 。定義:
我們從小學的距離都是歐氏距離。這里介紹幾種其他的距離度量方法:
這里對於無需屬性我們用閔可夫斯基距離就不能做,需要用VDM距離進行計算,對於離散屬性滑磨的兩個取值a和b,定義:
所以在計算兩個樣本的距離時候斗讓山,將兩種距離混合在一起進行計算:
原型聚類即「基於原型的聚類(prototype-based clustering)」,原型指的是樣本空間中具有代表性的點(類似於K-Means 選取的中心點)。通常情況下來說,演算法現對原型進行初始化,然後對原型進行迭代更新求解。而不同的初始化形式和不同的求解方法,最終會得到不同的演算法。常見的 K-Means 便是基於簇中心來實現聚類;混合高斯聚類則是基於簇分布來實現聚類。下面我們具體看一下幾種算聚類演算法:
K-Means 聚類的思想十分簡單, 首先隨機指定類中心,根據樣本與類中心的遠近劃分類簇;然後重新計算類中心,迭代直至收斂。 實際上,迭代的過程是通過計算得到的。其根本的優化目標是平方誤差函數E:
其中 u_i 是簇 C_i 的均值向量。直觀上來看,上式刻畫了簇內樣本圍繞簇均值向量(可以理解為簇中心)的緊密程度,E值越小,則簇內樣本的相似度越高。
具體的演算法流程如下:
書上還給出了基於具體西瓜樣本集的計算過程說明。可以看一下。
LVQ 也是基於原型的聚類演算法,與K-Means 不同的是, LVQ使用樣本的真實類標記來輔助聚類 。首先,LVQ根據樣本的類標記,從各類中分別隨機選出一個樣本作為該類簇的原型,從而形成了一個 原型特徵向量組 ,接著從樣本集中隨機挑選一個樣本,計算其與原型向量組中每個向量的距離,並選取距離最小的向量所在的類簇作為該樣本的劃分結果,再與真實類標比較:
可以看到,K-Means 和 LVQ 都是以類中心作為原型指導聚類,而高斯混合聚類則採用 高斯分布 來描述原型。現在假設每個類簇中的樣本都服從一個多維高斯分布,那麼空間中的樣本可以看做由K個多維高斯分布混合而成。
多維高斯的概密為:
密度聚類是基於密度的聚類,它從個樣本分布的角度來考察樣本之間的 可連接性 ,並基於可連接性(密度可達)不斷拓展疆域(類簇)。最著名的就是DBSCAN(Density-Based Spatial Clustering of Applications with Noise),首先我們需要明白以下概念:
層次聚類試圖在不同層次對數據集進行劃分,從而形成屬性的聚類結構。
這里介紹一種「自底向上」結合策略的 AGNES(AGglomerative NESting)演算法。假設有N個待聚類的樣本,AGNES演算法的基本步驟如下:
可以看出其中最關鍵的一步就是 計算兩個類簇的相似度 ,這里有幾種度量方法:
(1)單鏈接(singal-linkage):取類間最小距離
『貳』 建議收藏!10 種 python 聚類演算法完整操作示例
聚類或聚類分析是無監督學習問題。它通常被用作數據分析技術,用於發現數據中的有趣模式,例如基於其行為的客戶群。有許多聚類演算法可供選擇,對於所有情況,沒有單一的最佳聚類演算法。相反,最好探索一系列聚類演算法以及每種演算法的不同配置。在本教程中,你將發現如何在 python 中安裝和使用頂級聚類演算法。完成本教程後,你將知道:
聚類分析,即聚類,是一項無監督的機器學習任務。它包括自動發現數據中的自然分組。與監督學習(類似預測建模)不同,聚類演算法只解釋輸入數據,並在特徵空間中找到自然組或群集。
群集通常是特徵空間中的密度區域,其中來自域的示例(觀測或數據行)比其他群集更接近群集。群集可以具有作為樣本或點特徵空間的中心(質心),並且可以具有邊界或范圍。
聚類可以作為數據分析活動提供幫助,以便了解更多關於問題域的信息,即所謂的模式發現或知識發現。例如:
聚類還可用作特徵工程的類型,其中現有的和新的示例可被映射並標記為屬於數據中所標識的群集之一。雖然確實存在許多特定於群集的定量措施,但是對所識別的群集的評估是主觀的,並且可能需要領域專家。通常,聚類演算法在人工合成數據集上與預先定義的群集進行學術比較,預計演算法會發現這些群集。
有許多類型的聚類演算法。許多演算法在特徵空間中的示例之間使用相似度或距離度量,以發現密集的觀測區域。因此,在使用聚類演算法之前,擴展數據通常是良好的實踐。
一些聚類演算法要求您指定或猜測數據中要發現的群集的數量,而另一些演算法要求指定觀測之間的最小距離,其中示例可以被視為「關閉」或「連接」。因此,聚類分析是一個迭代過程,在該過程中,對所識別的群集的主觀評估被反饋回演算法配置的改變中,直到達到期望的或適當的結果。scikit-learn 庫提供了一套不同的聚類演算法供選擇。下面列出了10種比較流行的演算法:
每個演算法都提供了一種不同的方法來應對數據中發現自然組的挑戰。沒有最好的聚類演算法,也沒有簡單的方法來找到最好的演算法為您的數據沒有使用控制實驗。在本教程中,我們將回顧如何使用來自 scikit-learn 庫的這10個流行的聚類演算法中的每一個。這些示例將為您復制粘貼示例並在自己的數據上測試方法提供基礎。我們不會深入研究演算法如何工作的理論,也不會直接比較它們。讓我們深入研究一下。
在本節中,我們將回顧如何在 scikit-learn 中使用10個流行的聚類演算法。這包括一個擬合模型的例子和可視化結果的例子。這些示例用於將粘貼復制到您自己的項目中,並將方法應用於您自己的數據。
1.庫安裝
首先,讓我們安裝庫。不要跳過此步驟,因為你需要確保安裝了最新版本。你可以使用 pip Python 安裝程序安裝 scikit-learn 存儲庫,如下所示:
接下來,讓我們確認已經安裝了庫,並且您正在使用一個現代版本。運行以下腳本以輸出庫版本號。
運行該示例時,您應該看到以下版本號或更高版本。
2.聚類數據集
我們將使用 make _ classification ()函數創建一個測試二分類數據集。數據集將有1000個示例,每個類有兩個輸入要素和一個群集。這些群集在兩個維度上是可見的,因此我們可以用散點圖繪制數據,並通過指定的群集對圖中的點進行顏色繪制。這將有助於了解,至少在測試問題上,群集的識別能力如何。該測試問題中的群集基於多變數高斯,並非所有聚類演算法都能有效地識別這些類型的群集。因此,本教程中的結果不應用作比較一般方法的基礎。下面列出了創建和匯總合成聚類數據集的示例。
運行該示例將創建合成的聚類數據集,然後創建輸入數據的散點圖,其中點由類標簽(理想化的群集)著色。我們可以清楚地看到兩個不同的數據組在兩個維度,並希望一個自動的聚類演算法可以檢測這些分組。
已知聚類著色點的合成聚類數據集的散點圖接下來,我們可以開始查看應用於此數據集的聚類演算法的示例。我已經做了一些最小的嘗試來調整每個方法到數據集。3.親和力傳播親和力傳播包括找到一組最能概括數據的範例。
它是通過 AffinityPropagation 類實現的,要調整的主要配置是將「 阻尼 」設置為0.5到1,甚至可能是「首選項」。下面列出了完整的示例。
運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集著色。在這種情況下,我無法取得良好的結果。
數據集的散點圖,具有使用親和力傳播識別的聚類
4.聚合聚類
聚合聚類涉及合並示例,直到達到所需的群集數量為止。它是層次聚類方法的更廣泛類的一部分,通過 AgglomerationClustering 類實現的,主要配置是「 n _ clusters 」集,這是對數據中的群集數量的估計,例如2。下面列出了完整的示例。
運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集著色。在這種情況下,可以找到一個合理的分組。
使用聚集聚類識別出具有聚類的數據集的散點圖
5.BIRCHBIRCH
聚類( BIRCH 是平衡迭代減少的縮寫,聚類使用層次結構)包括構造一個樹狀結構,從中提取聚類質心。
它是通過 Birch 類實現的,主要配置是「 threshold 」和「 n _ clusters 」超參數,後者提供了群集數量的估計。下面列出了完整的示例。
運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集著色。在這種情況下,可以找到一個很好的分組。
使用BIRCH聚類確定具有聚類的數據集的散點圖
6.DBSCANDBSCAN
聚類(其中 DBSCAN 是基於密度的空間聚類的雜訊應用程序)涉及在域中尋找高密度區域,並將其周圍的特徵空間區域擴展為群集。
它是通過 DBSCAN 類實現的,主要配置是「 eps 」和「 min _ samples 」超參數。下面列出了完整的示例。
運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集著色。在這種情況下,盡管需要更多的調整,但是找到了合理的分組。
使用DBSCAN集群識別出具有集群的數據集的散點圖
7.K均值
K-均值聚類可以是最常見的聚類演算法,並涉及向群集分配示例,以盡量減少每個群集內的方差。
它是通過 K-均值類實現的,要優化的主要配置是「 n _ clusters 」超參數設置為數據中估計的群集數量。下面列出了完整的示例。
運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集著色。在這種情況下,可以找到一個合理的分組,盡管每個維度中的不等等方差使得該方法不太適合該數據集。
使用K均值聚類識別出具有聚類的數據集的散點圖
8.Mini-Batch
K-均值Mini-Batch K-均值是 K-均值的修改版本,它使用小批量的樣本而不是整個數據集對群集質心進行更新,這可以使大數據集的更新速度更快,並且可能對統計雜訊更健壯。
它是通過 MiniBatchKMeans 類實現的,要優化的主配置是「 n _ clusters 」超參數,設置為數據中估計的群集數量。下面列出了完整的示例。
運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集著色。在這種情況下,會找到與標准 K-均值演算法相當的結果。
帶有最小批次K均值聚類的聚類數據集的散點圖
9.均值漂移聚類
均值漂移聚類涉及到根據特徵空間中的實例密度來尋找和調整質心。
它是通過 MeanShift 類實現的,主要配置是「帶寬」超參數。下面列出了完整的示例。
運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集著色。在這種情況下,可以在數據中找到一組合理的群集。
具有均值漂移聚類的聚類數據集散點圖
10.OPTICSOPTICS
聚類( OPTICS 短於訂購點數以標識聚類結構)是上述 DBSCAN 的修改版本。
它是通過 OPTICS 類實現的,主要配置是「 eps 」和「 min _ samples 」超參數。下面列出了完整的示例。
運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集著色。在這種情況下,我無法在此數據集上獲得合理的結果。
使用OPTICS聚類確定具有聚類的數據集的散點圖
11.光譜聚類
光譜聚類是一類通用的聚類方法,取自線性線性代數。
它是通過 Spectral 聚類類實現的,而主要的 Spectral 聚類是一個由聚類方法組成的通用類,取自線性線性代數。要優化的是「 n _ clusters 」超參數,用於指定數據中的估計群集數量。下面列出了完整的示例。
運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集著色。在這種情況下,找到了合理的集群。
使用光譜聚類聚類識別出具有聚類的數據集的散點圖
12.高斯混合模型
高斯混合模型總結了一個多變數概率密度函數,顧名思義就是混合了高斯概率分布。它是通過 Gaussian Mixture 類實現的,要優化的主要配置是「 n _ clusters 」超參數,用於指定數據中估計的群集數量。下面列出了完整的示例。
運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集著色。在這種情況下,我們可以看到群集被完美地識別。這並不奇怪,因為數據集是作為 Gaussian 的混合生成的。
使用高斯混合聚類識別出具有聚類的數據集的散點圖
在本文中,你發現了如何在 python 中安裝和使用頂級聚類演算法。具體來說,你學到了:
『叄』 數據挖掘干貨總結(四)--聚類演算法
本文共計2680字,預計閱讀時長七分鍾
聚類演算法
一 、 本質
將數據劃分到不同的類里,使相似的數據在同一類里,不相似的數據在不同類里
二 、 分類演算法用來解決什麼問題
文本聚類、圖像聚類和商品聚類,便於發現規律,以解決數據稀疏問題
三 、 聚類演算法基礎知識
1. 層次聚類 vs 非層次聚類
– 不同類之間有無包含關系
2. 硬聚類 vs 軟聚類
– 硬聚類:每個對象只屬於一個類
– 軟聚類:每個對象以某個概率屬於每個類
3. 用向量表示對象
– 每個對象用一個向量表示,可以視為高維空間的一個點
– 所有對象形成數據空間(矩陣)
– 相似度計算:Cosine、點積、質心距離
4. 用矩陣列出對象之間的距離、相似度
5. 用字典保存上述矩陣(節省空間)
D={(1,1):0,(1,2):2,(1,3):6...(5,5):0}
6. 評價方法
– 內部評價法(Internal Evalution):
• 沒有外部標准,非監督式
• 同類是否相似,跨類是否相異
DB值越小聚類效果越好,反之,越不好
– 外部評價法(External Evalution):
• 准確度(accuracy): (C11+C22) / (C11 + C12 + C21 + C22)
• 精度(Precision): C11 / (C11 + C21 )
• 召回(Recall): C11 / (C11 + C12 )
• F值(F-measure):
β表示對精度P的重視程度,越大越重視,默認設置為1,即變成了F值,F較高時則能說明聚類效果較好。
四 、 有哪些聚類演算法
主要分為 層次化聚類演算法 , 劃分式聚類演算法 , 基於密度的聚類演算法 , 基於網格的聚類演算法 , 基於模型的聚類演算法等 。
4.1 層次化聚類演算法
又稱樹聚類演算法,透過一種層次架構方式,反復將數據進行分裂或聚合。典型的有BIRCH演算法,CURE演算法,CHAMELEON演算法,Sequence data rough clustering演算法,Between groups average演算法,Furthest neighbor演算法,Neares neighbor演算法等。
凝聚型層次聚類 :
先將每個對象作為一個簇,然後合並這些原子簇為越來越大的簇,直到所有對象都在一個簇中,或者某個終結條件被滿足。
演算法流程:
1. 將每個對象看作一類,計算兩兩之間的最小距離;
2. 將距離最小的兩個類合並成一個新類;
3. 重新計算新類與所有類之間的距離;
4. 重復2、3,直到所有類最後合並成一類。
特點:
1. 演算法簡單
2. 層次用於概念聚類(生成概念、文檔層次樹)
3. 聚類對象的兩種表示法都適用
4. 處理大小不同的簇
5. 簇選取步驟在樹狀圖生成之後
4.2 劃分式聚類演算法
預先指定聚類數目或聚類中心,反復迭代逐步降低目標函數誤差值直至收斂,得到最終結果。K-means,K-modes-Huang,K-means-CP,MDS_CLUSTER, Feature weighted fuzzy clustering,CLARANS等
經典K-means:
演算法流程:
1. 隨機地選擇k個對象,每個對象初始地代表了一個簇的中心;
2. 對剩餘的每個對象,根據其與各簇中心的距離,將它賦給最近的簇;
3. 重新計算每個簇的平均值,更新為新的簇中心;
4. 不斷重復2、3,直到准則函數收斂。
特點:
1.K的選擇
2.中心點的選擇
– 隨機
– 多輪隨機:選擇最小的WCSS
3.優點
– 演算法簡單、有效
– 時間復雜度:O(nkt)
4.缺點
– 不適於處理球面數據
– 密度、大小不同的聚類,受K的限制,難於發現自然的聚類
4.3 基於模型的聚類演算法
為每簇假定了一個模型,尋找數據對給定模型的最佳擬合,同一」類「的數據屬於同一種概率分布,即假設數據是根據潛在的概率分布生成的。主要有基於統計學模型的方法和基於神經網路模型的方法,尤其以基於概率模型的方法居多。一個基於模型的演算法可能通過構建反應數據點空間分布的密度函數來定位聚類。基於模型的聚類試圖優化給定的數據和某些數據模型之間的適應性。
SOM 神經網路演算法 :
該演算法假設在輸入對象中存在一些拓撲結構或順序,可以實現從輸入空間(n維)到輸出平面(2維)的降維映射,其映射具有拓撲特徵保持性質,與實際的大腦處理有很強的理論聯系。
SOM網路包含輸入層和輸出層。輸入層對應一個高維的輸入向量,輸出層由一系列組織在2維網格上的有序節點構成,輸入節點與輸出節點通過權重向量連接。學習過程中,找到與之距離最短的輸出層單元,即獲勝單元,對其更新。同時,將鄰近區域的權值更新,使輸出節點保持輸入向量的拓撲特徵。
演算法流程:
1. 網路初始化,對輸出層每個節點權重賦初值;
2. 將輸入樣本中隨機選取輸入向量,找到與輸入向量距離最小的權重向量;
3. 定義獲勝單元,在獲勝單元的鄰近區域調整權重使其向輸入向量靠攏;
4. 提供新樣本、進行訓練;
5. 收縮鄰域半徑、減小學習率、重復,直到小於允許值,輸出聚類結果。
4.4 基於密度聚類演算法
只要鄰近區域的密度(對象或數據點的數目)超過某個閾值,就繼續聚類,擅於解決不規則形狀的聚類問題,廣泛應用於空間信息處理,SGC,GCHL,DBSCAN演算法、OPTICS演算法、DENCLUE演算法。
DBSCAN:
對於集中區域效果較好,為了發現任意形狀的簇,這類方法將簇看做是數據空間中被低密度區域分割開的稠密對象區域;一種基於高密度連通區域的基於密度的聚類方法,該演算法將具有足夠高密度的區域劃分為簇,並在具有雜訊的空間數據中發現任意形狀的簇。
4.5 基於網格的聚類演算法
基於網格的方法把對象空間量化為有限數目的單元,形成一個網格結構。所有的聚類操作都在這個網格結構(即量化空間)上進行。這種方法的主要優點是它的處理 速度很快,其處理速度獨立於數據對象的數目,只與量化空間中每一維的單元數目有關。但這種演算法效率的提高是以聚類結果的精確性為代價的。經常與基於密度的演算法結合使用。代表演算法有STING演算法、CLIQUE演算法、WAVE-CLUSTER演算法等。
『肆』 如何提升自底向上的聚合聚類演算法的計算效率
提升自底向上的聚合聚類演算法的計算效率的方法:
1、通過計算各類別中數據之間的相似度,最終創建一棵有層次的嵌套聚類樹。
2、起核心思想,在不同層次上思考問題。
3、計算數據集的相似矩陣。
4、假設每個樣本點為一個簇類。
『伍』 聚類演算法 - EM
EM(Expectation-Maximum)演算法也稱期望最大化演算法。EM演算法是最常見的隱變數估計方法,在機器學習中有極為廣泛的用途,例如常被用來學習高斯混合模型(Gaussian mixture model,簡稱GMM)的參數;隱式馬爾科夫演算法(HMM)、LDA主題模型的變分推斷等等。
極大似然估計,只是一種概率論在統計學的應用譽攔,它是參數估計的方法之一。說的是已知某個隨機樣本滿足某種概率分布,但是其中具體的參數不清楚,參數估計就是通過若干次試驗,觀察其結果,利用結果推出參數的大概值。極大似然估計是建立在這樣的思想上:已知某個參數能使這個樣本出現的概率最大,我們當然不會再去選擇其他小概率的樣本,所以乾脆就把這個參數作為估計的真實值。
極大似然估計的核心關鍵就是對於一些情況,樣本太多,無法得出分布的參數值,可以采樣小樣本後,利用極大似然估計獲取假設中分布的參數值。
由於EM演算法目前還未能理解具體的推導過程歲族,因此暫時留下資料,為之後舉例演算法過程做參考。
這是 文字傳送門 ,
這是 視頻傳送門,這是一個老師講的課,非常推薦 ,
這是 簡易動畫展示傳送門 。
(1)演算法計算結果穩定、准確
(2)EM演算法自收斂,既不需要事先設定類別,也不需要數據間的兩兩比較合並等操作
(1)對初始化數據敏感
(2)EM演算法計算復雜,收斂較慢,不適於大規模數據集和高維數據
(3)當所要優化的乎虛弊函數不是凸函數時,EM演算法容易給出局部最優解,而不是全局最優解
『陸』 層次聚類缺點如何避免
層次聚類是一種常用的聚類演算法,但是它也存在一些缺點。其中最主要的缺點是計算復雜度高,時間復雜度為O(n^3),空間復雜度為O(n^2)。這意味著當數據量很大時,層次聚類演算法的計算成本會非常高,甚至無法承受。此外,層次聚類演算法還容易受到雜訊的影響,因為它是一種基於距離的聚類演算法,所以如果數據中存在異常值或雜訊,就會導致聚類結果不準確。
為了避免層次聚類演算法的缺點,可以採取以下措施:
1. 優化演算法:可以通過優化演算法來降低計算復雜度,例如使用快速聚類演算法或基於密度的聚類演算法。
2. 數據預處理:在進行聚類之前,可以對數據進行預處理,例如去除異常值或雜訊,以提高聚類的准確性。
3. 選擇合適的距離度量方法:距離度量方法對聚類結果的影響非常大,因此需要選擇合適的距離度量方法,例如備畢談歐幾里得距離、曼哈頓距離或餘弦相似度等。
4. 選擇合適的聚類方法:除了層次聚類演算法,還有很多其他的聚類演算法可供選擇,例如K-means聚類、DBSCAN聚類等,可以根據具體情況選擇合適的聚類演算法。
總之,避免層次聚類算仿碰法的缺點需要綜合考慮多個因素,包括演算法優化、數據預處理、距離度量方法和聚類方法等。只有在選擇合適的方法和策略的基礎上,才能得到准確、高效的聚類結果數消。
『柒』 機組聚類線性化方法
機組聚類線性化方法是一種將多個發電機組進行聚類,並將聚類後的發電機組線性化的方法。這種方法可以用於電力系統的穩定性分析和控制設計。下面是將該方法的步驟簡述:
1. 首先,旁譽山使用聚類演算法對發電機組進行聚類。聚類演算法可以是k-means、層次聚類等。
2. 對每個產生的聚類,使用最小二乘法擬合線性模型。
3. 對每個聚類的線性模型進行合並,得到整個電力系統的線性模型。
4. 使用得到的線性虛畢模型進行分析或控制。
需要注意的是,該方法的有效性和精度受到所使用運中的聚類演算法和擬合方法的影響,因此在具體實現中需要進行細致的優化和調整。
『捌』 用於數據挖掘的聚類演算法有哪些,各有何優勢
聚類方法的分類,主要分為層次化聚類演算法,劃分式聚類演算法,基於密度的聚類演算法,基於網格的聚類演算法,基於模型的聚類演算法等。
而衡量聚類演算法優劣的標准主要是這幾個方面:處理大的數據集的能力;處理任意形狀,包括有間隙的嵌套的數據的能力;演算法處理的結果與數據輸入的順序是否相關,也就是說演算法是否獨立於數據輸入順序;處理數據雜訊的能力;是否需要預先知道聚類個數,是否需要用戶給出領域知識;演算法處理有很多屬性數據的能力,也就是對數據維數是否敏感。
.聚類演算法主要有兩種演算法,一種是自下而上法(bottom-up),一種是自上而下法(top-down)。這兩種路徑本質上各有優勢,主要看實際應用的時候要根據數據適用於哪一種,Hierarchical methods中比較新的演算法有BIRCH主要是在數據體量很大的時候使用;ROCK優勢在於異常數據抗干擾性強……
關於數據挖掘的相關學習,推薦CDA數據師的相關課程,課程以項目調動學員數據挖掘實用能力的場景式教學為主,在講師設計的業務場景下由講師不斷提出業務問題,再由學員循序漸進思考並操作解決問題的過程中,幫助學員掌握真正過硬的解決業務問題的數據挖掘能力。這種教學方式能夠引發學員的獨立思考及主觀能動性,學員掌握的技能知識可以快速轉化為自身能夠靈活應用的技能,在面對不同場景時能夠自由發揮。點擊預約免費試聽課。
『玖』 聚類演算法(上)06
這篇文章的整體排版主要是根據個人的博客來噠,如果感興趣的話可以去我的自己搭建的個人博客看這篇 文章 。
聚類演算法很多,所以和講回歸演算法一樣,分成了上下,上中主要講了傳統的K-Means演算法以及其相應的優化演算法入K-Means++,K-Means||和Canopy等。下中主要講了另外兩種的思路的聚類演算法,即層次聚類和密度聚類。
聚類算就是懟大量未知標注的數據集,按照數據 內部存在的數據特徵 將數據集 劃分為多個不同的類別 ,使類別內的數據比較相似,類別之間的數據相似度比較小,屬於 無監督學習 。
從定義就可以看出,聚類演算法的關鍵在於計算樣本之間的 相似度 ,也稱為 樣本間的距離 。
說到聚類演算法,那肯定核心就是計算距離的公式了,目前常用的有以下幾種。
閔可夫斯基距離(Minkowski) :公式2.1
KL距離(相對熵) :
思考下條件熵的定義,簡單的來說就是在放生一件事情的時候,發生另一件事的概率。公式如下公式2.7.
註:這里書的概率不是實指概率,而是熵表達的含義。這個公式其實就是條件熵的公式。
傑卡德相似系數(Jaccard) :
這個很好理解,它的核心就是使用兩個集合的交集和並集的比率來代表兩者的相似度,也就是說重合的越多越相似。公式如下,公式2.8.
Pearson相關系數 :
這個就是考研數學中的相關系數,表達就是兩者之間的想關系,所以直接拿來用就好了,公式如下公式2.9。
給定一個有M個對象的數據集,構建一個具有k個簇的模型,其中k<=M。滿足 以下條件:
基本思想:
對於給定的類別數目k,首先給定初始劃分,通過迭代改變樣本和簇的隸屬關系,使的每次處理後得到的劃分方式比上一次的好,即 總的數據集之間的距離和變小了
K-means的核心演算法如下:
再循環中的第二步,我們移動了中心點的位置,把中心點移到了隸屬於該中心點類別的所有樣本的中間,並使用樣本的均值作為位置。這樣子看似是拍腦袋想的移動策略,其實是可以推導出來的。正如聚類演算法思想所指出的,我們要讓所有的點到自己的分類的中心點的歐幾里得距離最小,所以我們設置目標放稱為公式4.1,公式中的1/2是為了之後求導運算方便。我們為了讓目標函數盡可能的小,所以使用了之前一直在使用的思考方式,對其使用梯度下降演算法,求導後得到公式4.2,之後令其等於0,就得到了公式4.3。
最後這個看似不錯的演算法,其實有著不小的缺點,那就是 初值敏感 。我們來仔細想一想,如果兩個不小心隨機生成的初值落到了一個類別中,兩者的距離還特別近,這中情況下就很難正確分類了。除此之外,由於移動策略中使用的是均值,也就是說如果集合中含有非常大的誤差點的話,這樣子會是中心點的設置偏離正確點很遠,所以很多時候我們改用 中值來更新中心點 ,這就是我們說的K-Mediods聚類,即K中值聚類。
總結下K-means演算法
優點:
由於K-Means對初始中心點非常敏感,我們這里就嘗試著通過二分法弱化初始中心點。這種演算法的具體步驟如下:
我們在這個演算法中提到了SSE,這個可以是簇內所有樣本點,到其中心點的距離的總和,代表著簇內的點是不是高度相關。計算公式如下公式4.4。
可以看出在這種演算法下,很好的避開了,兩個中心點都在一起的情況。
K-Means++做的改善,是直接對初始點的生成位置的選擇進行優化的,他的初始點生成策略如下:
Canopy屬於一種「粗略地」聚類演算法,簡單的來說就是,不那麼追求自動獲得最優解,而是引入了一種人為規定的先驗值進行聚類,具體步驟如下:
註:Canopy演算法得到的最終結果的值,聚簇之間是可能存在重疊的,但是不會存在 某個對象不屬於任何聚簇的情況
顯然,這種演算法雖然快,但是很難生成滿足我們應用的模型,所以通常我們將它作為解決K-Means初值敏感的方案,他們合在一起就是Canopy+K-Means演算法。
順序就是先使用Canopy演算法獲得K個聚類中心,然後用這K個聚類中心作為K-Means演算法。這樣子就很好的解決了K-Means初值敏感的問題。
Mini Batch K-Means演算法是K-Means演算法的一種優化變種,採用小規模的數據子集,來減少計算時間。其中採用小規模的數據子集指的是每次訓練使用的數據集是在訓練演算法的時候隨機抽取的數據子集。Mini Batch K-Means演算法可以減少K-Means演算法的收斂時間,而且產生的結果效果只是略差於標准K-Means演算法。
它的演算法步驟如下:
聚類演算法的衡量標准有很多,包括均一性、完整性、V-measure、調整蘭德系數(ARI ,Adjusted Rnd Index)、調整互信息(AMI,Adjusted Mutual Information)以及輪廓系數等等。
均一性:一個簇中只包含一個類別的樣本,則滿足均一性。其實也可以認為就是正確率,即每個聚簇中正確分類的樣本數占該聚簇總樣本數的比例和。其公式如下公式5.1。
完整性:同類別樣本被歸類到相同簇中,則滿足完整性。每個聚簇中正確分類的樣本數占該類型的總樣本數比例的和,通俗的來說就是,我們已分類類別中,分類正確的個數。
其公式如下,公式5.2:
在實際的情況中,均一性和完整性是往往不能兼得的,就好像抓特務時的矛盾一樣,到底是保證每個抓的人都是特務,還是寧可錯抓也不放過一個特務,之間的取捨很難把握。所以再一次貫徹,魚和熊掌不可兼得,我們就加權,於是得到的就是V-measure,其公式如下公式5.3:
蘭德系數(RI,Rand index) ,我用中文看了不少講蘭德系數的博客,其中的文字說明幾乎都是相同的,對個人的理解幫助不是特別大,於是用英文查的。最終理解了這個系數的參數的意思,想看英文說明的,個人覺得還挺好懂的參考 這里 。以下是我個人的講解。
首先,將原數據集中的元素進行兩兩配對形成一個新的數據集,我們稱之為S數據集。這時候,我們將原數據集,根據兩種不同的策略分別劃分成r份和s份,並對這兩個數據集命名為X和Y。在這里我們可以看出,X和Y的元素是相同的,只是他們的劃分方式不同。
接下來我們來思考,S數據集中,每個元素中的兩個樣本,在X和Y中只有兩種可能,就是兩個樣本都在一個子集中,或者不在一個子集中,那麼對於S中的一個元素,只有四種可能性。
接下來引入, 調整蘭德系數(ARI,Adjusted Rnd Index) ,ARI取值范圍 ,值越大,表示聚類結果和真實情況越吻合。從廣義的角度來將,ARI是衡量兩個數據分布的吻合程度的,公式5.5如下:
調整互信息,整體的流程很像ARI,AMI則是對MI進行調整。而MI是使用信息熵來描述的。那麼互信息表示了什麼呢,首先先看下 維基網路的定義 :
之前我們說到的衡量指標都是有標簽的,這里的輪廓系數則是不包含標簽的評價指標。
『拾』 K-Means聚類演算法
所謂聚類演算法是指將一堆沒有標簽的數據自動劃分成幾類的方法,屬於無監督學習方法,這個方法要保證同一類的數據有相似的特徵,如下圖所示:
根據樣本之間的距離或者說是相似性(親疏性),把越相似、差異越小的樣本聚成一類(簇),最後形成多個簇,使同一個簇內部的樣本相似度高,不同簇之間差異性高。
相關概念:
K值 :要得到的簇的個數
質心 :每個簇的均值向量,即向量各維取平均即可
距離量度 :常用歐幾里得距離和餘弦相似度(先標准化)
演算法流程:
1、首先確定一個k值,即我們希望將數據集經過聚類得到k個集合。
2、從數據集中隨機選擇k個數據點作為質心。
3、對數據集中每一個點,計算其與每一個質心的距離(如歐式距離),離哪個質心近,就劃分到那個質心所屬的集合。
4、把所有數據歸好集合後,一共有k個集合。然後重新計算每個集合的質心。
5、如果新計算出來的質心和原來的質心之間的距離小於某一個設置的閾值(表示重新計算的質心的位置變化不大,趨於穩定,或者說收斂),我們可以認為聚類已經達到期望的結果,演算法終止。
6、如果新質心和原質心距離變化很大,需要迭代3~5步驟。
K-Means採用的啟發式方式很簡單,用下面一組圖就可以形象的描述:
上圖a表達了初始的數據集,假設k=2。在圖b中,我們隨機選擇了兩個k類所對應的類別質心,即圖中的紅色質心和藍色質心,然後分別求樣本中所有點到這兩個質心的距離,並標記每個樣本的類別為和該樣本距離最小的質心的類別,如圖c所示,經過計算樣本和紅色質心和藍色質心的距離,我們得到了所有樣本點的第一輪迭代後的類別。此時我們對我們當前標記為紅色和藍色的點分別求其新的質心,如圖d所示,新的紅色質心和藍色質心的位置已經發生了變動。圖e和圖f重復了我們在圖c和圖d的過程,即將所有點的類別標記為距離最近的質心的類別並求新的質心。最終我們得到的兩個類別如圖f。
坐標系中有六個點:
1、我們分兩組,令K等於2,我們隨機選擇兩個點:P1和P2
2、通過勾股定理計算剩餘點分別到這兩個點的距離:
3、第一次分組後結果:
組A:P1
組B:P2、P3、P4、P5、P6
4、分別計算A組和B組的質心:
A組質心還是P1=(0,0)
B組新的質心坐標為:P哥=((1+3+8+9+10)/5,(2+1+8+10+7)/5)=(6.2,5.6)
5、再次計算每個點到質心的距離:
6、第二次分組結果:
組A:P1、P2、P3
組B:P4、P5、P6
7、再次計算質心:
P哥1=(1.33,1)
P哥2=(9,8.33)
8、再次計算每個點到質心的距離:
9、第三次分組結果:
組A:P1、P2、P3
組B:P4、P5、P6
可以發現,第三次分組結果和第二次分組結果一致,說明已經收斂,聚類結束。
優點:
1、原理比較簡單,實現也是很容易,收斂速度快。
2、當結果簇是密集的,而簇與簇之間區別明顯時, 它的效果較好。
3、主要需要調參的參數僅僅是簇數k。
缺點:
1、K值需要預先給定,很多情況下K值的估計是非常困難的。
2、K-Means演算法對初始選取的質心點是敏感的,不同的隨機種子點得到的聚類結果完全不同 ,對結果影響很大。
3、對噪音和異常點比較的敏感。用來檢測異常值。
4、採用迭代方法, 可能只能得到局部的最優解,而無法得到全局的最優解 。
1、K值怎麼定?
答:分幾類主要取決於個人的經驗與感覺,通常的做法是多嘗試幾個K值,看分成幾類的結果更好解釋,更符合分析目的等。或者可以把各種K值算出的 E 做比較,取最小的 E 的K值。
2、初始的K個質心怎麼選?
答:最常用的方法是隨機選,初始質心的選取對最終聚類結果有影響,因此演算法一定要多執行幾次,哪個結果更reasonable,就用哪個結果。 當然也有一些優化的方法,第一種是選擇彼此距離最遠的點,具體來說就是先選第一個點,然後選離第一個點最遠的當第二個點,然後選第三個點,第三個點到第一、第二兩點的距離之和最小,以此類推。第二種是先根據其他聚類演算法(如層次聚類)得到聚類結果,從結果中每個分類選一個點。
3、關於離群值?
答:離群值就是遠離整體的,非常異常、非常特殊的數據點,在聚類之前應該將這些「極大」「極小」之類的離群數據都去掉,否則會對於聚類的結果有影響。但是,離群值往往自身就很有分析的價值,可以把離群值單獨作為一類來分析。
4、單位要一致!
答:比如X的單位是米,Y也是米,那麼距離算出來的單位還是米,是有意義的。但是如果X是米,Y是噸,用距離公式計算就會出現「米的平方」加上「噸的平方」再開平方,最後算出的東西沒有數學意義,這就有問題了。
5、標准化
答:如果數據中X整體都比較小,比如都是1到10之間的數,Y很大,比如都是1000以上的數,那麼,在計算距離的時候Y起到的作用就比X大很多,X對於距離的影響幾乎可以忽略,這也有問題。因此,如果K-Means聚類中選擇歐幾里德距離計算距離,數據集又出現了上面所述的情況,就一定要進行數據的標准化(normalization),即將數據按比例縮放,使之落入一個小的特定區間。
參考文章: 聚類、K-Means、例子、細節