聚類之meanshift演算法
在K-Means 演算法中,最終的聚類效果受初始的聚類中心的影響,K-Means++演算法的提出,為選擇較好的初始聚類中心提供了依據(選擇的的初始聚類中心儘可能的遠)
但是演算法中,聚類的類別個數K仍需事先確定,對於類別個數事先未知的資料集,K-Means和K-Means++將很難對其精確求解。
Mean Shift 演算法,又被稱作均值漂移演算法,與K-Means演算法一樣,都是基於聚類中心的聚類演算法。
優點:不需要提前指定聚類類別個數
缺點:計算量大
在Meanshift演算法中,聚類中心是通過在給定區域中的樣本的均值來確定的,通過不斷的迭代更新聚類中心,直到最終的聚類中心不再改變為止。
Mean Shift向量
對於給定的n位空間
中的m個樣本點
,對於其中的一個樣本X,其Mean Shift向量為:
其中,
指的是一個半徑為
的高維球區域
首先明確一點:每一個樣本點都會對應一個Mean Shift 向量。
在計算漂移均值向量的過程中,通過計算圓
中的每一個樣本點
相對於點X的偏移向量
,再對所有的漂移均值向量求和然後再求平均。
根據漂移均值向量的計算公式可以得出一個顯然的結論:
樣本點會向樣本密集的地方“漂移”(向量加法)
如上的均值漂移向量的求解方法存在一個問題:即在 的區域內,每一個樣本點 對樣本X的貢獻是一樣的。
而在實際中,每一個樣本點 對於樣本X的貢獻是不一樣的,這樣的貢獻可以通過核函式來進行度量。
高斯核函式
在Mean Shift 演算法中引入核函式的目的是使得隨著樣本與被漂移點的距離不同,其漂移量對均值漂移向量的貢獻也不同。
高斯核函式是使用較多的一種核函式,其函式形式為:
其中,h稱作頻寬,不同的頻寬的核函式如下如所示:
從圖中可以看出,
1)當頻寬一定時,樣本點之間的距離越近,其核函式的值越大;
2)當樣本點之間的距離相等,隨著高斯核函式的頻寬h的增大,核函式的值在減小。
Mean Shift 演算法原理
引入核函式的Mean shift 向量
假設在半徑為h的範圍
範圍內,為了使得每一個樣本點
對於樣本X的貢獻不一樣,向基本的Mean Shift向量形式中增加核函式,得到如下的改進的Mean Shift 向量形式。
其中, 是高斯核函式。
Mean Shift演算法的基本原理
在 Mean Shift 演算法中,通過迭代的方式找到最終的聚類中心,即對每一個樣本點計算其漂移均值,以計算出來的漂移均值作為新的起始點,重複以上的步驟,直到滿足終止的條件,得到的最終的均值漂移點即為最終的聚類中心。
-
逐點迭代,設定為位置中心
-
計算所有點到位置中心的距離
-
計算位置的漂移中心(所有點座標的加權平均,權值是由距離和高斯核確定的)
-
位置中心的質心的距離夠小就停止,該位置中心點就屬於(質心)類。(使用質心來標記所屬類別)
-
位置中心的質心的距離不夠小,位置中心移動到質心,繼續
-
每個點都被標記了(標記為某個質心),統計一下,有幾種標記。聚類完成。