之前項目有聚類的一些需求,現大致對一些聚類算法總結下:
聚類是對一系列事物根據其潛在特徵按照某種度量函數歸納成一個個簇的動作,使得簇內數據間的相似度儘可能大,不同簇的數據相似度儘可能小。
通常聚類流程如下:數據獲取-數據預處理-模型選型-模型聚類調參-輸出結果。其中數據預處理、模型選型是流程中較爲重要部分。數據預處理將雜亂無章的數據處理爲具備某些共同點的特徵,從而模型能更好地擬合數據,很經典的一句話:特徵處理決定模型的上限。模型選型需要根據業務的具體需求及數據特性結合各聚類模型的特點進行選擇。由於數據預處理需要根據具體數據及具體業務進行處理,本文僅介紹下各類聚類算法:
一、基於劃分的聚類算法
K-means
經典K-means算法流程:
1. 隨機地選擇k個對象,每個對象初始地代表了一個簇的中心;
2. 對剩餘的每個對象,根據其與各簇中心的距離,將它賦給最近的簇;
3. 重新計算每個簇的平均值,更新爲新的簇中心;
4. 不斷重複2、3,直到準則函數收斂
優點:
K-means算法簡單快速;
當簇較爲密集,呈現球狀或團狀時能有比較好的效果
缺點:
對K值敏感,聚類結果會受到K值很大的影響
對噪聲點敏感,如當數據中只有2個簇,此時添加一個噪聲點,則極大可能會導致噪聲點分爲一個簇,數據中的2個簇分爲一個簇
只能聚凸的數據集
二、基於層次的聚類算法
該類主要有自下而上和自上而下兩種思想。
以自下而上流程爲例:
1. 將每個對象看作一類,計算兩兩之間的最小距離;
2. 將距離最小的兩個類合併成一個新類;
3. 重新計算新類與所有類之間的距離;
4. 重複2、3,直到所有類最後合併成一類
優點:
不需提前設置K值
可以發現層次關係
缺點:
計算複雜度高
奇異值有較大影響
三、基於密度的聚類算法
例如DBSCAN
DBSCAN 算法是一種基於密度的聚類算法:
1.聚類的時候不需要預先指定簇的個數
2.最終的簇的個數不確定
DBSCAN算法將數據點分爲三類:
1.核心點:在半徑Eps內含有超過MinPts數目的點。
2.邊界點:在半徑Eps內點的數量小於MinPts,但是落在覈心點的鄰域內的點。
3.噪音點:既不是核心點也不是邊界點的點。
DBSCAN流程:
1.將所有點標記爲核心點、邊界點或噪聲點;
2.刪除噪聲點;
3.爲距離在Eps之內的所有核心點之間賦予一條邊;
4.每組連通的核心點形成一個簇;
5.將每個邊界點指派到一個與之關聯的核心點的簇中(哪一個核心點的半徑範圍之內)。
優點:
自適應的聚類,不需提前設置K值
對噪聲不敏感
能發現任意形狀的簇
缺點:
對兩個參數圈的半徑、閾值敏感
數據集越大,花費時間越長
四、基於滑動窗口的聚類算法
例如均值聚類漂移
均值聚類漂移算法流程:
1.我們從一個以 C 點(隨機選擇)爲中心,以半徑 r 爲核心的圓形滑動窗口開始。均值漂移是一種爬山算法,它包括在每一步中迭代地向更高密度區域移動,直到收斂。
2.在每次迭代中,滑動窗口通過將中心點移向窗口內點的均值來移向更高密度區域。滑動窗口內的密度與其內部點的數量成正比。自然地,通過向窗口內點的均值移動,它會逐漸移向點密度更高的區域。
3.我們繼續按照均值移動滑動窗口直到沒有方向在覈內可以容納更多的點。
4.步驟 1 到 3 的過程是通過許多滑動窗口完成的,直到所有的點位於一個窗口內。當多個滑動窗口重疊時,保留包含最多點的窗口。然後根據數據點所在的滑動窗口進行聚類
優點:
不需提前設置K值
可以處理任意形狀的簇類
缺點:
窗口半徑有可能是不重要的
對於較大的特徵空間,計算量較大