轉自: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/