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.
算法计算过程
见原文和代码实现
