Fuzzy C Means 算法及其 Python 實現——寫得很清楚,見原文


Fuzzy C Means 算法及其 Python 實現

 

1. K-Means 算法向 FCM 算法的擴展

在 K-Means 算法中,如果要將數據集合 X=\{ X_1,X_2,X_3,\dots,X_n \} 划分為 k\,(1 \le k \le n) 個類,使得任意數據對象 X_i 必須屬於並且僅屬於一個類,同時每一個類至少包含一個數據對象,那么可以用一個 k\times n 的矩陣 U 來表示,矩陣中的任意一個元素 u_{ij} 可以表示為:

  \[{u_{ij}} = \left{ \begin{cases}  1& {X_i \in G_j}  \\  0& {X_i \notin G_j} \end{cases} \right.\]

其中 {G_j}\left( {j = 1,2, \ldots ,k} \right) 表示第 j 個類。並且 U 需要滿足如下條件 (1 \le i \le k,\,1 \le j \le n)

  \[\left{ \begin{cases}  {u_{ij}} \in \{0,1\}  \\  \sum\limits_{i = 1}^k {{u_{ij}}} = 1  \\  \sum\limits_{j = 1}^n {{u_{ij}}} > 0 \end{cases} \right.\]

如果上述矩陣 U 中的元素 u_{ij} 的取值范圍不僅僅是 0 或者 1,那么就可以推廣到模糊集合上的划分,U 就變成了模糊判定矩陣。此時 {u_{ij}} 需滿足:

(1) \begin{equation*}  \left{ \begin{cases}  {u_{ij}} \in [ 0,1 ]}  \\  \sum\limits_{i = 1}^k {{u_{ij}}} = 1  \\  \sum\limits_{j = 1}^n {{u_{ij}}} > 0 \end{cases} \right. \end{equation*}

 

2. 目標函數與聚類中心

K-Means 算法在度量數據對象的非相似性(或者說距離)時一般使用歐幾里得距離,要求每個類的聚類中心與數據對象的距離平方之和最小,目標函數可以表示為:

  \[J = \sum\limits_{i = 1}^k {\sum\limits_{j = 1}^n {s_{ij}^2} }\]

  \[{s_{ij}} = Eculid({C_i},{X_j})\]

其中 C_i 表示任意聚類中心,而聚類中心一般取類內所有對象在各屬性上的平均值,因此可以表示為:

  \[{C_i} = \frac{{\sum\limits_{j,{X_j} \in {G_i}} {{X_j}} }}{{\sum\limits_{j = 1}^n {{u_{ij}}} }}\]

{G_i}{\kern 1pt} \left( {1 \le i \le k} \right) 表示任意一個類。

將算法推廣到模糊集后,Dunn 對樣本與類中心之間的距離采用隸屬度的平方來加權,Bezdek 則進一步引入了隸屬度的加權指數 m 從而得到了新的目標函數:

(2) \begin{equation*}  J = \sum\limits_{i = 1}^k {\sum\limits_{j = 1}^n {{{\left( {{u_{ij}}} \right)}^m}s_{ij}^2} } \end{equation*}

 

要使得 (2) 式達到最小值則要求聚類中心 C_i 和隸屬度 u_{ij} 滿足如下條件:

(3) \begin{equation*}  {C_i} = \frac{{\sum\limits_{j = 1}^n {u_{ij}^m{X_j}} }}{{\sum\limits_{j = 1}^n {u_{ij}^m} }} \end{equation*}

 

(4) \begin{equation*}  {u_{ij}} = \frac{1}{{\sum\limits_{l = 1}^k {{{\left( {\frac{{{u_{ij}}}}{{{u_{lj}}}}} \right)}^{2/\left( {m - 1} \right)}}} }} \end{equation*}

 

3. FCM 算法計算過程

見原文和代碼實現


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM