1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        【機器學習】Mean Shift原理及代碼

        共 3431字,需瀏覽 7分鐘

         ·

        2022-07-26 09:05

        Mean Shift介紹

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


        Mean Shift的原理

        均值漂移聚類的目的是發(fā)現(xiàn)一個平滑密度的樣本點。它是一種基于質心的算法,其工作原理是將質心的候選點更新為給定區(qū)域內的點的平均值。然后在后處理階段對這些候選點進行過濾,以消除近似重復點,形成最終的一組質心。給定一個候選質心xi和迭代次數(shù)t,按照以下的等式進行更新:

          其中N(xi)是在xi周圍給定距離內的樣本的鄰域,m是針對指向點密度最大增長區(qū)域的每個質心計算的平均位移向量。使用以下公式進行計算,能有效地更新一個質心為其鄰域內樣本的平均值:

         

        Mean Shift算法的流程可被理解為

        1. 計算每個樣本的平均位移

        2. 對每個樣本點進行平移

        3. 重復(1)(2),直到樣本收斂

        4. 收斂到相同點的樣本可被認為是同一簇類的成員
          ## Mean Shift算法的優(yōu)缺點
          不需要設置簇的個數(shù)也可以處理任意形狀的簇類,同時算法需要的參數(shù)較少,且結果較為穩(wěn)定不需要像K-means的樣本初始化。但同時Mean Shift對于較大的特征空間需要的計算量非常大,而且如果參數(shù)設置的不好則會較大的影響結果,如果bandwidth設置的太小收斂太慢,而如果bandwidth參數(shù)設置的過大,一部分簇則會丟失。

         

        Mean Shift的代碼實現(xiàn)


        在Sklearn中實現(xiàn)了MeanShift算法,其算法使用方法如下:

        sklearn.cluster.MeanShift(*, bandwidth=None, seeds=None, bin_seeding=False, min_bin_freq=1, cluster_all=True, n_jobs=None, max_iter=300)

        其中最主要的參數(shù)是bandwidth,這個參數(shù)是用于RBF kernel中的帶寬。參數(shù)seeds是用于初始化核的種子,如果不指定則會使用sklearn.cluster.estimate_bandwidth進行估計。
        使用示例:

        from sklearn.cluster import MeanShift  
        import numpy as np  
        X = np.array([[11], [21], [10],  
                      [47], [35], [36]])  
        clustering = MeanShift(bandwidth=2).fit(X)


        Mean Shift的應用


        # 導入相關模塊和導入數(shù)據(jù)集
        import numpy as np
        from sklearn.cluster import MeanShift, estimate_bandwidth
        from sklearn.datasets import make_blobs
        # 生成樣本數(shù)據(jù)
        centers = [[11], [-1-1], [1-1]]
        X, _ = make_blobs(n_samples=10000, centers=centers, cluster_std=0.6)
        es_bandwidth = estimate_bandwidth(X,quantile=0.2, n_samples= 500)
        '''
        estimate_bandwidth()用于生成mean-shift窗口的尺寸,
        其參數(shù)的意義為:從X中隨機選取500個樣本,
        計算每一對樣本的距離,然后選取這些距離的0.2分位數(shù)作為返回值
        '''

        MS = MeanShift(bandwidth=es_bandwidth)
        MS.fit(X)
        labels = MS.labels_
        cluster_centers = MS.cluster_centers_
        uni_labels = np.unique(labels)
        n_clusters_ = len(uni_labels)
        import matplotlib.pyplot as plt
        from itertools import cycle
        # 對算法聚類結果進行可視化
        colors = cycle('bgrcmykbgrcmykbgrcmykbgrcmyk')
        for k, col in zip(range(n_clusters_), colors):
            my_members = labels == k
            cluster_center = cluster_centers[k]
            plt.plot(X[my_members, 0], X[my_members, 1], col + '.')
            plt.plot(cluster_center[0], cluster_center[1], 'o', markerfacecolor=col,
                     markeredgecolor='k', markersize=14)
        plt.show()



        Mean Shift的實際應用


        Mean Shift是聚類中常見的算法,以下展示了該算法在實際中的部分應用:


        1. 簡單聚類

        mean shift用于聚類就有些類似于密度聚類,從單個樣本點出發(fā),找到其對應的概率密度局部極大點,并將其賦予對應的極大點,從而完成聚類的過程


        2. 圖像分割

        圖像分割的本質也是聚類,不過相對與簡單聚類,圖像分割又有其特殊性。mean shift通過對像素空間進行聚類,達到圖像分割的目的。



        3. 圖像平滑

        圖像平滑和圖像分割有異曲同工之妙,同樣是對每一個像素點尋找其對應的概率密度極大點,主要區(qū)別在于:
        a. 迭代過程不用深入,通常迭代一次即可;
        b. 找到概率密度極大點后,直接用其顏色特征覆蓋自身的顏色特征。



        4. 輪廓提取

        同樣,輪廓提取與圖像分割也是類似的,或者具體地說,輪廓提取可以基于圖像分割進行。首先使用mean shift 算法對圖像進行分割,然后取不同區(qū)域的邊緣即可得到簡單的輪廓


        - EOF -

        往期精彩回顧




        瀏覽 68
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            男人插女人的屁股 | 国产99久久久久久免费看 | 黄频网站在线观看 | 狠狠躁日日躁 | 日皮视频在线免费观看 | 再快一点再快一点好舒服呀 | 深夜福利免费视频 | 国产真实乱子伦偷精品! | 91丨九色丨国产成人精品区 | 操屄乱伦视频 |