python用拉格朗日乘子法推导模糊C均值聚类
时间: 2023-08-01 08:13:30 浏览: 84
基于Python实现skfuzzy、FCM和模糊C均值聚类(源码+数据+说明文档).rar
5星 · 资源好评率100%
首先,我们先回顾一下模糊C均值聚类(FCM)的目标函数:
$$J(U,V)=\sum_{i=1}^n\sum_{j=1}^c u_{ij}^m||x_i-v_j||^2$$
其中,$U=[u_{ij}]_{n\times c}$ 是每个数据点 $x_i$ 对于每个聚类中心 $v_j$ 的隶属度矩阵,$V=[v_j]_{c\times d}$ 表示聚类中心矩阵,$m$ 是模糊度参数。
我们的目标是最小化目标函数 $J(U,V)$。
现在我们引入拉格朗日乘子法来解决这个问题。我们要最小化 $J(U,V)$,同时满足以下限制条件:
$$\sum_{j=1}^c u_{ij}=1 \quad \text{for } i=1,2,...,n$$
这意味着每个数据点 $x_i$ 的隶属度之和必须等于 $1$,即每个数据点必须属于某个聚类中心。
我们引入拉格朗日乘子 $\beta_i$ 并把限制条件加入目标函数中,得到:
$$J(U,V,\beta)=\sum_{i=1}^n\sum_{j=1}^c u_{ij}^m||x_i-v_j||^2-\sum_{i=1}^n\beta_i(\sum_{j=1}^c u_{ij}-1)$$
现在我们要最小化 $J(U,V,\beta)$,并且要满足 $\dfrac{\partial J}{\partial u_{ij}}=0$ 和 $\dfrac{\partial J}{\partial v_j}=0$ 两个条件。
求解 $\dfrac{\partial J}{\partial u_{ij}}=0$,可以得到:
$$u_{ij}=\frac{1}{\sum_{k=1}^c(\dfrac{||x_i-v_j||}{||x_i-v_k||})^{\frac{2}{m-1}}}$$
这个式子表示了数据点 $x_i$ 对聚类中心 $v_j$ 的隶属度。
求解 $\dfrac{\partial J}{\partial v_j}=0$,可以得到:
$$v_j=\frac{\sum_{i=1}^n u_{ij}^m x_i}{\sum_{i=1}^n u_{ij}^m}$$
这个式子表示了聚类中心 $v_j$ 的位置。
最后,我们要满足 $\dfrac{\partial J}{\partial \beta_i}=0$,即:
$$\sum_{j=1}^c u_{ij}-1=0$$
这个式子表示了每个数据点 $x_i$ 的隶属度之和必须等于 $1$。
综上所述,拉格朗日乘子法推导出的模糊C均值聚类算法如下:
1. 初始化聚类中心 $V=[v_j]_{c\times d}$;
2. 计算每个数据点 $x_i$ 对于每个聚类中心 $v_j$ 的隶属度 $u_{ij}$;
3. 计算每个聚类中心 $v_j$ 的位置 $v_j$;
4. 检查每个数据点 $x_i$ 的隶属度之和是否等于 $1$,如果不等于 $1$,则重新计算隶属度;
5. 重复步骤 2-4,直到聚类中心不再变化或达到最大迭代次数。
阅读全文