Fuzzy C Means 算法及其 Python 實現
1.
算法向
算法的擴展
在
算法中,如果要將數據集合
划分為
個類,使得任意數據對象
必須屬於並且僅屬於一個類,同時每一個類至少包含一個數據對象,那么可以用一個
的矩陣
來表示,矩陣中的任意一個元素
可以表示為:
![Rendered by QuickLaTeX.com \[{u_{ij}} = \left{ \begin{cases} 1& {X_i \in G_j} \\ 0& {X_i \notin G_j} \end{cases} \right.\]](/image/aHR0cDovL25vdGU0Y29kZS5jb20vd3AtY29udGVudC9xbC1jYWNoZS9xdWlja2xhdGV4LmNvbS01Zjg0ZTk0NDQ2MWIxMjg1YmE2YTgzMzNmMWJjMzlhY19sMy5zdmc=.png)
其中
表示第
個類。並且
需要滿足如下條件
:
![Rendered by QuickLaTeX.com \[\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.\]](/image/aHR0cDovL25vdGU0Y29kZS5jb20vd3AtY29udGVudC9xbC1jYWNoZS9xdWlja2xhdGV4LmNvbS0zNzQ5ZmJiNWVjMGNiOTQxZjA4YWJlZWQzN2Q2MDJiMF9sMy5zdmc=.png)
如果上述矩陣
中的元素
的取值范圍不僅僅是 0 或者 1,那么就可以推廣到模糊集合上的划分,
就變成了模糊判定矩陣。此時
需滿足:
(1) ![Rendered by QuickLaTeX.com \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*}](/image/aHR0cDovL25vdGU0Y29kZS5jb20vd3AtY29udGVudC9xbC1jYWNoZS9xdWlja2xhdGV4LmNvbS04MjcyYmExZjA5MjdiZTQxNTFmYzE2NDU4MDMyNGRlZF9sMy5zdmc=.png)
2. 目標函數與聚類中心
算法在度量數據對象的非相似性(或者說距離)時一般使用歐幾里得距離,要求每個類的聚類中心與數據對象的距離平方之和最小,目標函數可以表示為:
![Rendered by QuickLaTeX.com \[J = \sum\limits_{i = 1}^k {\sum\limits_{j = 1}^n {s_{ij}^2} }\]](/image/aHR0cDovL25vdGU0Y29kZS5jb20vd3AtY29udGVudC9xbC1jYWNoZS9xdWlja2xhdGV4LmNvbS00MzIwMjI4Yzc1NjBiNDhmMDZhOWVjNGMyMTUzNzM4Zl9sMy5zdmc=.png)
![]()
其中
表示任意聚類中心,而聚類中心一般取類內所有對象在各屬性上的平均值,因此可以表示為:
![Rendered by QuickLaTeX.com \[{C_i} = \frac{{\sum\limits_{j,{X_j} \in {G_i}} {{X_j}} }}{{\sum\limits_{j = 1}^n {{u_{ij}}} }}\]](/image/aHR0cDovL25vdGU0Y29kZS5jb20vd3AtY29udGVudC9xbC1jYWNoZS9xdWlja2xhdGV4LmNvbS1mMmM3YzhjYTMwNDcyMzhkYWZjMGY4YmRkYjA4ZGNlYl9sMy5zdmc=.png)
表示任意一個類。
將算法推廣到模糊集后,
對樣本與類中心之間的距離采用隸屬度的平方來加權,
則進一步引入了隸屬度的加權指數
從而得到了新的目標函數:
(2) 
要使得 (2) 式達到最小值則要求聚類中心
和隸屬度
滿足如下條件:
(3) 
(4) 
3.
算法計算過程
見原文和代碼實現
