之前專案有聚類的一些需求,現大致對一些聚類演算法總結下:
聚類是對一系列事物根據其潛在特徵按照某種度量函式歸納成一個個簇的動作,使得簇內資料間的相似度儘可能大,不同簇的資料相似度儘可能小。
通常聚類流程如下:資料獲取-資料預處理-模型選型-模型聚類調參-輸出結果。其中資料預處理、模型選型是流程中較為重要部分。資料預處理將雜亂無章的資料處理為具備某些共同點的特徵,從而模型能更好地擬合資料,很經典的一句話:特徵處理決定模型的上限。模型選型需要根據業務的具體需求及資料特性結合各聚類模型的特點進行選擇。由於資料預處理需要根據具體資料及具體業務進行處理,本文僅介紹下各類聚類演算法:
一、基於劃分的聚類演算法
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值
可以處理任意形狀的簇類
缺點:
視窗半徑有可能是不重要的
對於較大的特徵空間,計算量較大