1. 程式人生 > >四種聚類方法及程式碼實現。K-means 高斯聚類 密度聚類 均值漂移聚類

四種聚類方法及程式碼實現。K-means 高斯聚類 密度聚類 均值漂移聚類

四種方法的matlab程式碼實現:連結: https://pan.baidu.com/s/1b6pKH65rYrRcBLnczz-EnA 密碼: 4iag

1.K-means聚類:

演算法步驟: 
(1) 首先我們選擇一些類/組,並隨機初始化它們各自的中心點。中心點是與每個資料點向量長度相同的位置。這需要我們提前預知類的數量(即中心點的數量)。 
(2) 計算每個資料點到中心點的距離,資料點距離哪個中心點最近就劃分到哪一類中。 
(3) 計算每一類中中心點作為新的中心點。 

(4) 重複以上步驟,直到每一類中心在每次迭代後變化不大為止。也可以多次隨機初始化中心點,然後選擇執行結果最好的一個。 

優點: 
速度快,計算簡便 


缺點: 
我們必須提前知道資料有多少類/組。 
K-Medians是K-Means的一種變體,是用資料集的中位數而不是均值來計算資料的中心點。 

K-Medians的優勢是使用中位數來計算中心點不受異常值的影響;缺點是計算中位數時需要對資料集中的資料進行排序,速度相對於K-Means較慢。

2. 均值漂移聚類

均值漂移聚類是基於滑動視窗的演算法,來找到資料點的密集區域。這是一個基於質心的演算法,通過將中心點的候選點更新為滑動視窗內點的均值來完成,來定位每個組/類的中心點。然後對這些候選視窗進行相似視窗進行去除,最終形成中心點集及相應的分組。 
具體步驟: 
1. 確定滑動視窗半徑r,以隨機選取的中心點C半徑為r的圓形滑動視窗開始滑動。均值漂移類似一種爬山演算法,在每一次迭代中向密度更高的區域移動,直到收斂。 
2. 每一次滑動到新的區域,計算滑動視窗內的均值來作為中心點,滑動視窗內的點的數量為視窗內的密度。在每一次移動中,視窗會想密度更高的區域移動。 
3. 移動視窗,計算視窗內的中心點以及視窗內的密度,知道沒有方向在視窗內可以容納更多的點,即一直移動到圓內密度不再增加為止。 

4. 步驟一到三會產生很多個滑動視窗,當多個滑動視窗重疊時,保留包含最多點的視窗,然後根據資料點所在的滑動視窗進行聚類。

3. 基於密度的聚類方法(DBSCAN)

與均值漂移聚類類似,DBSCAN也是基於密度的聚類演算法。 
具體步驟: 
1. 首先確定半徑r和minPoints. 從一個沒有被訪問過的任意資料點開始,以這個點為中心,r為半徑的圓內包含的點的數量是否大於或等於minPoints,如果大於或等於minPoints則改點被標記為central point,反之則會被標記為noise point。 
2. 重複1的步驟,如果一個noise point存在於某個central point為半徑的圓內,則這個點被標記為邊緣點,反之仍為noise point。重複步驟1,知道所有的點都被訪問過。 
優點:不需要知道簇的數量 
缺點:需要確定距離r和minPoints

4. 用高斯混合模型(GMM)的最大期望(EM)聚類

K-Means的缺點在於對聚類中心均值的簡單使用。下面的圖中的兩個圓如果使用K-Means則不能作出正確的類的判斷。同樣的,如果資料集中的點類似下圖中曲線的情況也是不能正確分類的。 
這裡寫圖片描述 
使用高斯混合模型(GMM)做聚類首先假設資料點是呈高斯分佈的,相對應K-Means假設資料點是圓形的,高斯分佈(橢圓形)給出了更多的可能性。我們有兩個引數來描述簇的形狀:均值和標準差。所以這些簇可以採取任何形狀的橢圓形,因為在x,y方向上都有標準差。因此,每個高斯分佈被分配給單個簇。 
所以要做聚類首先應該找到資料集的均值和標準差,我們將採用一個叫做最大期望(EM)的優化演算法。下圖演示了使用GMMs進行最大期望的聚類過程。