日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

聚类算法 距离矩阵_模糊聚类算法

發布時間:2024/10/8 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 聚类算法 距离矩阵_模糊聚类算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模糊聚類算法

1.如何理解模糊聚類

事物間的界線,有些是明確的,有些則是模糊的。當聚類涉及到事物之間的模糊界線時,需要運用模糊聚類分析方法。

如何理解模糊聚類的“模糊”呢:假設有兩個集合分別是A、B,有一成員a,傳統的分類概念a要么屬于A要么屬于B,在模糊聚類的概念中a可以0.3屬于A,0.7屬于B,這就是其中的“模糊”概念。

模糊聚類分析有兩種基本方法:系統聚類法和逐步聚類法。

系統聚類法個人理解類似于密度聚類算法,逐步聚類法類是中心點聚類法。(這里有不對的地方請指正)

逐步聚類法是一種基于模糊劃分的模糊聚類分析法。它是預先確定好待分類的樣本應分成幾類,然后按照最優原則進行在分類,經多次迭代直到分類比較合理為止。在分類過程中可認為某個樣本以某一隸屬度隸屬某一類,又以某一隸屬度隸屬于另一類。這樣,樣本就不是明確的屬于或不屬于某一類。若樣本集有n個樣本要分成c類,則他的模糊劃分矩陣為c×n。

該矩陣有如下特性:

  • . 每一樣本屬于各類的隸屬度之和為1。
  • . 每一類模糊子集都不是空集。
  • 2. 模糊C-means聚類算法

    模糊c-均值聚類算法fuzzy c-means (FCM)。在眾多模糊聚類算法中,模糊C-均值(FCM)算法應用最廣泛且成功,它通過優化目標函數得到每個樣本點對所有類中心的隸屬度,從而對樣本進行自動分類。

    2.1 FCM算法原理

    假定我們有數據集X,我們要對X中的數據進行分類,如果把這些數據劃分成c個類的話,那么對應的就有c個類中心為Ci,每個樣本Xj屬于某一類Ci的隸屬度定為Uij,那么定義一個FCM目標函數及其約束條件如下:

    目標函數(式1)由相應樣本的隸屬度與該樣本到各類中心的距離相乘組成的,式2為約束條件,也就是一個樣本屬于所有類的隸屬度之和要為 1 。式1中的m是一個隸屬度的因子,一般為2 ,||Xj - Ci|| 表示Xj到中心點Ci的歐式距離。目標函數J越小越好,說以我們要求得目標函數J的極小值,這里如何求極小值就不推導了。

    Uij的迭代公式:

    Ci的迭代公式:

    我們發現Uij和Ci是相互關聯的,彼此包含對方,那么問題來了,fcm算法開始的時候既沒有Uij也沒有Ci,那么如何求解呢?很簡單,程序一開始的時候我們會隨機生成一個Uij,只要數值滿足條件即可,然后開始迭代,通過Uij計算出Ci,有了Ci又可以計算出Uij,反反復復,這個過程中目標函數J一直在變化,逐漸縐向穩定。那么當J不在變化時就認為算法收斂到一個較好的結果了。

    2.2 FCM算法實現(python)

    (1)算法流程

  • 隨機初始化模糊矩陣U(描述每個點在不同類的隸屬度)
  • 有了模糊矩陣U通過下面公式計算類中心
  • 通過下面公式根據計算出的類中心,更新模糊矩陣U
  • 當U的變化不大時結束迭代,否則回到第二步
  • (2)代碼實現

    import numpy as np

    from sklearn import datasets

    iris = datasets.load_iris()

    print(iris.data.shape)

    def FCM(X, c_clusters=3, m=2, eps=10):

    membership_mat = np.random.random((len(X), c_clusters)) # 生成隨機二維數組shape(150,3),隨機初始化隸屬矩陣

    # 這一步的操作是為了使Xi的隸屬度總和為1

    membership_mat = np.divide(membership_mat, np.sum(membership_mat, axis=1)[:, np.newaxis])

    while True:

    working_membership_mat = membership_mat ** m # shape->(150,3)

    # 根據公式計算聚類中心點Centroids.shape->(3,4)

    Centroids = np.divide(np.dot(working_membership_mat.T, X), np.sum(working_membership_mat.T, axis=1)[:, np.newaxis])

    # 該矩陣保存所有實點到每個聚類中心的歐式距離

    n_c_distance_mat = np.zeros((len(X), c_clusters)) # shape->(150,3)

    for i, x in enumerate(X):

    for j, c in enumerate(Centroids):

    n_c_distance_mat[i][j] = np.linalg.norm(x-c, 2) # 計算l2范數(歐氏距離)

    new_membership_mat = np.zeros((len(X), c_clusters))

    # 根據公式計算模糊矩陣U

    for i, x in enumerate(X):

    for j, c in enumerate(Centroids):

    new_membership_mat[i][j] = 1. / np.sum((n_c_distance_mat[i][j] / n_c_distance_mat[i]) ** (2 / (m-1)))

    if np.sum(abs(new_membership_mat - membership_mat)) < eps:

    break

    membership_mat = new_membership_mat

    return np.argmax(new_membership_mat, axis=1)

    print(FCM(iris.data))

    代碼完全是根據上述流程和公式實現的,理解起來也很簡單,迭代退出條件可以優化一下,其他的可以不用改動。

    (3)FCM的缺點

    FCM是對J目標函數求極小值,也就是說我們得到的結果可能是目標函數的局部極值點或者是鞍點。

    《來源于科技文獻,經本人分析整理,以技術會友,廣交天下朋友》

    總結

    以上是生活随笔為你收集整理的聚类算法 距离矩阵_模糊聚类算法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。