本文由ChardLau原創,轉載請添加原文鏈接https://www.chardlau.com/mean-shift/
今天的文章介紹如何利用Mean Shift
算法的基本形式對數據進行聚類操作。而有關Mean Shift
算法加入核函數計算漂移向量部分的內容將不在本文講述範圍內。實際上除了聚類,Mean Shift
算法還能用於計算機視覺等場合,有關該算法的理論知識請參考這篇文章。
Mean Shift
算法原理
下圖展示了Mean Shift
算法計算飄逸向量的過程:
Mean Shift
算法的關鍵操作是通過感興趣區域內的數據密度變化計算中心點的漂移向量,從而移動中心點進行下一次迭代,直到到達密度最大處(中心點不變)。從每個數據點出發都可以進行該操作,在這個過程,統計出現在感興趣區域內的數據的次數。該參數將在最後作爲分類的依據。
與K-Means
算法不一樣的是,Mean Shift
算法可以自動決定類別的數目。與K-Means
算法一樣的是,兩者都用集合內數據點的均值進行中心點的移動。
算法步驟
下面是有關Mean Shift
聚類算法的步驟:
- 在未被標記的數據點中隨機選擇一個點作爲起始中心點center;
- 找出以center爲中心半徑爲radius的區域中出現的所有數據點,認爲這些點同屬於一個聚類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、2、3、4、5直到所有的點都被標記爲已訪問。
- 分類:根據每個類,對每個點的訪問頻率,取訪問頻率最大的那個類,作爲當前點集的所屬類。