大致可以分為划分法(Partitioning Methods)、 層次法(Hierarchical Methods)、基於密度的方法(density-based methods)、 基於網格的方法(grid-based methods)、基於模型的方法(Model-Based Methods)。
一、Partition-based methods
原理:想象你有一堆散點需要聚類,想要的聚類效果就是“類內的點都足夠近,類間的點都足夠遠”。首先你要確定這堆散點最后聚成幾類,最后挑選幾個點作為初始中心點,再然后依據預先定好的啟發式算法給數據點做迭代重置,直到最后到達“類內的點都足夠近,類間的點都足夠遠”的目標效果。如:k-means、k-medoids、k-modes、k-medians、kernel k-means。
k-means對初始值的設置很敏感,所以有了k-means+ +、intelligent k- means、genetic k- means; k-means對噪聲和離群值非常敏感,所以有了k-medoids和k- medians; k means只用於numerical類型數據,不適用於categorical類型數據,所以k-modes; k-means 不能解決非凸(non-convex) 數據,所以有了kernel k-means。另外,很多教程都告訴我們Partition- based methods聚類多適用於中等體量的數據集,但我們也不知道”中等”到底有多”中”,所以不妨理解成,數據集越大,越有可能陷入局部最小。下圖 顯示的就是面對非凸,k- means和kernel k means的不同效果。
1、K-means
(1)k-means的EM解釋
期望步(E-步):給定當前的簇中心,每個對象都被指派到簇中心離該對象最近的簇。這里,期望每個對象都屬於最近的簇。
最大化步(M-步):給定簇指派,對於每個簇,算法調整其中心,使得指派到該簇的對象到該新中心到的距離之和最小化。也就是說,將指派到一個簇的對象的相似度最大化。
(2)k-means算法的優缺點
優點:
- k-means算法是解決聚類問題的一種經典算法,算法簡單、快速。
- 對處理大數據集,該算法是相對可伸縮的和高效率的,因為它的復雜度大約是O(nkt),其中n是所有對象的數目,k是簇的數目,t是迭代的次數。通常k遠小於n。這個算法通常局部收斂。
- 算法嘗試找出使平方誤差函數值最小的k個划分。當簇是密集的、球狀或團狀的,且簇與簇之間區別明顯時,聚類效果較好。
缺點:
- k-平均方法只有在簇的平均值被定義的情況下才能使用,且對有些分類屬性的數據不適合。
- 要求用戶必須事先給出要生成的簇的數目k。
- 對初值敏感,對於不同的初始值,可能會導致不同的聚類結果。
- 不適合於發現非凸面形狀的簇,或者大小差別很大的簇。
- 對於”噪聲”和孤立點數據敏感,少量的該類數據能夠對平均值產生極大影響。
(3)K-means與K-means++
原始K-means算法最開始隨機選取數據集中K個點作為聚類中心,而K-means++按照如下的思想選取K個聚類中心:假設已經選取了n個初始聚類中心(0<n<K),則在選取第n+1個聚類中心時:距離當前n個聚類中心越遠的點會有更高的概率被選為第n+1個聚類中心。
(4)K-means與ISODATA
ISODATA的全稱是迭代自組織數據分析法。在K-means中,K的值需要預先人為地確定,並且在整個算法過程中無法更改。而當遇到高維度、海量的數據集時,人們往往很難准確地估計出K的大小。ISODATA就是針對這個問題進行了改進,它的思想也很直觀:當屬於某個類別的樣本數過少時把這個類別去除,當屬於某個類別的樣本數過多、分散程度較大時把這個類別分為兩個子類別。
IDODATA參數:預期的聚類中心數目Ko:最終輸出的聚類中心數目范圍是 [Ko/2, 2Ko]; 每個類所要求的最少樣本數目Nmin;最大方差Sigma:用於衡量某個類別中樣本的分散程度。當樣本的分散程度超過這個值時,則有可能進行分裂操作; 兩個類別對應聚類中心之間所允許最小距離dmin:兩個類別對應聚類中心之間的距離非常小,則需要對這兩個類別進行合並操作。
(5)K-means與Kernel K-means
傳統K-means采用歐式距離進行樣本間的相似度度量,顯然並不是所有的數據集都適用於這種度量方式。參照支持向量機中核函數的思想,將所有樣本映射到另外一個特征空間中再進行聚類,就有可能改善聚類效果。
二、Density-based methods
1、DBSCAN
Density- based methods: 上面這張圖你也看到了,k- means解決不了這種不規則形狀的聚類。於是就有了Density- based methods來系統解決這個問題。該方法同時也對噪聲數據的處理比較好。其原理簡單說畫圈兒,其中要定義兩個參數,一個是圈兒的最大半徑,一個是一個圈兒里最少應容納幾個點。最后在一個圈里的,就是一個類。DBSCAN (Density- BasedSpatial Clustering of Applications with Noise)就是其中的典型,可惜參數設置也是個問題,對這兩個參數的設置非常敏感。DBSCAN的擴 展叫OPTICS (Ordering Points To IdentifyClustering Structure)通過優先對高密度(high density)進行搜索,然后根據高密度的特點設置參數,改善了DBSCAN的不足。下圖就是表現了DBSCAN對參數設置的敏感。
(1)算法
(2)DBSCAN優缺點:
優點:
- 可以對任意形狀的稠密數據集進行聚類,相對的,K-Means之類的聚類算法一般只適用於凸數據集。
- 可以在聚類的同時發現異常點,對數據集中的異常點不敏感。
- 聚類結果沒有偏倚,相對的,K-Means之類的聚類算法初始值對聚類結果有很大影響。
缺點:
- 如果樣本集的密度不均勻、聚類間距差相差很大時,聚類質量較差,這時用DBSCAN聚類一般不適合。
- 如果樣本集較大時,聚類收斂時間較長,此時可以對搜索最近鄰時建立的KD樹或者球樹進行規模限制來改進。
- 調參相對於傳統的K-Means之類的聚類算法稍復雜,主要需要對距離閾值ϵ,鄰域樣本數閾值MinPts聯合調參,不同的參數組合對最后的聚類效果有較大影響。
三、Grid-based methods
這類方法的原理就是將數據空間划分為網格單元,將數據對象集映射到網格單元中,並計算每個單元的密度。根據預設的閾值判斷每個網格單元是否為高密度單元,由鄰近的稠密單元組形成”類“。該類方法的優點就是執行效率高,因為其速度與數據對象的個數無關,而只依賴於數據空間中每個維上單元的個數。但缺點也是不少,比如對參數敏感、無法處理不規則分布的數據、維數災難等。STING(STatistical INformation Grid)和CLIQUE(CLustering In QUEst)是該類方法中的代表性算法。下圖是CLIQUE的一個例子:
四、Model-based methods
這一類方法主要是指基於概率模型的方法和基於神經網絡模型的方法,尤其以基於概率模型的方法居多。這里的概率模型主要指概率生成模型(generative Model),同一”類“的數據屬於同一種概率分布。這種方法的優點就是對”類“的划分不那么”堅硬“,而是以概率形式表現,每一類的特征也可以用參數來表達;但缺點就是執行效率不高,特別是分布數量很多並且數據量很少的時候。其中最典型、也最常用的方法就是高斯混合模型(GMM,Gaussian Mixture Models)。基於神經網絡模型的方法主要就是指SOM(Self Organized Maps)了,也是我所知的唯一一個非監督學習的神經網絡了。下圖表現的就是GMM的一個demo,里面用到EM算法來做最大似然估計。
五、數據簡化(data reduction)
這個環節optional。其實第二部分提到的有些算法就是對數據做了簡化,才得以具備處理大規模數據的能力,比如BIRCH。但其實你可以任意組合,所以理論上把數據簡化的方法和上面提到的十幾種聚類算法結合使用,可以有上百個算法了。
- 變換(Data Transformation):離散傅里葉變換(Discrete Fourier Transformation)可以提取數據的頻域(frequency domain)信息,離散小波變換(Discrete Wavelet Transformation)除了頻域之外,還可以提取到時域(temporal domain)信息。
- 降維(Dimensionality Reduction):在降維的方法中,PCA(Principle Component Analysis)和SVD(Singular Value Decomposition)作為線性方法,受到最廣泛的應用。還有像MDS(Multi-Dimensional Scaling)什么的,不過只是作為PCA的一個擴展,給我的感覺是中看不中用。這幾個方法局限肯定是無法處理非線性特征明顯的數據。處理非線性降維的算法主要是流形學習(Manifold Learning),這又是一大塊內容,里面集中常見的算法包括ISOMAP、LLE(Locally Linear Embedding)、MVU(Maximum variance unfolding)、Laplacian eigenmaps、Hessian eigenmaps、Kernel PCA、Probabilistic PCA等等。流形學習還是挺有趣的,而且一直在發展。關於降維在聚類中的應用,最著名的應該就是在評論里提到的譜聚類(Spectral Clustering),就是先用Laplacian eigenmaps對數據降維(簡單地說,就是先將數據轉換成鄰接矩陣或相似性矩陣,再轉換成Laplacian矩陣,再對Laplacian矩陣進行特征分解,把最小的K個特征向量排列在一起),然后再使用k-means完成聚類。譜聚類是個很好的方法,效果通常比k-means好,計算復雜度還低,這都要歸功於降維的作用。
- 抽樣(Sampling):最常用的就是隨機抽樣(Random Sampling),如果你的數據集特別大,隨機抽樣就越能顯示出它的低復雜性所帶來的好處。比如CLARA(Clustering LARge Applications)就是因為k-medoids應對不了大規模的數據集,所以采用sampling的方法。
參考文獻: