1. 程式人生 > >大資料聚類技術

大資料聚類技術

1.聚類的基本有關概念

聚類分析:將物理或抽象物件的集合分成相似的物件類的過程稱為聚類。

簇:資料物件的集合,物件與同一簇中的物件批次相似,而與其他簇中的物件相異。

無監督學習:沒有事先定義好的類

典型應用:①作為獲得資料集中資料分佈的工具②作為其他資料探勘演算法的預處理步驟

2.聚類方法的分類

①基於劃分的聚類(partitioning methods)

給定一個由n個物件組成的資料集合,對此資料集合構建k個劃分(k<=n),每個劃分代表一個簇,即將資料集合分成多個簇的演算法。每個簇至少有一個物件,每個物件必須僅且屬於一個簇。具體演算法包括:K-均值和K-中心點演算法等。

②基於層次的聚類(hierarchical clustering

):

對給定的資料集進行層層分解的聚類過程。

(1)凝聚法:將每個物件被認為是一個簇,然後不斷合併相似的簇,知道達到一個令人滿意的終止條件;

(2)分裂法:先把所有的資料歸於一個簇,然後不斷分裂彼此相似度最小的資料集,使簇被分裂成更小的簇,直到達到一個令人滿意的終止條件。

根據簇間距離度量方法的不同,可分為:最小距離、最大距離、平均值距離和平均距離等。

典型演算法:CURE,Chameleon和BIRCH等。

                                         

③基於密度的聚類(Density-Based Clustering):

只要某簇鄰近區域的密度超過設定的某一閾值,則擴大簇的範圍,繼續聚類。可以得到任意形狀的簇

典型演算法:DBSCAN、OPTICS和DENCLUE。

                      

④基於網格的聚類:

將問題空間化為有限數目的單元,形成一個空間網格結構,隨後聚類在這些網格之間進行。演算法速度較快。

典型演算法:STING、WaveCluster和CLIQUE等。


上述方法屬於傳統聚類方法,對於維度較低的資料集有效,而當維度較高,就可能不適合了。

二、評價標準

一各好的聚類演算法有兩個表現:

• high intra-class similarity  簇內高的相似度

• low inter-class similarity 簇間低的相似度

相似度的衡量標準是由距離函式d(i,j)表示,距離函式對於不同型別的問題一般不同。

其中二元變數:


具體應用:


而對於連續型變數,經常使用的是 Minkowski distance



聚類學習是一種無監督的學習方式,事先並不清楚資料的結構,所以任何演算法,聚類結果的合理性和有效性都有待評價。

①可伸縮性  即演算法中模式數發生變化的情況。有些演算法在模式數小的條件下,演算法的效能很好,但是模式數增大後,演算法效能下降。 如PAM演算法是一種k-中心點演算法,它對小的資料集合非常有效,但對大的資料集合則沒有良好的可伸縮性。

②高維性  即演算法中模式屬性個數發生變化的情況。有些演算法只擅長處理低維資料。在高維空間中聚類是一個挑戰,特別是數 據有可能非常稀疏和偏斜。

③可解釋性和可用性  就要求聚類結果可解釋、易理解。

④發現任意形狀的聚類 一個簇可能是任意形狀的,但一般的聚類演算法是基於歐氏距離和曼哈頓距離度量實現聚類,更 趨於發現球狀簇。在這方面,基於密度的聚類方法較好。

⑤處理噪聲資料的能力 噪聲資料可能是資料本身不完整,也可能是孤立點資料(Outlier)。

⑥用於決定輸入引數的領域知識最小化和輸入記錄順序敏感性 一方面要求降低演算法對輸入引數的敏感程度,另一方面要求輸入記錄順序對演算法的結果影響小。 如經典的k-均值演算法,需要預先給出簇的數目。

三、經典演算法

(1)K均值演算法

K均值(k-means)是一種無監督的聚類演算法,這個演算法需要事先知道簇的個數


具體步驟:

                                     

演算法分析:

優勢:執行和收斂過程相對較快,易理解。

侷限性:必須事先知道聚類數; 演算法要求簇是密集的、簇和簇之間的差異比較大;資料集的平均值的計算必須有適當的定義;不能用於非凸面的聚類;對於某些孤立資料和“噪聲” 點敏感等。

(2)層次方法

之前已經介紹層次方法的基本概念,其包括兩種形式凝聚法和分裂法。

        

層次凝聚的代表是AGNES(AGglomerative NESting)演算法。AGNES 演算法最初將每個物件作為一個簇,然後這些簇根據某些準則被一步步地合併。兩個簇間的相似度有多種不同的計算方法。聚類的合併過程反覆進行直到所有的物件最終滿足簇數目。

演算法步驟

AGNES(自底向上凝聚演算法)演算法的具體步驟如下所示: 
輸入:包含n個物件的資料庫。 
輸出:滿足終止條件的若干個簇。 
(1) 將每個物件當成一個初始簇; 
(2) REPEAT 
(3)     計算任意兩個簇的距離,並找到最近的兩個簇; 
(4)     合併兩個簇,生成新的簇的集合; 

(5) UNTIL 終止條件得到滿足。

距離計算

上述演算法的關鍵在於如何計算聚類簇之間的距離?實際上每個簇是一個樣本集合,因此只需要採用關於集合的某種距離即可。例如給定聚類簇CiCj,兩個簇的距離可以通過以下定義得到: 

   

                    

具體例項

使用AGNES演算法對下面的資料集進行聚類,以最小距離計算簇間的距離。剛開始共有5個簇:C1={A}C2={B}C3={C}C4={D}C5={E}

樣本點ABCDE
A00.422.53
B0.401.62.11.9
C21.600.60.8
D2.52.10.601
E31.90.810

Step1. 簇C1和簇C2的距離最近,將二者合併,得到新的簇結構:C1={A,B}C2={C}C3={D}C4={E}

樣本點ABCDE
AB01.62.11.9
C1.600.60.8
D2.10.601
E1.90.810

Step2. 接下來簇C2和簇C3的距離最近,將二者合併,得到新的簇結構:C1={A,B}C2={C,D}C3={E}

樣本點ABCDE
AB01.61.9
CD1.600.8
E1.90.80

Step3. 接下來簇C2和簇C3的距離最近,將二者合併,得到新的簇結構:C1={A,B}C2={C,D,E}

樣本點ABCDE
AB01.6
CDE1.60

Step4. 最後只剩下簇C1和簇C2,二者的最近距離為1.6,將二者合併,得到新的簇結構:C1={A,B,C,D,E}。 

這裡寫圖片描述

層次聚類方法的終止條件:

  • 設定一個最小距離閾值¯d,如果最相近的兩個簇的距離已經超過¯d,則它們不需再合併,聚類終止。
  • 限定簇的個數k,當得到的簇的個數已經達到k,則聚類終止。

效能分析

AGNES演算法比較簡單,但一旦一組物件被合併,下一步的處理將在新生成的簇上進行。已做處理不能撤消,聚類之間也不能交換物件。增加新的樣本對結果的影響較大。

假定在開始的時候有n個簇,在結束的時候有1個簇,因此在主迴圈中有n次迭代,在第i次迭代中,我們必須在ni+1個簇中找到最靠近的兩個進行合併。另外演算法必須計算所有物件兩兩之間的距離,因此這個演算法的複雜度為 O(n2),該演算法對於n很大的情況是不適用的。

(3)基於密度的聚類方法(Density-Based Clustering Methods)

DBSCAN演算法:(參考連結點選開啟連結

DBSCAN是基於一組鄰域來描述樣本集的緊密程度的,引數(ϵϵ, MinPts)用來描述鄰域的樣本分佈緊密程度。其中,ϵϵ描述了某一樣本的鄰域距離閾值,MinPts描述了某一樣本的距離為ϵϵ的鄰域中樣本個數的閾值。

假設我的樣本集是D=(x1,x2,...,xm),則DBSCAN具體的密度描述定義如下:

    1) ϵ-鄰域:對於xj∈D,其ϵ-鄰域包含樣本集D中與xj的距離不大於ϵ的子樣本集,即Nϵ(xj)={xi∈D|distance(xi,xj)≤ϵ}, 這個子樣本集的個數記為|Nϵ(xj)| 

    2) 核心物件:對於任一樣本xj∈D,如果其ϵ-鄰域對應的Nϵ(xj)至少包含MinPts個樣本,即如果|Nϵ(xj)|≥MinPts,則xj是核心物件。 

    3)密度直達:如果xi位於xj的ϵ-鄰域中,且xj是核心物件,則稱xi由xj密度直達。注意反之不一定成立,即此時不能說xj由xi密度直達, 除非且xi也是核心物件。

    4)密度可達:對於xi和xj,如果存在樣本樣本序列p1,p2,...,pT,滿足p1=xi,pT=xj, 且pt+1由pt密度直達,則稱xj由xi密度可達。也就是說,密度可達滿足傳遞性。此時序列中的傳遞樣本p1,p2,...,pT−1均為核心物件,因為只有核心物件才能使其他樣本密度直達。注意密度可達也不滿足對稱性,這個可以由密度直達的不對稱性得出。

    5)密度相連:對於xi和xj,如果存在核心物件樣本xk,使xi和xj均由xk密度可達,則稱xi和xj密度相連。注意密度相連關係是滿足對稱性的。

從下圖可以很容易看出理解上述定義,圖中MinPts=5,紅色的點都是核心物件,因為其ϵϵ-鄰域至少有5個樣本。黑色的樣本是非核心物件。所有核心物件密度直達的樣本在以紅色核心物件為中心的超球體內,如果不在超球體內,則不能密度直達。圖中用綠色箭頭連起來的核心物件組成了密度可達的樣本序列。在這些密度可達的樣本序列的ϵϵ-鄰域內所有的樣本相互都是密度相連的。

              

DBSCAN的聚類定義很簡單:由密度可達關係匯出的最大密度相連的樣本集合,即為我們最終聚類的一個類別,或者說一個簇。

這個DBSCAN的簇裡面可以有一個或者多個核心物件。如果只有一個核心物件,則簇裡其他的非核心物件樣本都在這個核心物件的ϵ-鄰域裡;如果有多個核心物件,則簇裡的任意一個核心物件的ϵ-鄰域中一定有一個其他的核心物件,否則這兩個核心物件無法密度可達。這些核心物件的ϵ-鄰域裡所有的樣本的集合組成的一個DBSCAN聚類簇。

那麼怎麼才能找到這樣的簇樣本集合呢?DBSCAN使用的方法很簡單,它任意選擇一個沒有類別的核心物件作為種子,然後找到所有這個核心物件能夠密度可達的樣本集合,即為一個聚類簇。接著繼續選擇另一個沒有類別的核心物件去尋找密度可達的樣本集合,這樣就得到另一個聚類簇。一直執行到所有核心物件都有類別為止。


我們還是有三個問題沒有考慮。

    第一個是一些異常樣本點或者說少量遊離於簇外的樣本點,這些點不在任何一個核心物件在周圍,在DBSCAN中