1. 程式人生 > >資料探勘聚類演算法

資料探勘聚類演算法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                 

參考論文:資料探勘中的聚類演算法研究 焦守榮 

 

           一般把學習演算法分成有監督和無監督學習兩種方式。主要區別是有沒有類資訊作為指導。聚類分析是典型的無監督學習演算法,一般用於自動分類。

         聚類分析是按照某個特定標準(通常是某種距離)把一個數據集分割成不同的類(Class),使得類內相似性儘可能的大,同時使得不同的類之間區別性也儘可能的大。直觀的說,最終形成的每個聚類,在空間上都是一個稠密的區域。

         聚類方法主要分為劃分聚類、層次聚類、基於密度的聚類、基於網格的聚類和基於模型的聚類

         聚類方法具有廣泛的應用。典型的如文件的聚類以及一些特定領域的成功應用。但是由於聚類是無導師的學習方法,其所研究的資料沒有類別標籤,我們很難判斷得到的聚類劃分是否反映了事物的本質。

        聚類分析也能用於分類Web文件來獲得資訊。作為資料探勘的功能,聚類分析可以作為一個獲得資料分佈情況、觀察每個類的特徵和對特定類進一步分析的獨立工具。通過聚類,能夠識別密集和稀疏的區域,發現全域性的分佈模式,以及資料屬性之間的相互關係等。

           一個能產生高質量聚類的演算法必須滿足下面兩個條件:

(1) 類內(intra-class)資料或物件的相似性最強;

(2) 類間(inter-class)資料或物件的相似性最弱。

聚類質量的高低通常取決於聚類演算法所使用的相似性測量的方法和實現方式,同時也取決於該演算法能否發現部分或全部隱藏的模式。

        聚類分析中的資料結構

      許多基於記憶體的聚類演算法選擇兩種有代表性的資料結構:資料矩陣和相異度矩陣。

        資料矩陣是一個物件-屬性結構。它是由n個物件組成,如:人;這些物件是利用p個屬性來進行描述的,如:年齡、高度、重量等。資料矩陣採用關係表形式或n×p矩陣來表示。

      相異度矩陣是一個物件-物件結構。它存放所有n個物件彼此之間所形成的差異。它一般採用n×n矩陣來表示。

 

      然而資料探勘的物件複雜多樣,要求聚類分析的方法不僅能夠對屬性為數值型別的資料進行,而且要適應資料型別的變化。一般而言,在資料探勘中,物件屬性經常出現的資料型別有:區間標度變數,二元變數,標稱型、序數型和比例標度型變數以及混合型別的變數

 

 

     目前存在著大量的聚類演算法,演算法的選擇取決於資料的型別、聚類的目的和應用。從總體上來看,聚類演算法可以分為序列演算法和並行演算法兩類[28]

 

一、序列聚類演算法

 

1.1 劃分方法(partitioning method)

劃分方法首先根據給定要構建劃分的數目k建立一個初始劃分,然後採用一種迭代的重定位技術,嘗試通過物件在劃分間移動來改進劃分。一個好的劃分的一般準則是:在同一類中的物件之間儘可能“接近”或相關,而不同類中的物件之間儘可能“遠離”或不同。為了達到全域性最優,基於劃分的聚類會要求窮舉所有可能的劃分。實際上,絕大多數應用採用了以下兩個比較流行的啟發式方法:(a)K-平均(K-MEANS)演算法,在該演算法中,每個簇用該簇中物件的平均值來表示。(b)K-中心點(K-MEDOIDS)演算法,在該演算法中,每個簇用接近聚類中心的一個物件來表示。

 K-means演算法

K-means演算法首先隨機選擇k個物件,每個物件代表一個聚類的質心。對於其餘的每一個物件,根據該物件與各聚類質心之間的距離,把它分配到與之最相似的聚類中。然後,計算每個聚類的新質心。重複上述過程,直到準則函式會聚。通常採用的準則函式是平方誤差準則函式。

K-means聚類演算法的具體步驟如下:

1) 從資料集中選擇k個質心C1,C2,… ,Ck作為初始的聚類中心;

2) 把每個物件分配到與之最相似的聚合。每個聚合用其中所有物件的均值來代表,“最相似”就是指距離最小。對於每個點Vi,找出一個質心Cj,使它們之間的距離d(Vj,Cj)最小,並把Vi分配到第j組;

3) 把所有的點都分配到相應的組之後,重新計算每個組的質心Cj

4) 迴圈執行第2)步和第3)步,直到資料的劃分不再發生變化。

該演算法具有很好的可伸縮性,其計算複雜度為O(nkt),其中,t是迴圈的次數。K-means聚類演算法的不足之處在於它要多次掃描資料庫,此外,它只能找出球形的類,而不能發現任意形狀的類。還有,初始質心的選擇對聚類結果有較大的影響,該演算法對噪聲很敏感。

2. K-medoids演算法

K-medoids演算法的過程和上述k-means的演算法過程相似,唯一不同之處是:k-medoids演算法用類中最靠近中心的一個物件來代表該聚類,而k-means演算法用質心來代表聚類。在k-means演算法中,對噪聲非常敏感,因為一個極大的值會對質心的計算帶來很大的影響。而k-medoid演算法中,通過用中心來代替質心,可以有效地消除該影響。

K-medoids演算法首先隨機選擇k個物件,每個物件代表一個聚類,把其餘的物件分別分配給最相似的聚類。然後,嘗試把每個中心分別用其他非中心來代替,檢查聚類的質量是否有所提高。若是,則保留該替換。重複上述過程,直到不再發生變化。

常見的k-medoids演算法有PAM(Partitioning Around Medoids)演算法、CLARA(Clustering LARge Application)演算法、CLARANS(Clustering LARge Application based upon Randomized Search)演算法。當存在“噪聲”和孤立點資料時,k-medoids演算法比可k-means更健壯,這是因為中心點不像平均值那麼容易被極端資料影響。但是,k-medoids演算法的執行代價比k-means高。

總之,劃分方法具有線性複雜度,聚類的效率高的優點。然而,由於它要求輸入數字k確定結果簇的個數,並且不適合於發現非凸面形狀的簇,或者大小差別很大的簇,所以這些啟發式聚類方法對在中小規模的資料庫中發現球狀簇很適用。為了對大規模的資料集進行聚類,以及處理複雜形狀的聚類,基於劃分的方法需要進一步的擴充套件。

 

 

1.2 層次方法(hierarchical method)

層次方法對給定資料物件集合進行層次的分解。根據層次的分解如何形成,層次的方法可以分為凝聚的和分裂的[30]。凝聚的方法,也稱為自底向上的方法,一開始將每個物件作為單獨的一個組,然後相繼地合併相近的物件或組,直到所有的組合併為一個(層次的最上層),或者達到一個終止條件。分裂的方法,也稱為自頂向下的方法,一開始將所有的物件置於一個簇中,在迭代的每一步中,一個簇被分裂為更小的簇,直到最終每個物件在單獨的一個簇中,或者達到一個終止條件。

主要的凝聚聚類演算法有CURE,CHAMELEON,BIRCH,ROCK等。

1.BIRCH演算法

BIRCH(Balanced Iterative Reducing and Clustering using Hierarchies)演算法使用了一種叫做CF-樹(聚類特徵樹,即Clustering Feature Tree)的分層資料結構,來對資料點進行動態、增量式聚類。CF-樹是儲存了層次聚類過程中的聚類特徵資訊的一個加權平衡樹,樹中每個節點代表一個子聚類,並保持有一個聚類特徵向量CF。每個聚類特徵向量是一個三元組,儲存了一個聚類的統計資訊。聚類特徵向量中包含了一個聚類的三個統計資訊:資料點的數目N,這N個數據點的線性和,以及這N個數據點的平方和SS。一個聚類特徵樹是用於儲存聚類特徵CF的平衡樹,它有兩個引數:每個節點的最大子節點數和每個子聚類的最大直徑。當新資料插入時,就動態地構建該樹。與空間索引相似,它也用於把新資料加入到正確的聚類當中。

BIRCH演算法的主要目標是使I/0時間儘可能小,原因在於大型資料集通常不能完全裝入記憶體中。BIRCH演算法通過把聚類分為兩個階段來達到此目的。首先通過構建CF-樹對原資料集進行預聚類,然後在前面預聚類的基礎上進行聚類。

2.CURE演算法

CURE(Clustering Using Representative)演算法選擇基於質心和基於代表物件方法之間的中間策略。它不用單個質心或物件來代表一個簇,而是選擇資料空間中固定數目的具有代表性的點。針對大型資料庫,CURE採用隨機取樣和劃分兩種方法的組合:一個隨機樣本首先被劃分,每個劃分再被部分聚類。

3.ROCK演算法

CURE演算法不能處理列舉型資料,而ROCK演算法是在CURE基礎之上適用於列舉資料的聚結分層聚類演算法。通過把兩個聚類的聚集相互連線度(aggregate interconnectivity)與使用者定義的靜態相互連線模型相比較,從而度量兩個聚類之間的相似度。其中,兩個聚類的相互連線度是指兩個聚類之間的交叉連線數目,而連線link(pi,pj)是指這兩點之間的共同鄰居數。換句話說,聚類相似度是用不同聚類中又共同鄰居的點的數目來確定的。

ROCK演算法首先用相似度閥值和共同鄰居的概念,從給定的資料相似度矩陣中構建一個稀疏圖,然後對該稀疏圖使用分層聚類演算法進行聚類。

4.Chameleon演算法

Chameleon(變色龍)是一個利用動態模型的層次聚類演算法。演算法思想是:首先通過一個圖劃分演算法將資料物件聚類為大量相對較小的子聚類,然後用一個凝聚的層次聚類演算法通過反覆地合併子類來找到真正的結果簇。它既考慮了互連性,又考慮了簇間的近似度,特別是簇內部的特徵,來確定最相似的子簇[31]

Chameleon跟CURE和DBSCAN相比,在發現高質量的任意形狀的聚類方面有更強的能力。但是,在最壞的情況下,高維資料的處理代價可能對n個物件需要O(n2)的時間。

總的來說,層次的方法的缺陷在於,一旦一個步驟(合併或分裂)完成,它就不能被撤消,該技術的一個主要問題是它不能更正錯誤的決定。有兩種方法可以改進層次聚類的結果:(a)在每層劃分中,仔細分析物件間的“聯接”,例如CURE中的做法。(b)綜合層次凝聚和迭代的重定位方法。首先用自底向上的層次演算法,然後用迭代的重定位來改進結果。

 

 

1.3 基於密度的方法(density-based method)

絕大多數劃分方法基於物件之間的距離進行聚類,這樣的方法只能發現球狀的簇,而在發現任意形狀的簇上遇到了困難。隨之提出了基於密度的另一類聚類方法,其主要思想是:只要鄰近區域的密度(物件或資料點的數目)超過某個閾值,就繼續聚類。也就是說,對給定類中的每個資料點,在一個給定範圍的區域中必須至少包含某個數目的點。這樣的方法可以用來過濾“噪聲”孤立點資料,發現任意形狀的簇。常見的基於密度的聚類演算法有DBSCAN,OPTICS,DENCLUE等。

1. DBSCAN演算法

DBSCAN(Density-Based Spatial Clustering of Application with Noise)是一個基於高密度連線區域的密度聚類方法。DBSCAN通過檢查資料庫中每個點的ε-鄰域來尋找聚類。如果一個點p的ε-鄰域包含多於MinPts個點,則建立一個以p作為核心物件的新簇。然後,DBSCAN反覆地尋找從這些核心物件直接密度可達的物件,這個過程可能涉及一些密度可達簇的合併。當沒有新的點可以被新增到任何簇時,該過程結束。

2. OPTICS演算法

OPTICS(Ordering Points To Identify the Clustering Structure)通過物件排序識別聚類結構。OPTICS沒有顯式地產生一個數據集合簇,它為自動和互動的聚類分析計算一個簇次序(cluster ordering)。這個次序代表了資料的基於密度的聚類結構。它包含的資訊,等同於從一個寬廣的引數設定範圍所獲得的基於密度的聚類。也就是說,對於一個恆定的引數MinPts值,可以同時處理一組距離引數值。

OPTICS在選擇引數方面具有比DBSCAN較高的靈活性,在採用空間索引時,複雜度為O(nlogn),和DBSCAN時間複雜度相同。但是,它需要額外的空間儲存每個物件的核心距離和一個適當的可達距離。

3. DENCLUE演算法

DENCLUE(DENsity based CLUstEring)是一個基於一組密度分佈函式的聚類演算法。它是對k-means聚類演算法的一個推廣:k-means演算法得到的是對資料集的一個區域性最優劃分,而DENCLUE得到的是全域性最優劃分。

DENCLUE演算法有一個堅實的數學基礎,概括了其他的聚類方法,包括基於劃分的、層次的、及基於位置的方法;同時,對於有大量“噪聲”的資料集合,它有良好的聚類特徵;對於高維資料集合的任意形狀的聚類,它給出了一個基於樹的儲存結構來管理這些單元,因此比一些有影響的演算法(如DBSCAN)速度要快。但是,這個方法要求對密度引數σ和噪聲閾值ξ進行仔細的選擇,如果選擇不當則可能顯著地影響聚類結果的質量。

 

 

1.4 基於網格的方法(grid-based method)

基於網格的方法把物件空間量化為有限數目的單元,形成了一個網格結構。所有的聚類操作都在這個網格結構(即量化的空間)上進行。基於網格的聚類演算法主要有STING, WaveCluster, CLIQUE等。

1.STING演算法

STING(Statistical Information Grid-based method)是一種基於網格的多解析度聚類技術,它將空間區域劃分為矩形單元。針對不同級別的解析度,通常存在多個級別的矩形單元,這些單元形成了一個層次結構:高層的每個單元被劃分為多個低一層的單元。關於每個網格單元屬性的統計資訊(例如平均值、最大值和最小值)被預先計算和儲存。這些統計資訊用於回答查詢。

STING有幾個優點:(i)由於儲存在每個單元中的統計資訊提供了單元中的資料不依賴於查詢的彙總資訊,所以基於網格的計算是獨立於查詢的;(ii)網格結構有利於並行處理和增量更新;(iii)該方法的主要優點是效率很高:STING掃描資料庫一次來計算單元的統計資訊,因此產生聚類的時間複雜度是O(n),其中n是物件的數目。在層次結構建立後,查詢處理時間是O(g),這裡g是最低層網格單元的數目,通常遠遠小於n。該演算法的缺點:由於STING採用了一個多解析度的方法進行聚類分析,STING聚類的質量取決於網格結構的最低層的粒度。如果粒度比較細,處理的代價會顯著增加;但是,如果網格結構最低層的力度太粗,將會降低聚類分析的質量;而且,STING在構建一個父親單元時沒有考慮孩子單元和其相鄰單元之間的關係,因此,結果簇的形狀是isothetic,即所有的聚類邊界或者是水平的,或者是豎直的,沒有對角的邊界。儘管該技術有快速的處理速度,但可能降低簇的質量和精確性。

2. WaveCluster演算法

WaveCluster(Clustering with Wavelets)採用小波變換聚類,它是一種多解析度的聚類演算法,它首先通過在資料空間上加一個多維網格結構來彙總資料,然後採用一種小波變換來變換原特徵空間,在變換後的空間中找到密集區域。

WaveCluster的計算複雜度是O(n),能有效地處理大資料集合;發現任意形狀的簇;成功地處理孤立點;對於輸入的順序不敏感;不要求指定諸如結果簇的數目或鄰域的半徑等輸入引數;在實驗分析中,WaveCluster在效率和聚類質量上優於BIRCH,CLARANS和DBSCAN;實驗分析也發現WaveCluster能夠處理多達20維的資料。但是,對數學建模的知識要求較高[33]

3. CLIQUE演算法

CLIQUE(Clustering In QUEst)演算法綜合了基於密度和基於網格的聚類方法,它的中心思想是:首先,給定一個多維資料點的集合,資料點在資料空間中通常不是均衡分佈的。CLIQUE區分空間中稀疏的和“擁擠的”區域(或單元),以發現數據集合的全域性分佈模式。接著,如果一個單元中的包含資料點超過了某個輸入模型引數,則該單元是密集的。在CLIQUE中,簇定義為相連的密集單元的最大集合。

CLIQUE演算法能自動發現最高維中所存在的密集聚類;它對輸入資料元組順序不敏感;也不需要假設(資料集中存在)任何特定的資料分佈;它與輸入資料大小呈線性關係;並當資料維數增加時具有較好的可擴充套件性。但是,在追求方法簡單化的同時往往就會降低聚類的準確性。

1.5 基於模型的方法(model-based method)

基於模型的方法為每個簇假定了一個模型,尋找資料對給定模型的最佳擬合。一個基於模型的演算法可能通過構建反映資料點空間分佈的密度函式來定位聚類。它也基於標準的統計數字自動決定聚類的數目,考慮“噪聲”資料或孤立點,從而產生健壯的聚類方法。基於模型聚類方法主要有兩種:統計學方法和神經網路方法。

1.統計學方法

機器學習中的概念聚類就是一種形式的聚類分析。給定一組無標記資料物件,它根據這些物件產生一個分類模式。與傳統聚類不同,後者主要識別相似的物件;而概念聚類則更進一步,它發現每組的特徵描述;其中每一組均代表一個概念或類,因此概念聚類過程主要有兩個步驟:首先完成聚類;然後進行特徵描述。因此它的聚類質量不再僅僅是一個物件的函式;而且還包涵了其它因素,如所獲特徵描述的普遍性和簡單性。

大多概念聚類都採用了統計方法,也就是利用概率引數來幫助確定概念或聚類。每個所獲得的聚類通常都是由概率描述來加以表示[34]

COBWEB是一種流行的簡單增量概念聚類演算法。它的輸入物件用分類屬性-值對來描述。它以一個分類樹的形式建立層次聚類。分類樹的每個節點對應一個概念,包含該概念的一個概率描述,概述被分在該節點下的物件。在分類樹某個層次上的兄弟節點形成了一個劃分。為了用分類樹對一個物件進行分類,採用了一個部分匹配函式沿著“最佳”匹配節點的路徑在樹中向下移動。尋找可以分類該物件的最好節點。這個判定基於將物件臨時置於每個節點,並計算結果劃分的分類效用。產生最高分類效用的位置應當是物件節點一個好的選擇。但如果物件不屬於樹中現有的任何概念,則為該物件建立一個新類。

CORWEB的優點在於:他不需要使用者輸入引數來確定分類的個數,它可以自動修正劃分中類的數目。缺點是:首先,它基於這樣一個假設:在每個屬性上的概率分佈是彼此獨立的。由於屬性間經常是相關的,這個假設並不總是成立。此外,聚類的概率分佈表示使得更新和儲存類相當昂貴。因為時間和空間複雜度不只依賴於屬性的數目,而且取決於每個屬性的值的數目,所以當屬性有大量的取值時情況尤其嚴重。而且,分類樹對於偏斜的輸入資料不是高度平衡的,它可能導致時間和空間複雜性的劇烈變化。

2.神經網路方法

神經網路聚類方法是將每個簇描述成一個標本。標本作為聚類的一個“原型”;它不一定對應一個特定的資料例項或物件。可以根據新物件與哪個標本最相似(基於某種距離計算方法)而將它分派到相應的聚類中。可以通過聚類的標本來預測分派到該聚類的一個物件的屬性。上一章對此已經作了詳細描述,這裡不再詳述。

 

 

二 、並行聚類演算法

對於並行演算法而言,由於資料量非常龐大,通常情況下,資料探勘演算法對記憶體和硬碟的需求非常大。特別是對記憶體的需求,經常會出現記憶體不能一次裝載所需的資料,需要備用儲存裝置的情況,此時如果處理不好就會嚴重降低演算法的效能。開發資料探勘並行方法有兩種途徑[35]:其一是對已有的序列演算法進行改進,挖掘其中的並行性質並加以利用,使得序列程式並行化;其二是對問題的本質重新審視,設計全新的並行演算法。第一種途徑相對容易一些,但是並行粒度較小,通訊量較大。第二種途徑需要全新設計,但如果成功,就會得到粗粒度並行演算法,適合於在分散式並行機上應用。其實,資料探勘演算法天生就具有豐富的並行效能。但是,對於給定的序列演算法,卻很難找到一個理想的並行化方案,硬體特徵和問題的性質對於並行化有重要影響。幾乎所有的資料探勘演算法以組合最優化過程為特徵,其模型建立以訓練集上的啟發式貪婪搜尋為基礎。

在資料探勘演算法中有兩種形式的並行性質:任務並行和資料並行。對於任務並行,計算模型被劃分到各個處理器中,並分別計算模型的一部分,然後再同其它處理器通過訊息通訊等方式進行協調,以得到一個全域性模型。其實,這裡的“任務並行”就是“序列程式並行化”。負載均衡可能是任務並行關注的主要問題[36]。對於資料並行,訓練集首先被劃分到各個處理器中(或者資料集本身就是分散式儲存的),然後各個處理器同時工作,建立各自的區域性模型。最後各個區域性模型被整合為一個全域性模型。其實,這裡的“資料並行”就是“分散式並行”。

 

 

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述