深入剖析Mean Shift聚類算法原理

轉自:http://www.360doc.com/content/19/0623/22/99071_844418459.shtml

Mean Shift(均值漂移)是基於密度的非參數聚類算法,其算法思想是假設不同簇類的數據集符合不同的概率密度分佈,找到任一樣本點密度增大的最快方向(最快方向的含義就是Mean Shift),樣本密度高的區域對應於該分佈的最大值,這些樣本點最終會在局部密度最大值收斂,且收斂到相同局部最大值的點被認爲是同一簇類的成員。

Mean Shift在計算機視覺領域的應用非常廣,如圖像分割,聚類和視頻跟蹤,小編曾經用Mean Shift實現目標跟蹤,效果還不錯。本文詳細的總結了Mean Shift算法原理。


目錄

1.核密度估計

2.Mean Shift算法

3.圖解Mean Shift算法

4.帶寬對Mean Shift算法的影響

5.圖像分割

6.聚類

7.Mean Shift算法優缺點

1.核密度估計

Mean Shift算法用核函數估計樣本的密度,最常用的核函數是高斯核。它的工作原理是在數據集上的每一個樣本點都設置一個核函數,然後對所有的核函數相加,得到數據集的核密度估計(kernel density estimation)。

 

圖像分割代碼請參考github:

https://github.com/mattnedrich/MeanShift_py。

6.聚類

我們構建1000例4個簇類的樣本數據:

#%% 產生樣本數據
from sklearn.datasets import make_blobs
from itertools import cycle
from sklearn.cluster import MeanShift, estimate_bandwidth
centers = [[1, 1], [-.75, -1], [1, -1], [-3, 2]]
X, _ = make_blobs(n_samples=10000, centers=centers, cluster_std=0.6)

利用函數estimate_bandwidth估計核函數的帶寬:

bandwidth = estimate_bandwidth(X, quantile=.1,n_samples=500)

運行mean shift算法,並可視化聚類結果:

8.Mean Shift算法的優缺點

優點:

不需要設置簇類的個數;

可以處理任意形狀的簇類;

算法只需設置帶寬這一個參數,帶寬影響數據集的核密度估計

算法結果穩定,不需要進行類似K均值的樣本初始化

缺點:

聚類結果取決於帶寬的設置,帶寬設置的太小,收斂太慢,簇類個數過多;帶寬設置的太大,一些簇類可能會丟失。

對於較大的特徵空間,計算量非常大。

參考:

https://spin.atomicobject.com/2015/05/26/mean-shift-clustering/

http://efavdb.com/mean-shift/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章