導航:首頁 > 源碼編譯 > 聚合層次聚類演算法復雜度

聚合層次聚類演算法復雜度

發布時間:2023-08-21 02:55:23

❶ 聚類演算法 - 凝聚層次聚類

層次聚類 就是通過對數據集按照某種方法進行層次分解,直到滿足某種條件為止。按照分類原理的不同,可以分為凝聚和分裂兩種方法。

層次聚類方法對給定的數據集進行層次的分解,直到某種條件滿足為止。具體又可分為 凝聚 分裂 的兩種方案:

凝聚的層次聚類是一種自底向上的策略,首先將每個對象作為一個簇,然後合並這些原子簇為越來越大的簇,直到所有的對象都在一個簇中,或者某個終結條件被滿足,絕大多數層次聚類方法屬於這一類,它們只是在簇間相似度的定義上有所不同。.

分裂的層次聚類與凝聚的層次聚類相反,採用自頂向下的策略,它首先將所有對象置於同一個簇中,然後逐漸細分為越來越小的簇,直到每個對象自成一簇,或者達到了某個終止條件。

本篇主要討論凝聚的層次聚類。

第一步 ,將訓練樣本集中的每個數據點都當做一個聚類
第二步 ,計算每兩個聚類之間的距離,將距離最近的或最相似的兩個聚類進行合並,如同下圖中的p1和p2、p5和p6
第三步 ,重復上述步驟,依舊計算每個聚類的距離,當然這次因為已經有聚合起來的簇了因此距離的計算方式有多種: 【單鏈】簇內的最近的點的距離、【全鏈】簇內的最遠的點的距離、【組平均】簇的平均距離、簇的相似度等
第四步 ,直到得到的當前聚類數是合並前聚類數的10%,即90%的聚類都被合並了;當然還可以設置其他終止條件,這樣設置是為了防止過度合並,此時需要幾個簇,那麼就可以用一條橫線去截取分出的簇,如下圖分出3類、4類、5類的橫線截止

ps:距離在通常的情況下可以計算歐幾里得距離,就是普通的直線距離,還可以計算餘弦相似度
具體的動畫效果可以參考視頻,這是----> 傳送門

1)距離和規則的相似度容易定義,限制少
2)不像kmeans,不需要預先制定聚類數
3)可以發現類的層次關系

1)計算復雜度太高
2)奇異值也能產生很大影響
3)由於根據距離來聚合數據,演算法很可能聚類成鏈狀

❷ 用於數據挖掘的聚類演算法有哪些,各有何優勢

聚類方法的分類,主要分為層次化聚類演算法,劃分式聚類演算法,基於密度的聚類演算法,基於網格的聚類演算法,基於模型的聚類演算法等。

而衡量聚類演算法優劣的標准主要是這幾個方面:處理大的數據集的能力;處理任意形狀,包括有間隙的嵌套的數據的能力;演算法處理的結果與數據輸入的順序是否相關,也就是說演算法是否獨立於數據輸入順序;處理數據雜訊的能力;是否需要預先知道聚類個數,是否需要用戶給出領域知識;演算法處理有很多屬性數據的能力,也就是對數據維數是否敏感。

.聚類演算法主要有兩種演算法,一種是自下而上法(bottom-up),一種是自上而下法(top-down)。這兩種路徑本質上各有優勢,主要看實際應用的時候要根據數據適用於哪一種,Hierarchical methods中比較新的演算法有BIRCH主要是在數據體量很大的時候使用;ROCK優勢在於異常數據抗干擾性強……

關於數據挖掘的相關學習,推薦CDA數據師的相關課程,課程以項目調動學員數據挖掘實用能力的場景式教學為主,在講師設計的業務場景下由講師不斷提出業務問題,再由學員循序漸進思考並操作解決問題的過程中,幫助學員掌握真正過硬的解決業務問題的數據挖掘能力。這種教學方式能夠引發學員的獨立思考及主觀能動性,學員掌握的技能知識可以快速轉化為自身能夠靈活應用的技能,在面對不同場景時能夠自由發揮。點擊預約免費試聽課。

❸ 常用聚類(K-means,DBSCAN)以及聚類的度量指標:

一年前需要用聚類演算法時,自己從一些sklearn文檔和博客粗略整理了一些相關的知識,記錄在電子筆記里備忘,現在發到網上,當時就整理的就很亂,以後有空慢慢把內容整理、完善,用作備忘。之前把電影標簽信息的聚類結果作為隱式反饋放進SVD++中去訓練,裡面有兩個小例子

利用條件熵定義的同質性度量:
sklearn.metrics.homogeneity_score:每一個聚出的類僅包含一個類別的程度度量。
sklearn.metrics.completeness:每一個類別被指向相同聚出的類的程度度量。
sklearn.metrics.v_measure_score:上面兩者的一種折衷:
v = 2 * (homogeneity * completeness) / (homogeneity + completeness)
可以作為聚類結果的一種度量。
sklearn.metrics.adjusted_rand_score:調整的蘭德系數。
ARI取值范圍為[-1,1],從廣義的角度來講,ARI衡量的是兩個數據分布的吻合程度
sklearn.metrics.adjusted_mutual_info_score:調整的互信息。
利用基於互信息的方法來衡量聚類效果需要實際類別信息,MI與NMI取值范圍為[0,1],AMI取值范圍為[-1,1]。

在scikit-learn中, Calinski-Harabasz Index對應的方法是metrics.calinski_harabaz_score.
CH指標通過計算類中各點與類中心的距離平方和來度量類內的緊密度,通過計算各類中心點與數據集中心點距離平方和來度量數據集的分離度,CH指標由分離度與緊密度的比值得到。從而,CH越大代表著類自身越緊密,類與類之間越分散,即更優的聚類結果。

silhouette_sample
對於一個樣本點(b - a)/max(a, b)
a平均類內距離,b樣本點到與其最近的非此類的距離。
silihouette_score返回的是所有樣本的該值,取值范圍為[-1,1]。

這些度量均是越大越好

K-means演算法應該算是最常見的聚類演算法,該演算法的目的是選擇出質心,使得各個聚類內部的inertia值最小化,計算方法如下:
inertia可以被認為是類內聚合度的一種度量方式,這種度量方式的主要缺點是:
(1)inertia假設數據內的聚類都是凸的並且各向同性( convex and isotropic),
各項同性是指在數據的屬性在不同方向上是相同的。數據並不是總能夠滿足這些前提假設的,
所以當數據事細長簇的聚類,或者不規則形狀的流形時,K-means演算法的效果不理想。

(2)inertia不是一種歸一化度量方式。一般來說,inertia值越小,說明聚類效果越好。
但是在高維空間中,歐式距離的值可能會呈現迅速增長的趨勢,所以在進行K-means之前首先進行降維操作,如PCA等,可以解決高維空間中inertia快速增長的問題,也有主意提高計算速度。

K-means演算法可以在足夠長的時間內收斂,但有可能收斂到一個局部最小值。
聚類的結果高度依賴質心的初始化,因此在計算過程中,採取的措施是進行不止一次的聚類,每次都初始化不同的質心。
sklearn中可以通過設置參數init='kmeans++'來採取k-means++初始化方案,
即初始化的質心相互之間距離很遠,這種方式相比於隨機初始質心,能夠取得更好的效果。
另外,sklearn中可以通過參數n_job,使得K-means採用並行計算的方式。

##sklearn 中K-means的主要參數:

1) n_clusters: 設定的k值

2)max_iter: 最大的迭代次數,一般如果是凸數據集的話可以不管這個值,如果數據集不是凸的,可能很難收斂,此時可以指定最大的迭代次數讓演算法可以及時退出循環。

3)n_init:用不同的初始化質心運行演算法的次數。由於K-Means是結果受初始值影響的局部最優的迭代演算法,因此需要多跑幾次以選擇一個較好的聚類效果,默認是10。如果你的k值較大,則可以適當增大這個值。

4)init: 即初始值選擇的方式,可以為完全隨機選擇'random',優化過的'k-means++'或者自己指定初始化的k個質心。一般建議使用默認的'k-means++'。

5)algorithm:有「auto」, 「full」 or 「elkan」三種選擇。"full"就是我們傳統的K-Means演算法, 「elkan」elkan K-Means演算法。默認的"auto"則會根據數據值是否是稀疏的,來決定如何選擇"full"和「elkan」。一般來說建議直接用默認的"auto"

聚類的中心
print clf.cluster_centers_

每個樣本所屬的簇
print clf.labels_

用來評估簇的個數是否合適,距離越小說明簇分的越好,選取臨界點的簇個數
print clf.inertia_
Sum of distances of samples to their closest cluster center.
兩個小例子(很久以前弄的,寫得比較簡略比較亂,有空再改,數據是movielen中的電影標簽信息):
例1:

例2,在區間[2,200]上遍歷k,並生成兩個聚類內部評價指標CH分、輪廓系數以及kmeans自帶inertia分和對應的k值的圖片來選擇k:

其中兩點相似度s(i, j)的度量默認採用負歐氏距離。
sklearn.cluster.AffinityPropagation
有參數preference(設定每一個點的偏好,將偏好於跟其他節點的相似性進行比較,選擇
高的作為exmplar,未設定則使用所有相似性的中位數)、damping (阻尼系數,
利用阻尼系數與1-阻尼系數對r 及 a進行有關迭代步數的凸組合,使得演算法收斂
default 0.5 可以取值與[0.5, 1])

cluster_centers_indices_:中心樣本的指標。
AP演算法的主要思想是通過數據點兩兩之間傳遞的信息進行聚類。
該演算法的主要優點是能夠自主計算聚類的數目,而不用人為制定類的數目。
其缺點是計算復雜度較大 ,計算時間長同時空間復雜度大,
因此該演算法適合對數據量不大的問題進行聚類分析。

數據點之間傳遞的信息包括兩個,吸引度(responsibility)r(i,k)和歸屬度(availability)a(i,k)。
吸引度r(i,k)度量的是質心k應當作為點i的質心的程度,
歸屬度a(i,k)度量的是點i應當選擇質心k作為其質心的程度。

其中t是迭代的次數,λ是阻尼因子,其值介於[0,1],在sklearn.cluster.AffinityPropagation中通過參數damping進行設置。
每次更新完矩陣後,就可以為每個數據點分配質心,分配方式?是針對數據點i,遍歷所有數據點k(包括其自身),
找到一個k使得r(i,k)+a(i,k)的值最大,則點k就是點i所屬的質心,迭代這個過程直至收斂。
所謂收斂就是所有點所屬的質心不再變化

首先說明不引入核函數時的情況。
演算法大致流程為:隨機選取一個點作為球心,以一定半徑畫一個高維球(數據可能是高維的),
在這個球范圍內的點都是這個球心的鄰居。這些鄰居相對於球心都存在一個偏移向量,
將這些向量相加求和再平均,就得到一個mean shift,起點在原球心,重點在球內的其他位置。
以mean shift的重點作為新的球心,重復上述過程直至收斂。

這個計算過程中,高維球內的點,無論其距離球心距離多遠,對於mean shift的計算權重是一樣的。
為了改善這種情況,在迭代計算mean shift的過程中引入了核函數
sklearn中相關實現是sklearn.cluster.MeanShift。

sklearn中實現的是自底向上的層次聚類,實現方法是sklearn.cluster.AgglomerativeClustering。
初始時,所有點各自單獨成為一類,然後採取某種度量方法將相近的類進行合並,並且度量方法有多種選擇。
合並的過程可以構成一個樹結構,其根節點就是所有數據的集合,葉子節點就是各條單一數據。
sklearn.cluster.AgglomerativeClustering中可以通過參數linkage選擇不同的度量方法,用來度量兩個類之間的距離,
可選參數有ward,complete,average三個。

ward:選擇這樣的兩個類進行合並,合並後的類的離差平方和最小。

complete:兩個類的聚類被定義為類內數據的最大距離,即分屬兩個類的距離最遠的兩個點的距離。
選擇兩個類進行合並時,從現有的類中找到兩個類使得這個值最小,就合並這兩個類。

average:兩個類內數據兩兩之間距離的平均值作為兩個類的距離。
同樣的,從現有的類中找到兩個類使得這個值最小,就合並這兩個類。

Agglomerative cluster有一個缺點,就是rich get richer現象,
這可能導致聚類結果得到的類的大小不均衡。
從這個角度考慮,complete策略效果最差,ward得到的類的大小最為均衡。
但是在ward策略下,affinity參數只能是「euclidean」,即歐式距離。
如果在歐氏距離不適用的環境中,average is a good alternative。

另外還應該注意參數affinity,這個參數設置的是計算兩個點之間距離時採用的策略,
注意和參數linkage區分,linkage設置的是衡量兩個類之間距離時採用的策略,
而點之間的距離衡量是類之間距離衡量的基礎。
affinity的可選數值包括 「euclidean」, 「l1」, 「l2」, 「manhattan」, 「cosine」,
『precomputed』. If linkage is 「ward」, only 「euclidean」 is accepted.

DBSCAN演算法的主要思想是,認為密度稠密的區域是一個聚類,各個聚類是被密度稀疏的區域劃分開來的。
也就是說,密度稀疏的區域構成了各個聚類之間的劃分界限。與K-means等演算法相比,該演算法的主要優點包括:可以自主計算聚類的數目,不需要認為指定;不要求類的形狀是凸的,可以是任意形狀的。

DBSCAN中包含的幾個關鍵概念包括core sample,non-core sample,min_sample,eps。
core samle是指,在該數據點周圍eps范圍內,至少包含min_sample個其他數據點,則該點是core sample,
這些數據點稱為core sample的鄰居。與之對應的,non-sample是該點周圍eps范圍內,所包含的數據點個數少於min_sample個。從定義可知,core sample是位於密度稠密區域的點。

一個聚類就是一個core sample的集合,這個集合的構建過程是一個遞歸的構成。
首先,找到任意個core sample,然後從它的鄰居中找到core sample,
接著遞歸的從這些鄰居中的core sample的鄰居中繼續找core sample。
要注意core sample的鄰居中不僅有其他core sample,也有一些non-core smaple,
也正是因為這個原因,聚類集合中也包含少量的non-core sample,它們是聚類中core sample的鄰居,
但自己不是core sample。這些non-core sample構成了邊界。

在確定了如何通過單一core sample找到了一個聚類後,下面描述DBSCAN演算法的整個流程。
首先,掃描數據集找到任意一個core sample,以此core sample為起點,按照上一段描述的方法進行擴充,確定一個聚類。然後,再次掃描數據集,找到任意一個不屬於以確定類別的core sample,重復擴充過程,再次確定一個聚類。
迭代這個過程,直至數據集中不再包含有core sample。
這也是為什麼DBSCAN不用認為指定聚類數目的原因。

DBSCAN演算法包含一定的非確定性。數據中的core sample總是會被分配到相同的聚類中的,哪怕在統一數據集上多次運行DBSCAN。其不確定性主要體現在non-core sample的分配上。
一個non-core sample可能同時是兩個core sample的鄰居,而這兩個core sample隸屬於不同的聚類。
DBSCAN中,這個non-core sample會被分配給首先生成的那個聚類,而哪個聚類先生成是隨機的。

sklearn中DBSCAN的實現中,鄰居的確定使用的ball tree和kd-tree思想,這就避免了計算距離矩陣。

❹ 數據挖掘干貨總結(四)--聚類演算法

本文共計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步:收集和描述數據

該任務使用名為GSE4051_data和GSE4051_design的數據集。該數據集以標准格式存儲在名為GSE4051_data.csv和GSE4051_design.csv的CSV格式的文件中。數據獲取路徑: 在這里

GSE4051_data數據集包含29949行數據和39個變數。數值型變數如下:

GSE4051_design數據集包含39行數據和4個變數。數值型變數是:sidNum
非數值型變數是:sidChar;devStage;gType;

具體實施步驟以下為實現細節。

第2步:探索數據

RColorBrewer包是一個R包,可從 http://colorbrewer2.org 獲取,它提供地圖和其他圖形的彩色模板。

pvclust包用來實現非確定性的層次聚類分析。在層次聚類中,每個簇通過多尺度有放回抽樣計算p值。一個簇的p值在0~1之間。p值有兩種類型:近似無偏(approximately unbiased,AU)和有放回概率(bootstrap probability,BP)值。AU p值通過多尺度有放回採樣方法計算,經典的有放回採樣方法用來計算BP p值。AU p值相比BP p值存在優效性偏見。

xtable包可以生成LaTeX格式的表格。使用xtable可以將特定的R對象轉換成xtables。這些xtables能夠以LaTeX或HTML的格式輸出。

plyr包被用來進行分置合並(split-apply-combine,SAC)過程。它將一個大的問題切分成易處理的小塊,在每個小塊上進行操作,然後將所有小塊合並起來。

載入以下包:

讓我們探索並理解變數間的關系。從導入名為GSE4051_data.csv的CSV文件開始。我們將該文件數據存儲到GSE4051_data數據框中:

接下來,輸出GSE4051_data數據框的信息。str()函數返回GSE4051_data的結構信息。它簡略顯示了GSE4051_data數據框的內部結構。max.level指明了為了顯示網狀結構的最大等級。

結果如下:

下面,我們導入名為GSE4051_design.csv的CSV文件,將其數據保存到GSE4051_design數據框中:

輸出GSE4051_design數據框的內部結構。

結果如下:

第3步:轉換數據

為了便於後續的可視化階段,需要對每一行數據進行拉伸操作。這是由於在目前的要求下,不同基因表達之間存在絕對值的差距,因此需要對每一行數據進行拉伸。

中心化變數和創建z值是兩個常見的數據分析方法。scale函數中心化並拉伸數值型矩陣的列。

變換矩陣。傳入GSE4051_data數據框用t()函數進行數據框變換。

接下來,我們輸出GSE4051_data數據框的信息。通過設置give.attr=FALSE,次級結構的屬性不會被顯示。

結果如下:

round()函數用於舍入到最接近的整數。語法形式只有1種:Y = round(X),這里的X可以是數,向量,矩陣,輸出對應。

head()函數返回一個向量、矩陣、表、數據框或函數的頭部。GSE4051_data和trans_GSE4051_data數據框被當作對象傳入。rowMeans()函數計算每列的平均值。data.frame()函數創建數據框耦合變數集合,並且共享許多指標的性質:

結果如下:

第4步:訓練模型

接下來是訓練模型。第一步是計算距離矩陣。dist()函數用來計算並返回距離矩陣,可以使用特定的距離度量方法來計算數據矩陣中各行間的距離。這里可使用的距離度量方法有歐式距離、最大距離、曼哈頓距離、堪培拉距離、二進制距離,或閔可夫斯基距離。這里使用歐式距離。歐式距離計算兩個向量間的距離公式為sqrt(sum((x_i-y_i)^2))。轉換後的trans_GSE4051_data數據框被用來計算距離。結果存儲在pair_dist_GSE4051_data數據框中。

接下來,使用interaction()函數計算並返回gType、devStage變數間相互作用的無序因子。無序因子的結果連同GSE4051_design數據框一同被傳入with()函數。該函數計算產生一個新的因子代表gType、devStage變數的相互作用:

summary()函數用來生成GSE4051_design$group數據框的結果總結:

結果如下:

下面,使用多種不同的聯合類型計算層次聚類。

使用hclust()函數對n個不同對象進行聚類分析。第一個階段,每個對象被指派給自己的簇。演算法在每個階段迭代聚合兩個最相似的簇。持續該過程直到只剩一個單獨的簇。hclust()函數要求我們以距離矩陣的形式提供數據。pair_dist_GSE4051_data數據框被傳入。

在第一個例子中使用single聚類方法:

結果如下:

在第二個例子中使用complete聚集方法。

調用pr.hc.complete的結果是顯示所使用的聚集方法、距離計算方法和對象數量:

結果如下:

在第三個例子中使用average聚類方法:

調用pr.hc.complete的結果是顯示所使用的聚集方法、距離計算方法和對象數量:
結果如下:

在第四個例子中使用ward聚類方法:

pr.hc.ward的調用結果是顯示所使用的聚集方法、距離計算方法和對象數量:
結果如下:

plot()函數是繪制R對象的通用函數。

第一次調用plot()函數,傳遞pr.hc.single數據框作為輸入對象:

結果如下:

第二次調用plot()函數,傳入pr.hc.complete數據框作為輸入對象:

結果如下:

第三次調用plot()函數,傳入pr.hc.average數據框作為輸入對象:

結果如下:

第四次調用plot()函數,傳入pr.hc.ward數據框作為輸入對象:

結果如下:

第5步:繪制模型

plot()函數是繪制R對象的通用函數。這里,plot()函數用來繪制系統樹圖。
rect.hclust()函數強調不同的簇,並在系統樹圖的枝幹上繪制長方形。系統樹圖首先在某個等級上被剪切,之後在選定的枝幹上繪制長方形。
RColorBrewer使用從 http://colorbrewer2.org 獲得的包來選擇繪制R圖像的顏色模板。
顏色分為三組:

最重要的一個RColorBrewer函數是brewer.pal()。通過向該函數傳入顏色的數量和配色的名字,可以從display.brewer.all()函數中選擇一個配色方案。
在第一個例子中,pr.hc.single作為一個對象傳入plot()函數:

結果如下:

下面創建熱度圖,使用single聚集方法。heatmap()函數默認使用euclidean聚集方法:

結果如下:

在第二例子中,pr.hc.complete作為對象傳入plot()函數:

結果如下:

下面使用complete聚集方法創建熱度圖:

結果如下:

在第三個例子中,pr.hc.average作為對象傳入plot()函數:

結果如下:

下面創建average聚集方法的熱度圖:

結果如下:

在第四個例子中,pr.hc.ward作為對象傳入plot()函數:

結果如下:

下面繪制ward聚集方法的熱度圖:

結果如下:

❻ 空間聚類演算法簡述

空間數據聚類演算法主要包括四大類:(1)給予劃分的聚類;(2)基於層次的聚類;(3)基於密度的聚類;(4)基於網格的聚類。時空數據聚類演算法是空間數據聚類演算法的驗身,它將時許維度納入聚類計算中。

1.1基於劃分的空間聚類演算法

k-means演算法 :用戶定義k個簇的質心位置——將每個數據點聚合到與之最近的質心所在的簇——重新為每個簇計算質心所在位置——重復步驟二和三直到質心收斂。其計算復雜度為 ,T為步驟四中迭代次數,他對於用戶給定的簇中心點的初始位置和雜訊點非常敏感。同時,在處理海量數據的時候運行時間較長。

1.2基於層次的空間聚類演算法

層次聚的目的是將數據對象分配到一個層次結構中,它遵循兩種劇本策略:向上凝聚和向下分裂。向上凝聚方法將每一個對象看做獨立的簇,然後從整個層次結構的底層開始對具有相似特徵的簇聚合,逐層遞歸至頂層。相反,向下分裂方法把所有的數據對象看做同一個簇,然後從整個層次結構的頂層開始,對具有不同特徵的簇進行分裂,逐層遞歸至底層。其計算的事件復雜度是

1.3基於密度的空間聚類演算法

基於茄豎密度的聚類演算法在發現任意形狀和數據造成方面具有獨特的優勢,且不要求對簇的數量進行初始設置。其演算法包括:DBSCAN演算法,OPTICS演算法,DENCLUE演算法,CURD演算法,Incremental DBSCAN演算法,SDBDC演算法,ST-DBSCAN演算法等。DBSCAN是第一個被提出的基於密度的聚類演算法。而密度主要通過兩個基本參數進行定義:空間半徑 和密度閾值MinPts.

DBSCAN基本概念:

演算法的主要缺點是它的運算時間復 ,因此對海量空間數據的聚類過程需要經過一個無法忍受的耗時。它的另一個缺陷是無法支持多密度聚類埋枝、增量聚類和並行計算。許多工作針對這些問題進行了研究他們可以被概括為兩大類工彎納敏作:⑴演算法改進;(2)演算法並行化。傳統的改進方法採用空間索引技術來快速鎖定數據對象。GirDBSCAN被稱為最先進的DBSCAN演算法它基於網格劃分策略極大的減低了演算法的時間復雜度,且沒有計算精度損失。得益於網格的超規則空間結構,任意兩個格子之間的最短空間距離可以很容易被獲取。對於任意點 ,其關於 的近鄰點只存在於一個固定的格子集合范圍內;換言之,那些格子集合范圍外的點一定不是其的近鄰點,因此這些點與點 之間的距離計算可以被省略,從而提高DBSCAN演算法的計算效率。基於這個想法,Gunawan將整個網格劃分為以 為邊長的正方形格子,用於2維空間數據的基於密度聚類計算,使得每個正方格子內的最大空間距離為因此一旦格子內的點的數量達到或超過MinPts,則該格子里的所有點都是核心點,且屬於同一個簇。因此一個簇可以通過密度相連格子和密度可達格子的最大集合進行計算,從而省略了許多點與點之間的距離計算。同時採用了Voronoi圖技術,進一步改進了DBSCAN演算法的運算效率。但是,構建一個Voronoi圖本身需要消耗大量的時間。基於這個想法,Gan和Tao提出了一種關於p近似DBSCAN演算法來獲得近似精度的計算結果,但只需要關於N的線性計算時間,用於取代傳統的DBSCAN演算法。

1.4基於網格的聚類

基於網格聚類演算法將數據空間劃分為規則的互不相交的格子,再將所有的數據對象映射帶網格中基於格子進行聚類。總結一下就是:將對象空間量化為有限數目的單元,形成一個網狀結構,所有聚類都在這個網狀結構上進行。

我們將學習一下STING演算法以及CLIQUE演算法。

閱讀全文

與聚合層次聚類演算法復雜度相關的資料

熱點內容
伺服器上如何查看伺服器的埠 瀏覽:676
單片機伺服器編譯 瀏覽:768
單口usb列印機伺服器是什麼 瀏覽:859
戰地五開伺服器要什麼條件 瀏覽:954
在word中壓縮圖片大小 瀏覽:253
javatomcat圖片 瀏覽:417
程序員生產智能創意 瀏覽:65
匯和銀行app怎麼登錄 瀏覽:383
騰訊伺服器如何上傳源碼 瀏覽:745
單片機的原理概述 瀏覽:512
火控pdf 瀏覽:267
如何復制雲伺服器centos環境 瀏覽:984
債權pdf 瀏覽:303
紅色番字的app怎麼下載 瀏覽:876
雲伺服器流程教課 瀏覽:704
中國農業銀行app怎麼沒有網 瀏覽:999
幾率表演算法 瀏覽:904
程序員理工科 瀏覽:708
企業郵箱登錄收件伺服器地址 瀏覽:560
計算機思維與演算法設計的重要性 瀏覽:664