做者:錢烽算法
基於定義2所提出的類似度定義,咱們在圖2中給出最小化局部邊際的合併聚類算法詳細執行過程.首先,針對數據集中可能存在的噪聲數據,咱們對全部樣本點進行孤立點檢測.而後,做爲ACMOM算法的主要過程,咱們採用基於MkNN關係的類似度對檢測結果爲非孤立的樣本點進行合併聚類.接着,爲了構建完整的系統樹圖,咱們將其他孤立樣本點賦予距離它最近的類簇.最後,對於不存在任何MkNN鏈接的少數剩餘類簇集合,咱們使用ALINK算法進行合併操做並輸出系統樹圖形式的聚類結果.函數
該算法的具體執行步驟以下:測試
(1) 初始化基本類簇(第1~6行): 算法首先初始化類簇集合GS和孤立點集合OS爲空集,而後遍歷數據集中的樣本點.爲了不噪聲數據的影響,ACMOM算法對於每個樣本點都使用了LOF技術[28]來檢測其是否爲孤立點.其中,因爲LOF檢測也涉及樣本點的最近k鄰居計算,咱們使用了相同的最近鄰參數k值.對於檢測結果爲孤立點的樣本點,我暫時將其加入孤立點集合OS中.而對於其他樣本點,咱們初始化每一個樣本點自成一類,並將它們加入到類簇集合GS中,使之成爲系統樹圖的葉子節點.雲計算
(2) 合併最類似類簇對(第7~11行): 接着,算法開始執行合併操做.在每次合併操做開始時,ACMOM算法首先根據定義2更新全部可能的類簇間類似度,並從中找出最大值.對於知足類似度最大值的類簇對和,咱們將其合併爲一個新的類簇,並在系統樹圖中將其賦爲和的父親節點.最後,咱們在類簇集合中用新類簇替換原來的子類簇和.ACMOM算法將不斷重複上述合併操做直至任意類簇間類似度都爲0或全部樣本點都合併至同一類簇爲止。spa
(3) 合併孤立樣本點(第12~15行): 對於剩餘的每一個孤立樣本點,ACMOM算法首先找到距離其最近的非孤立點鄰居,而後將其合併至該鄰居所在的類簇中.操作系統
(4) 返回合併聚類結果(第1六、17行): 上述算法流程執行完畢後,若是全部的樣本點都已合併至類簇集合GS中的惟一類簇,咱們直接將其做爲系統樹圖的根節點返回給用戶.不然,咱們使用ALINK算法對集合GS中的剩餘類簇作進一步合併操做並返回最終的系統樹圖結果.爲了保證一致性,咱們使用類簇間的樣本間距均值來記錄所返回系統樹圖中的節點高度。.net
本節中,咱們將更加具體地描述ACMOM算法的實現細節,從而詳細分析其時間複雜度和空間複雜度.4時間複雜度分析3d
準備工做: 爲了計算類簇間類似度以及使用LOF技術對樣本點進行孤立點檢測,咱們須要事先爲每一個樣本點計算其最近k鄰居集合.ACMOM算法經過構建k-d樹結構來實現這一操做.根據文獻[29,30]的描述,構建k-d樹的時間複雜度爲O(nlogn),而爲任意樣本點查找k個最近鄰居須要O(dn1-1/d+k)時間.其中,n表示數據集中樣本點的個數,表示樣本點的維度.所以,爲數據集中的n個樣本點構建k最近鄰列表的整體時間複雜度爲O(dn2-1/d+kn).orm
算法步驟(1): 根據文獻[28]的描述,在已知k最近鄰列表的前提下對n個樣本點進行LOF檢測的時間複雜度爲O(n).而將數據集中的全部樣本點加入基本類簇集合GS或孤立點集合OS的時間複雜度也是O(n).所以,算法步驟(1)的整體時間複雜度是O(n).blog
算法步驟(2): 算法從O(n)個基本類簇開始,每次選擇兩個現有類簇合併爲一個新類簇,執行過程最多包含O(n)次合併操做.在此以前,ACMOM算法經過掃描樣本點的k最近鄰列表來構建數據集的MKNN鏈接集.這須要O(kn)的時間複雜度.基於所得的鏈接集,咱們爲每一個基本類簇保存一個哈希表結構[31],其中存儲了與其相鄰的類簇序號.與序號一塊兒保存的還有參與類簇之間MKNN鏈接的邊界樣本點集合(即定義2中的PK和PL).這些操做能夠經過掃描一遍MKNN鏈接集完成,於是時間複雜度也是O(kn).在每次進行合併操做時,咱們須要找到知足類似度最大的類簇對.爲了加速算法執行,咱們將與每一個類簇最類似的類簇序號以及對應類似度存儲在一個最大堆結構[32]中.構建最大堆結構的時間複雜度是O(nlogn),而每次從其中查找知足最大類似度的類簇對僅須要常數項時間.在進行合併操做時,除了使用常數項時間將原有類簇的樣本點合併至新的類簇外,咱們還須要將原有類簇的鄰居列表進行合併,而且更新其最類似鄰居.因爲這一列表存儲在哈希表結構中,而類簇的平均鄰居數爲O(k),於是所需的時間複雜度也是O(k).此外,咱們還須要更新與被合併類簇相鄰的其餘類簇.假設這些相關類簇的平均數量爲個,則對它們的鄰居列表進行更新的時間複雜度爲.最後,在最大堆結構中更新這些相關類簇以及新合併類簇的最近鄰信息須要時間.綜上所述,對數據集進行O(n)此合併操做的時間複雜度爲,這也是算法步驟(2)的整體時間複雜度.
算法步驟(3): 爲了對每一個孤立樣本點查找其最近非孤立點鄰居,咱們首先在它的最近k鄰居列表中進行搜索,這須要最多O(kn)時間.而對於剩餘的孤立樣本點,咱們經過進一步查詢k-d樹進行判斷.設這些剩餘樣本點的個數爲,查詢的最壞時間複雜度爲.以後,將全部孤立樣本點合併至最近類簇的時間複雜度爲O(n).於是算法步驟(3)的整體時間複雜度爲.
算法步驟(4): 假設類簇集GS中還剩餘個未被合併的類簇,使用ALINK算法對其進行合併的時間複雜度爲,這也是算法步驟(4)的整體時間複雜度.
綜上所述,ACMOM算法的時間複雜度爲.根據第五節中的實驗結果,在實際算法執行過程當中的值都要遠遠小於樣本點個數n.所以,在高維數據中ACMOM算法的時間複雜度主要集中於k最近鄰樣本點的查詢操做O(dn2-1/d)。
從上面的分析能夠得出,ACMOM算法實際執行過程當中須要存儲以下一些結構:(1) 包含有n個樣本點的k-d樹結構,空間複雜度爲;(2) 全部樣本點的最近k鄰居列表,空間複雜度爲;(3) 全部樣本點的MkNN鏈接集,空間複雜度爲;(4) 最多n個相鄰類簇列表,空間複雜度爲;(5) 包含全部類簇的最類似類簇信息的最大堆結構,空間複雜度爲.
綜上所述,ACMOM算法的空間複雜度爲,主要集中於存儲全部樣本點的最近k鄰居列表以及與此相關的其餘結構中。
本節中,咱們將從聚類有效性和算法運行效率兩個方面詳細比較ACMOM算法與其餘兩類合併聚類算法.對於經典合併聚類技術,咱們選取知足單調遞減特性的CLINK算法、SLINK算法、ALINK算法和WARD算法做爲其表明方法.對任意形狀的合併聚類技術,咱們選取目前公認表現最好的CHAMELEON算法做爲其表明方法.此外,咱們還將具體分析算法參數k值的變化對於聚類有效性和算法運行效率的影響.
在算法實現方面,咱們經過調用Matlab軟件中的linkage等函數來使用CLINK算法、SLINK算法、ALINK算法和WARD算法.另外,咱們還經過調用算法做者所提供的CLUTO軟件包(C++語言)[33]來使用CHAMELEON算法.CHAMELEON算法的主要參數採用做者建議的-clmethod=graph、-sim=dist、-agglofrom=30 (其餘參數採用軟件默認設置).最後,咱們的ACMOM算法採用C++語言編寫實現.全部的實驗程序都運行在一臺Intel i7-2.8GHz包含有8G內存和安裝有Windows 7操做系統的計算機上。
4.3.1任意形狀聚類分析
第一組實驗中,咱們考察ACMOM算法對於任意形狀類簇的聚類能力。所採用的數據集是文獻[16]中用於測試CHAMELEON算法的數據集DS1.1-1.4[33]。其中,數據集DS1.1-1.3各包含有8000個樣本點,數據集DS1.4包含有10000個樣本點.根據文獻[16]的實驗結果展現和分析,採用標準參數設定的CHAMELEON算法可以較好地聚類上述數據集,而CURE算法對於這幾個數據集都出現了較大程度的錯誤劃分.圖3展現了原始數據集以及ACMOM算法的聚類結果,代表其對於任意形狀類簇具備良好的聚類效果。本組實驗中,咱們設置ACMOM算法參數k = 28,圖3中具體描述了展現所截取的類簇數目C.
另外,Linkage Metric算法的測試結果對於上述幾個數據集都出現了明顯的錯誤劃分,這來自於其嚴格單調遞減的理論特性。限於篇幅緣由,咱們省略了對其聚類結果的展現.
4.3.2聚類質量分析
第二組實驗中,咱們進一步使用DS2.1-2.4等真實數據集來測試比較ACMOM算法與其餘幾種合併聚類算法的聚類質量.上述數據集都來自於UCI Machine Learning Repository[34],它們中的樣本點都事先貼有所屬類別標籤.表2對這些數據集的名稱、應用領域、大小、維度和真實類別數目分別作了介紹和統計.做爲衡量標準,咱們選取NMI (Normalized Mutual Information)和purity兩種經常使用尺度進行判斷[35].
當算法給出聚類結果爲而真實類簇集合爲時, NMI衡量了這兩組劃分的信息一致性,具備以下定義.
其中I是互信息函數, H是熵函數.
上式中n是數據集中樣本點的總數,而且和.另外, purity表示了算法輸出類簇包含真實類簇最大比例的累積程度,具備以下定義.
NMI和purity的取值範圍都是[0,1],它們的值越大則說明聚類效果越好.表3顯示了幾種合併聚類算法對於數
據集DS2.1-2.4的聚類結果.其中,咱們選擇算法的目標聚類數目爲數據集包含的真實類簇數,即上式中M = L. 本組實驗中,咱們設置ACMOM算法的參數k = 22.
Table 2 Statistics of datasets DS2.1-2.4
表2 數據集DS2.1-2.4的統計信息
Datasets |
Name |
Application Domain |
# of points |
# of dimensions |
# of real clusters |
DS2.1 |
Iris |
Biology |
150 |
4 |
3 |
DS2.2 |
Breast Cancer Wisconsin |
Medicine |
683 |
9 |
2 |
DS2.3 |
Vehicle Silhouettes |
Transportation |
846 |
18 |
4 |
DS2.4 |
Image Segmentation |
Image Processing |
2100 |
16 |
7 |
Table 3 NMI/purity score of agglomerative clustering algorithms
表3 測試不一樣合併聚類算法的NMI/purity值
Algorithm |
Linkage Metric |
CHAMELEON |
ACMOM |
|||
SLINK |
CLINK |
ALINK |
WARD |
|||
DS2.1 |
0.72/0.68 |
0.72/0.84 |
0.81/0.91 |
0.77/0.89 |
0.70/0.73 |
0.80/0.92 |
DS2.2 |
0.01/0.65 |
0.64/0.93 |
0.68/0.94 |
0.78/0.97 |
0.04/0.65 |
0.84/0.98 |
DS2.3 |
0.01/0.26 |
0.18/0.46 |
0.17/0.38 |
0.18/0.45 |
0.12/0.36 |
0.20/0.44 |
DS2.4 |
0.35/0.29 |
0.50/0.53 |
0.49/0.49 |
0.55/0.56 |
0.59/0.59 |
0.68/0.67 |
如表3中所示, ACMOM算法對於不一樣領域的真實數據集都表現出較好的聚類效果.特別對於數據集DS2.2和DS2.4, ACMOM算法相比其餘幾種合併聚類算法表現出明顯優點.
4.3.3系統樹圖質量分析
系統樹圖做爲合併聚類算法的輸出結果,表達了具體聚類模型下樣本點間的層次性類似關係.爲了衡量系統樹圖是否真實反映了數據集樣本點間的內在聯繫,類似矩陣P、共表矩陣Pc和共表相關係數CPCC(Cophenetic Correlation Coefficient)常被用於判斷其質量[12,36].對於一個給定的數據集,類似矩陣P中的元素表示了樣本點和間的歐氏距離.而共表矩陣Pc中的元素表示了系統樹圖中樣本點和首次被合併至同一類簇時的節點高度.共表相關係數CPCC則用於衡量這兩個矩陣之間的相關程度,具備以下定義。
其中,而和分別定義爲
CPCC的取值範圍爲[-1,1],它的值越大則系統樹圖越能反映出數據集的真實情況.
第三組實驗中,爲了比較合併聚類算法所生成系統樹圖的質量,咱們採用不一樣類簇數目和不一樣維度的球形數據集DS3.1-DS3.8[37]進行測試,並使用CPCC做爲衡量標準.其中,數據集DS3.1-3.3包含類簇數量不斷遞增的2維高斯分佈樣本點;而數據集DS3.4-3.8則都來自於相同的高斯分佈生成器,它們的樣本點維度依次遞增.這些數據集的二維或三維形狀如圖4所示,表4中描述了它們的詳細信息.
咱們選擇將ACMOM算法與知足單調遞減特性的Linkage Metric算法族進行比較.這些算法在理論上可以保證類簇間距離排序的嚴格保持,不易陷入局部最優的困境,於是對於球形類簇具備良好的聚類效果.此外,由CHAMELEON不能生成完整的系統樹圖結構,於是沒法對其計算CPCC值.本組實驗中,咱們設置ACMOM算法的參數k = 22.具體的實驗結果如表5所示.
Table 4 Statistics of datasets DS3.1-3.5
表4 數據集DS3.1-3.5的統計信息
Datasets |
DS3.1 |
DS3.2 |
DS3.3 |
DS3.4 |
DS3.5 |
DS3.6 |
DS3.7 |
DS3.8 |
# of points |
3000 |
5250 |
7500 |
2026 |
2701 |
4051 |
5401 |
6751 |
# of dimensions |
2 |
2 |
2 |
3 |
4 |
6 |
8 |
10 |
# of clusters |
20 |
35 |
50 |
10 |
10 |
10 |
10 |
10 |
Table 5 CPCC of dendrograms by agglomerative clustering algorithms
表5 測試不一樣合併聚類算法下系統樹圖的CPCC值
Algorithm |
DS3.1 |
DS3.2 |
DS3.3 |
DS3.4 |
DS3.5 |
DS3.6 |
DS3.7 |
DS3.8 |
SLINK |
0.61 |
0.58 |
0.52 |
0.79 |
0.86 |
0.91 |
0.92 |
0.88 |
CLINK |
0.72 |
0.72 |
0.67 |
0.79 |
0.90 |
0.84 |
0.92 |
0.87 |
ALINK |
0.74 |
0.70 |
0.66 |
0.83 |
0.92 |
0.92 |
0.94 |
0.91 |
WARD |
0.74 |
0.68 |
0.64 |
0.81 |
0.82 |
0.90 |
0.91 |
0.87 |
ACMOM |
0.74 |
0.70 |
0.68 |
0.83 |
0.92 |
0.92 |
0.93 |
0.91 |
從表5中能夠看出, ACMOM算法的聚類結果一直保持有幾乎最高的CPCC值.相比大部分經典合併聚類技術,它能更好地反映出樣本點間的真實距離.於是說明ACMOM算法生成的系統樹圖對於保證合併聚類過程當中類簇之間的距離遞增順序具備必定的做用。
網易雲產品免費體驗館,無套路試用,零成本體驗雲計算價值。
本文來自網易實踐者社區,經做者錢烽受權發佈
更多網易研發、產品、運營經驗分享請訪問網易雲社區。
相關文章:
【推薦】 一文了解安卓APP逆向分析與保護機制