模糊C均值(FCM)算法更新公式推导

embedded/2024/11/14 11:52:17/

模糊C均值(FCM)算法更新公式推导

目标函数

FCM的目标函数为:

J m = ∑ i = 1 n ∑ j = 1 k u i j m ∥ x i − c j ∥ 2 J_m = \sum_{i=1}^n \sum_{j=1}^k u_{ij}^m \|x_i - c_j\|^2 Jm=i=1nj=1kuijmxicj2

其中:

  • x i x_i xi 是数据点, i = 1 , 2 , … , n i = 1, 2, \ldots, n i=1,2,,n
  • c j c_j cj 是第 j j j 个簇的中心, j = 1 , 2 , … , k j = 1, 2, \ldots, k j=1,2,,k
  • u i j u_{ij} uij 是数据点 x i x_i xi 属于第 j j j 个簇的隶属度。
  • m m m 是模糊度参数,通常 m > 1 m > 1 m>1

更新公式推导过程

1. 定义目标函数

J m = ∑ i = 1 n ∑ j = 1 k u i j m ∥ x i − c j ∥ 2 J_m = \sum_{i=1}^n \sum_{j=1}^k u_{ij}^m \|x_i - c_j\|^2 Jm=i=1nj=1kuijmxicj2

2. 引入约束条件

∑ j = 1 k u i j = 1 ∀ i \sum_{j=1}^k u_{ij} = 1 \quad \forall i j=1kuij=1i

使用拉格朗日乘数法,引入拉格朗日乘子 λ i \lambda_i λi,构造拉格朗日函数:

L = ∑ i = 1 n ∑ j = 1 k u i j m ∥ x i − c j ∥ 2 + ∑ i = 1 n λ i ( ∑ j = 1 k u i j − 1 ) \mathcal{L} = \sum_{i=1}^n \sum_{j=1}^k u_{ij}^m \|x_i - c_j\|^2 + \sum_{i=1}^n \lambda_i \left( \sum_{j=1}^k u_{ij} - 1 \right) L=i=1nj=1kuijmxicj2+i=1nλi(j=1kuij1)

3. 对 u i j u_{ij} uij 求偏导数并设为零

对拉格朗日函数 L \mathcal{L} L u i j u_{ij} uij 的偏导数并设为零:

∂ L ∂ u i j = m u i j m − 1 ∥ x i − c j ∥ 2 + λ i = 0 \frac{\partial \mathcal{L}}{\partial u_{ij}} = m u_{ij}^{m-1} \|x_i - c_j\|^2 + \lambda_i = 0 uijL=muijm1xicj2+λi=0

解这个方程得到:

u i j m − 1 = − λ i m ∥ x i − c j ∥ 2 u_{ij}^{m-1} = -\frac{\lambda_i}{m \|x_i - c_j\|^2} uijm1=mxicj2λi

为了保证 (u_{ij}) 非负,设 λ i = − m ζ \lambda_i = -m\zeta λi=mζ,则:

u i j m − 1 = ζ ∥ x i − c j ∥ 2 u_{ij}^{m-1} = \frac{\zeta}{\|x_i - c_j\|^2} uijm1=xicj2ζ
即:

u i j = ( ζ ∥ x i − c j ∥ 2 ) 1 m − 1 u_{ij} = \left( \frac{\zeta}{\|x_i - c_j\|^2} \right)^{\frac{1}{m-1}} uij=(xicj2ζ)m11

4. 求解拉格朗日乘子 ζ \zeta ζ

利用约束条件 ∑ j = 1 k u i j = 1 \sum_{j=1}^k u_{ij} = 1 j=1kuij=1

∑ j = 1 k ( ζ ∥ x i − c j ∥ 2 ) 1 m − 1 = 1 \sum_{j=1}^k \left( \frac{\zeta}{\|x_i - c_j\|^2} \right)^{\frac{1}{m-1}} = 1 j=1k(xicj2ζ)m11=1

解这个方程得到:

ζ = ( ∑ j = 1 k ( 1 ∥ x i − c j ∥ 2 ) 1 m − 1 ) 1 − m \zeta = \left( \sum_{j=1}^k \left( \frac{1}{\|x_i - c_j\|^2} \right)^{\frac{1}{m-1}} \right)^{1-m} ζ=(j=1k(xicj21)m11)1m

代入 u i j u_{ij} uij 的表达式,得到隶属度更新公式:

u i j = 1 ∑ l = 1 k ( ∥ x i − c j ∥ ∥ x i − c l ∥ ) 2 m − 1 u_{ij} = \frac{1}{\sum_{l=1}^k \left( \frac{\|x_i - c_j\|}{\|x_i - c_l\|} \right)^{\frac{2}{m-1}}} uij=l=1k(xiclxicj)m121

5. 对簇中心 c j c_j cj 求偏导数并设为零

对目标函数 J m J_m Jm c j c_j cj 求偏导数并设为零:

∂ J m ∂ c j = ∑ i = 1 n u i j m ( c j − x i ) = 0 \frac{\partial J_m}{\partial c_j} = \sum_{i=1}^n u_{ij}^m (c_j - x_i) = 0 cjJm=i=1nuijm(cjxi)=0

解这个方程得到:

∑ i = 1 n u i j m c j = ∑ i = 1 n u i j m x i \sum_{i=1}^n u_{ij}^m c_j = \sum_{i=1}^n u_{ij}^m x_i i=1nuijmcj=i=1nuijmxi

c j = ∑ i = 1 n u i j m x i ∑ i = 1 n u i j m c_j = \frac{\sum_{i=1}^n u_{ij}^m x_i}{\sum_{i=1}^n u_{ij}^m} cj=i=1nuijmi=1nuijmxi

总结

通过上述推导过程,我们得到了FCM算法的更新公式:

  • 隶属度更新公式:

u i j = 1 ∑ l = 1 k ( ∥ x i − c j ∥ ∥ x i − c l ∥ ) 2 m − 1 u_{ij} = \frac{1}{\sum_{l=1}^k \left(\frac{\|x_i - c_j\|}{\|x_i - c_l\|}\right)^{\frac{2}{m-1}}} uij=l=1k(xiclxicj)m121

  • 簇中心更新公式:

c j = ∑ i = 1 n u i j m x i ∑ i = 1 n u i j m c_j = \frac{\sum_{i=1}^n u_{ij}^m x_i}{\sum_{i=1}^n u_{ij}^m} cj=i=1nuijmi=1nuijmxi

这些公式在每次迭代中交替更新,直到目标函数收敛。


http://www.ppmy.cn/embedded/46088.html

相关文章

Rustdesk 自建服务器教程

一、环境 阿里云轻量服务器、debian11 系统 二、服务端搭建 2.1、开放防火墙指定端口 TCP(21115, 21116, 21117, 21118, 21119)UDP(21116) 2.2、安装 rustdesk 服务器文件 在 github 下载页https://github.com/rustdesk/rustdesk-server/releases/,下载 rustde…

openresty使用异步方式调用api接口

最近做了一个需求,对供应商报表系统导出文件进行RMS加密,同时还需要记录用户下载日志,该需求主要在openresty实现。RMS加密是核心功能,日志是附加功能,如果将2者同步处理,记录日志会影响到用户导出文件&…

如果jupyter notebook不能实现网页自动跳转,参考下面的链接

一招搞定Jupyter-notebook命令行打开之后不能自动跳转浏览器_一招搞定jupter notebook命令行打开之后-CSDN博客

JVM的相关知识

一.JVM内存区域划分(JVM是一个Java进程) 一个进程运行过程中就需要重操作系统这里申请到一些内存资源 JVM也是如此,搞一大块内存,供Java代码执行时使用 JVM把这一大块内存又划分成不同的区域,分别代表不同的用途 各个…

【MyBatis】MyBatis操作数据库(二):动态SQL、#{}与${}的区别

目录 一、 动态SQL1.1 \<if>标签1.2 \<trim>标签1.3 \<where>标签1.4 \<set>标签1.5 \<foreach>标签1.6 \<include>标签 二、 #{}与${}的区别2.1 #{}是预编译sql&#xff0c;${}是即时sql2.2 SQL注入2.3 #{}性能高于${}2.4 ${}用于排序功能…

【Linux】中常见的重要指令(下)以及重要的几个热键

目录 一、时间相关的指令date 1.时间戳 二、Cal指令 三、find指令 1.whereis 2.which 四、grep指令 五、zip和unzip指令 六、tar指令 七、bc指令 八、重要的几个热键[Tab]&#xff0c;[ctrl]-c&#xff0c;[ctrl]-d 一、时间相关的指令date date 指定格式显示时间&…

python情感分析库-snownlp

内容目录 一、words方法二、sentences方法三、han方法四、pinyin方法五、sentiments方法六、tags方法七、tf方法和idf方法八、summary方法九、keywords方法 SnowNLP 是一个简易的 Python 库&#xff0c;主要用于处理中文文本数据&#xff0c;提供了多种实用的功能。 源码中提供…

.Net Core 中间件与过滤器

过滤器这个是.Net MVC旧有的功能&#xff0c;中间件这个概念是新出的&#xff0c; ASP.NET Core只是完成了HTTP请求调度、报文解析等必要的工作&#xff0c;像检查用户身份、设置缓存报文头等操作都是在中间件中完成&#xff0c;中间件就是ASP.NET Core的一个组件&#xff0c;…