聚類算法總結


 

1      什么是聚類算法?

聚類算法就是根據特定的規則,將數據進行分類。分類的輸入項是數據的特征,輸出項是分類標簽,它是無監督的。

常見的聚類規則包括:1)基於原型的,例如有通過質心或中心點聚類,常見的算法KMeans;2)基於圖的,也就是通過節點和邊的概念,形成連通分支的分類,常見的算法是凝聚層次聚類,最小生成樹聚類;3)基於密度的,根據數據密度的大小進行聚類,常見的算法是DBSCAN,SNN密度聚類;4)基於統計的聚類,數據一般符合一種或幾種概率分布,根據概率分布情況進行聚類。

2      常見的幾類聚類算法

這里介紹KMeans、凝聚層次聚類和DBSCAN三種聚類方法。

2.1     KMeans聚類

KMeans聚類就是通過找出距離質心最近的點的分為一類的方法,達到SSE(誤差平方和)最小的目標。

2.1.1     基本概念

K類:參數,聚類前設置的聚類形成的簇的個數;

質心:每個簇的聚集中心,一般L2距離為均值;余弦相似度為均值;L1距離為中位數。

距離:待聚類點到質心的距離,一般低維空間用L2距離,文檔用余弦相似度。

SSE:KMeans聚類的目標函數,簇中各點到質心的距離平方和為簇內SSE,總SSE為K個簇內SSE之和。

2.1.2     KMeans聚類流程

Step1:確定要聚成的簇的個數n_clusters = k,選擇k個初始質心;

Repeat:

Step2:根據質心,將每個數據點選擇最近的質心聚為一個簇;

Step3:根據新簇,更新質心。

Until:質心不變動,或數據點所在簇不再更新;或者重復次數達到設置的上限。

2.1.3     KMeans聚類參數

KMeans聚類有兩個初始參數:k 和初始質心;

k值:

k值設置可能出現的問題:由於事先不清楚數據的分布情況導致k值設置與數據實際的簇與設置不符;

解決方法:事前:1)通過可視化散點圖觀察,但是更多時候多維不好觀察;2)通過多個k值得迭代,計算SSE或silhouette_score的趨勢分布,找出拐點對應的k值;事后:3)嘗試對SSE較大的簇進行分裂,或對質心距離很近的簇進行合並,計算SSE的增加量,改變簇的數量。

另外,可以采用二分K均值方法,逐步迭代。

初始質心:

初始質心默認采用隨機選擇的方法,但是由於質心的選擇,如果初始質心在兩個簇中間或在一個比較密的簇內,可能會出現,本來是兩個簇的聚成一個簇或者本來該聚成一個簇的變成兩個簇,使結果不能達到預期。

解決方法:1)一般解決方法,就是對初始質心多次嘗試;2)還可以通過先計算全體數據均值,作為第一個質心,后一個質心取離前一個質心距離最遠的點的方法,取出所有質心,但這種方法可能將離群點選為質心。

2.1.4     復雜度

KMeans聚類的空間復雜度為O( (m+k)n),其中m為點的個數,n為屬性的個數,k為分類個數,代表要存儲的質心數量;

時間復雜度為O(m*n*k*I),其中I為迭代次數。

2.1.5     算法優缺點

優點:簡單、便於理解,易於實現,空間復雜度和時間復雜度不高;

缺點:參數選取(k值和初始質心選取問題);KMeans算法的本質是將按照距離將距離某個質心最近的點聚為一簇,它的計算中默認每個簇是以質心為中心的球形結構,對於不規則形狀的簇、基於密度的簇等划分困難;3)KMeans聚類為完全聚類,目標函數為SSE,離群點對結果影響較大,可以先做離群點刪除,再聚類。

2.2     凝聚層次聚類

凝聚層次聚類是一種基於圖的聚類。它先是將每個點作為一個簇,通過鄰近度矩陣,將距離最近的簇聚為一個新簇,然后更新鄰近度矩陣。

2.2.1     基本概念

鄰近度矩陣:任一簇到其他簇的距離形成的矩陣;

單鏈:用兩個簇的最小距離代表兩個簇的鄰近度;可以看成兩個簇結點的邊長的最小值。

全連:用兩個簇的最大距離代表兩個簇的鄰近度;可以看成兩個簇結點的邊長的最大值。

組平均:用分別在兩個簇中點的全部點距離的平均值代表兩個簇的鄰近度。可以看成兩個簇結點的邊長的均值。

Ward:兩個簇合並導致的平方誤差的增量代表兩個簇的鄰近度。

2.2.2     聚類流程

Repeat:

Step1:計算鄰近度矩陣;

Step2:將鄰近度矩陣中最近的點合並為一個新簇;

Until:

只剩下一個簇。(這個有問題吧,只剩一個簇還聚類干嘛?)

2.2.3     復雜度

空間復雜度:由於要存儲鄰近度矩陣,所以空間復雜度為O(m2);

時間復雜度:需要m-1次迭代,每一步聚一個簇,第i步需要做O((m-i+1)2),所以時間復雜度為O(m3)。

2.2.4     算法優缺點

優點:1)不用事先設置聚類數量,根據結果就可以自動地形成合適的簇;2)不受初始質心影響,而且會將最近的點聚為一簇。

缺點:1)由於每次更新鄰近度矩陣會覆蓋原來的鄰近度矩陣,所以聚類結果很可能是次最優的;2)復雜度比較高,開銷大。3)對噪聲可能不夠敏感,高維計算時也可能出現問題。可以先使用其他技術進行局部聚類,再進行層次聚類。

2.3     DBSCAN(density based spatial cluster of application with noise)

將某一鄰域內密度大於給定值的數據聚為一簇。這一聚類屬於不完全聚類,噪聲點將不會屬於任何一個簇。

2.3.1     基本概念

核心點:在給定點的r鄰域內,包含數據中點的個數大於等於min_pts個;

邊界點:在某個核心點的鄰域內,但是它的r鄰域內點的個數小於min_pts個;

噪聲點:非核心點和邊界點。

2.3.2     聚類流程

Step1:將所有點標記為核心點、邊界點和噪聲點;

Step2:刪除噪聲點;

Step3:為距離小於eps的所有核心點構建一條邊;

Step4:每組連通的核心點形成一個簇;

Step5:將邊界點指派到與之相關聯的核心點。

2.3.3     參數

DBSCAN的初始參數有兩個,Eps和min_pts,即核心點鄰域的半徑和鄰域中最小點的個數。

Eps:鄰域的半徑大小。

鄰域設定可能會出現的問題:設置值過大,可能會將該分離的簇聚到一起;鄰域設定過小,每個點都可能成為一個鄰域。

方法:可以先計算任何點的距離,然后用線性圖展現,找出距離的拐點,作為半徑大小。

Min_pts:鄰域中最小點的個數。

點的個數的設定與鄰域的大小相關,設置過大,可能無法形成核心鄰域,設置過小,可能將噪聲作為核心點。

優化方法:???

2.3.4     復雜度

空間復雜度:要存儲點m,空間復雜度為O(m);

時間復雜度:m*找出eps內的點需要的時間,復雜度最大O(m2),最小為O(mlogm)。

2.3.5     算法優缺點

優點:1)可以區分不規則形狀的簇;2)簡單、空間復雜度低;3)抗噪聲;

缺點:1)初始參數eps和min_pts不好確定;2)高維空間不適用;3)對於不同區域密度不同的數據不能形成好的聚類效果;4)不是完全聚類,噪聲會被刪除。

3      聚類算法評估

1)    凝聚度SSE

2)    分離度:,c為全部點的均值;為簇的均值。

TSS=SSE+SSB。

3)    凝聚度和分裂度的融合,輪廓系數(silhouette_score),某個點i的輪廓系數

 

為一個數據點到其他簇所有點的距離;為一個數據點到簇內點的距離。

的值在[-1, 1]間,越大聚類效果越好。值為-1時,=0,沒有形成聚類;值為1時,,達到了最好的聚類效果。

    鄰近度矩陣矩陣:理想的相似度矩陣和現實的相似度矩陣的相關度。理想的相似度矩陣是塊對角陣,每個數據點一行一列,兩個點相似度矩陣值的坐標為:在同一簇中為1,不在同一簇中中值為0。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM