1. 程式人生 > >機器學習---1.聚類演算法綱領總結

機器學習---1.聚類演算法綱領總結

     近期定了研究生畢設的課題,有種一錘定兩年的趕腳。心裡還是有點方,只好天天催眠自己現在的選擇就是最好的選擇。

     其中一塊應該會用到聚類演算法,這就需要我對各種種類的適用條件、引數摸清楚了,到時候再選出效果最好的聚類方式。想想演算法十來種,引數無窮種調法,這個組合起來工作量也是真的大,微笑活下去...微笑著學習...參考了一些部落格,總結如下:

     一、聚類步驟

          1.資料準備:包括標準化、降維(主成分分析PCA等)、取樣(隨機取樣等)、變換(離散傅立葉變換、離散小波變換等)等操作,如果需要用到再對應去查具體的。

          2.特徵選擇與提取:選擇最有效的特徵,也可以將選擇的特徵轉換為新的突出特徵(暫沒研究轉換的辦法)

         3.執行聚類演算法:選擇合適的相似性度量方法(歐式距離、夾角餘弦、相關係數、核函式、DTW(dynamic time warping)等)、合適的演算法、合適的引數(下一節會講)跑起來

          4.聚類結果評估:三種方式,外部有效性評估、內部有效性評估和相關性測試評估。

             外部指標:Jaccard係數、FM指數、Rand指數(見周志華教授西瓜書)

             內部指標:DB指數、Dunn指數(見周志華教授西瓜書)

             聚類內平方和(Within-Cluster Sum-of-Squares)測量每個聚類內的方差。聚類越好,整體 WCSS 就越低(見部落格)

    二、聚類演算法

          1.基於劃分的聚類方法

             1)思想:類內的點都足夠近,類間的點都足夠遠

             2)演算法:最基本的就是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易陷入區域性最優,所以有了二分 k-means
                             k-means不能解決非凸(non-convex)資料,所以有了kernel k-means。

            3)特點:計算量大,適合發現中小規模的資料庫中小規模的資料庫中的球狀簇(不知道“中等”到底有多“中”,所以不妨理解成,資料集越大,越有可能陷入區域性最小);需要自己設定分組數(吳恩達視訊裡說到過這是個模糊的數目,憑經驗和肘部原理設);以及上面的k-means的四個問題(不知道改進後效果如何)

           4)sklearn參考:http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans

        http://scikit-learn.org/stable/modules/generated/sklearn.cluster.MiniBatchKMeans.html#sklearn.cluster.MiniBatchKMeans

          2.基於層次的聚類方法

             1)思想:自上而下就是從一個類分裂為多個類,自下而上就是每個樣本一個類,不斷合併為多個類

             2)演算法:AGNES自底向上,因為計算複雜度比較大適用於小數量級

                            改進的演算法有:BIRCH主要是在資料體量很大的時候使用,而且資料型別是numerical;Chameleon裡用到的linkage是kNN(k-nearest-neighbor)演算法,並以此構建一個graph,Chameleon的聚類效果被認為非常強大,比BIRCH好用,但運算複雜還是很高,O(n^2);還有部落格中提到CURE演算法。

             3)特點:K-means不能解決的非球形族就可以解決了

                              時間複雜度高啊,o(m^3),改進後的演算法也有o(m^2lgm),m為點的個數

            4)birch:http://scikit-learn.org/stable/modules/generated/sklearn.cluster.Birch.html#sklearn.cluster.Birch

             

         3.基於密度的聚類方法

             1)原理:只要一個區域中的點的密度大過某個閾值,就把它加到與之相近的聚類中去。其中要定義兩個引數,一個是圈兒的最大半徑,一個是一個圈兒裡最少應容納幾個點。

             2)演算法:最基本的就是DBSCAN,對引數設定超級敏感;還有均值漂移(Mean-shift,通過將中心點的候選點更新為滑動視窗內點的均值來完成,來定位每個組/類的中心點。不需要我們知道有多少類/組)

                            針對DBSCAN引數敏感問題,有了OPTICS(Ordering Points To Identify Clustering Structure),通過優先對高密度(high density)進行搜尋,然後根據高密度的特點設定引數;還有部落格提到DENCLUE演算法

             3)特點:能克服基於距離的演算法只能發現“類圓形”的聚類的缺點,可以處理不規則形狀;對噪聲處理也比較好

        4.基於網格的聚類方法

             1)原理:將資料空間劃分為網格單元,將資料物件集對映到網格單元中,並計算每個單元的密度。根據預設的閾值判斷每個網格單元是否為高密度單元,由鄰近的稠密單元組形成”類“。

             2)演算法:代表性演算法有STING(STatistical INformation Grid)、CLIQUE(CLustering In QUEst)、WAVE-CLUSTER

             3)特點:優點就是執行效率高,因為其速度與資料物件的個數無關,而只依賴於資料空間中每個維上單元的個數。

                              缺點也是不少,比如對引數敏感、無法處理不規則分佈的資料、維數災難等。這種演算法效率的提高是以聚類結果的精確性為代價的。經常與基於密度的演算法結合使用。

         5.基於模型的聚類方法

            1)原理:為每簇假定了一個模型,尋找資料對給定模型的最佳擬合,這一類方法主要是指基於概率模型的方法和基於神經網路模型的方法,尤其以基於概率模型的方法居多。

            2)演算法:其中最典型、也最常用的方法就是高斯混合模型(GMM,Gaussian Mixture Models);基於神經網路模型的方法主要就是指SOM(Self Organized Maps)了

            3)特點:優點:對”類“的劃分不那麼”堅硬“,而是以概率形式表現,每一類的特徵也可以用引數來表達。 
                            缺點:執行效率不高,特別是分佈數量很多並且資料量很少的時候。

       6.其他方法

            1)基於約束的方法

        真實世界中的聚類問題往往是具備多種約束條件的 , 然而由於在處理過程中不能準確表達相應的約束條件、不能很好地利用約束知識進行推理以及不能有效利用動態的約束條件 , 使得這一方法無法得到廣泛的推廣和應用。這裡的約束可以是對個體物件的約束 , 也可以是對聚類引數的約束 , 它們均來自相關領域的經驗知識。該方法的一個重要應用在於對存在障礙資料的二維空間資料進行聚類。 COD (Clustering with Ob2structed Distance) 就是處理這類問題的典型演算法 , 其主要思想是用兩點之間的障礙距離取代了一般的歐氏距離來計算其間的最小距離。

          2)量子聚類

        受物理學中量子機理和特性啟發,可以用量子理論解決聚類記過依賴於初值和需要指定類別數的問題。一個很好的例子就是基於相關點的 Pott 自旋和統計機理提出的量子聚類模型。它把聚類問題看做一個物理系統。並且許多算例表明,對於傳統聚類演算法無能為力的幾種聚類問題,該演算法都得到了比較滿意的結果。

           3)核聚類

         核聚類方法增加了對樣本特徵的優化過程,利用 Mercer 核 把輸入空間的樣本對映到高維特徵空間,並在特徵空間中進行聚類。核聚類方法是普適的,並在效能上優於經典的聚類演算法,它通過非線性對映能夠較好地分辨、提 取並放大有用的特徵,從而實現更為準確的聚類;同時,演算法的收斂速度也較快。在經典聚類演算法失效的情況下,核聚類演算法仍能夠得到正確的聚類。代表演算法有SVDD演算法,SVC演算法。

          4)譜聚類

         首先根據給定的樣本資料集定義一個描述成對資料點相似度的親合矩陣,並計算矩陣的特徵值和特徵向量,然後選擇合適的特徵向量聚類不同的資料點。譜聚類演算法最初用於計算機視覺、VLSI設計等領域,最近才開始用於機器學習中,並迅速成為國際上機器學習領域的研究熱點。譜聚類演算法建立在圖論中的譜圖理論基礎上,其本質是將聚類問題轉化為圖的最優劃分問題,是一種點對聚類演算法。

         5)模糊聚類

           基於模糊集理論的聚類方法,樣本以一定的概率屬於某個類。比較典型的有基於目標函式的模糊聚類方法、基於相似性關係和模糊關係的方法、基於模糊等價關係的傳遞閉包方法、基於模 糊圖論的最小支撐樹方法,以及基於資料集的凸分解、動態規劃和難以辨別關係等方法。FCM演算法是一種以隸屬度來確定每個資料點屬於某個聚類程度的演算法。該聚類演算法是傳統硬聚類演算法的一種改進。

      6)AP演算法

       AP(Affinity Propagation)通常被翻譯為近鄰傳播演算法或者親和力傳播演算法,是在2007年的Science雜誌上提出的一種新的聚類演算法。AP演算法的基本思想是將全部資料點都當作潛在的聚類中心(稱之為exemplar),然後資料點兩兩之間連線構成一個網路(相似度矩陣),再通過網路中各條邊的訊息(responsibility和availability)傳遞計算出各樣本的聚類中心。見部落格http://www.cnblogs.com/lc1217/p/6908031.html

三、各種聚類演算法的Python實現

           參考此篇部落格http://www.cnblogs.com/lc1217/p/6963687.html