原文:
一、mean shift 演算法理論
mean shift 演算法是基於核密度估計的爬山演算法,可用於聚類、影象分割、跟蹤等,因為最近搞乙個專案,涉及到這個演算法的影象聚類實現,因此這裡做下筆記。
(1)均值漂移的基本形式
給定d維空間的n個資料點集x,那麼對於空間中的任意點x的mean shift向量基本形式可以表示為:
這個向量就是漂移向量,其中sk表示的是資料集的點到x的距離小於球半徑h的資料點。也就是:
而漂移的過程,說的簡單一點,就是通過計算得漂移向量,然後把球圓心x的位置更新一下,更新公式為:
使得圓心的位置一直處於力的平衡位置。
總結為一句話就是:求解乙個向量,使得圓心一直往資料集密度最大的方向移動。說的再簡單一點,就是每次迭代的時候,都是找到圓裡面點的平均位置作為新的圓心位置。
(2)加入核函式的漂移向量
這個說的簡單一點就是加入乙個高斯權重,最後的漂移向量計算公式為:
因此每次更新的圓心座標為:
不過我覺得如果用高斯核函式,把這個演算法稱為均值漂移有點不合理,既然叫均值漂移,那麼均值應該指的是權重相等,也就是(1)中的公式才能稱之為真正的均值漂移。
我的簡單理解mean shift演算法是:物理學上力的合成與物體的運動。每次迭代通過求取力的合成向量,然後讓圓心沿著力的合成方向,移動到新的平衡位置。
二、mean shift 聚類流程:
假設在乙個多維空間中有很多資料點需要進行聚類,mean shift的過程如下:
在未被標記的資料點中隨機選擇乙個點作為中心center;
找出離center距離在bandwidth之內的所有點,記做集合m,認為這些點屬於簇c。同時,把這些求內點屬於這個類的概率加1,這個引數將用於最後步驟的分類
以center為中心點,計算從center開始到集合m中每個元素的向量,將這些向量相加,得到向量shift。
center = center+shift。即center沿著shift的方向移動,移動距離是||shift||。
重複步驟2、3、4,直到shift的大小很小(就是迭代到收斂),記住此時的center。注意,這個迭代過程中遇到的點都應該歸類到簇c。
如果收斂時當前簇c的center與其它已經存在的簇c2中心的距離小於閾值,那麼把c2和c合併。否則,把c作為新的聚類,增加1類。
重複1、2、3、4、5直到所有的點都被標記訪問。
分類:根據每個類,對每個點的訪問頻率,取訪問頻率最大的那個類,作為當前點集的所屬類。
簡單的說,mean shift就是沿著密度上公升的方向尋找同屬乙個簇的資料點。
聚類之meanshift演算法
在k means 演算法中,最終的聚類效果受初始的聚類中心的影響,k means 演算法的提出,為選擇較好的初始聚類中心提供了依據 選擇的的初始聚類中心盡可能的遠 但是演算法中,聚類的類別個數k仍需事先確定,對於類別個數事先未知的資料集,k means和k means 將很難對其精確求解。mean ...
meanshift聚類演算法跟蹤原理
這幾天學習 學習opencv 中的第十章運動跟蹤,裡面講到了meanshift演算法,根據書上所講實在難以理解,meanshift在運動跟蹤這個過程中到底起到什麼作用,於是經過幾天不斷地看相關資料和別人的部落格文章,慢慢思路清晰了,也終於知道了meanshift這個演算法它到底是什麼作用,起到什麼樣...
聚類演算法 近鄰聚類演算法
time is always too short for those who need it,but for those who love,it lasts forever.dracula untold 近鄰聚類法同樣是一種基於距離閾值的聚類演算法。coding utf 8 近鄰聚類演算法的pyth...