人工智能自动组方实习笔记3—FCM模糊C聚类算法

本文记录的是在人工智能自动组方实习中前期学习过的一篇论文中提到的一种聚类算法及改进版本的NFAFCM算法(FA算法详见萤火虫算法),虽然最后没有使用这个算法,但我个人认为这种以簇为中心存在隶属度模糊分类方法在文本处理中有很多的应用场景,则将其整理记录下来。有如果有哪位小伙伴在做相关内容,可以发邮件联系([email protected]
以下为该项目的系列文章
工作记录
萤火虫算法
FCM模糊C聚类
爬虫及python代码
数据预处理
中医分类及python代码
数据预处理python代码
基于字典的最大正向匹配
基于欧式距离的方剂推荐
基于方剂相似性的方剂推荐
GitHub地址

#FCM模糊C聚类算法
##目标函数
对于给定的数据集 X = { x 1 , x 2 . . . x n } X=\{ x_1,x_2...x_n\} X={x1,x2...xn},其中 x i x_i xi是包含d个属性的数据元素 1 ≤ i ≤ n 1\leq i \leq n 1in,聚类的目的是将n个对象划分为以 V = ( V 1 , V 2 . . . V n ) V= (V_1,V_2...V_n) V=(V1,V2...Vn)为聚类中心(聚类中心为实际存在的对象)的聚类簇,簇个数为m。 u i j u_{ij} uij为数据 x i x_i xi隶属于以 v j v_j vj为中心的类簇的隶属度每个数据对象并不是“完全属于”一个类簇,而是以一个概率属于一个类簇,对于每个个体而言隶属度概率和为1,则对于模糊聚类算法的目标函数可以表示为:
m i n    J ( U , V ) = ∑ i = 1 n ∑ j = 1 m u i j C ∣ ∣ x i − x j ∣ ∣ 2 2 min \; J(U,V)=\sum_{i =1}^n\sum_{j=1}^mu_{ij}^C||x_i-x_j||_2^2 minJ(U,V)=i=1nj=1muijCxixj22
s . t .    ∑ j = 1 m u i j = 1 s.t.\;\sum_{j=1}^m u_{ij}=1 s.t.j=1muij=1
其中对于每个数据对象 x i   i = 1 , 2 , . . . n x_i \ i=1,2,...n xi i=1,2,...n对于每个类簇 V   j = 1 , 2... m V\ j =1,2...m V j=1,2...m都有自己的隶属度,则 U = u i j U= u_{ij} U=uij为隶属度矩阵,C为模糊权重系数用来控制模糊程度(我的个人理解是这个隶属度有多模糊)一般 C ≥ 1 C\geq1 C1,对于目标函数的优化问题根据约束条件,利用Lagrange数乘法,就可以得到 u i j 和 v j u_{ij}和v_j uijvj
u i j = 1 ∑ k = 1 m [ ∣ ∣ x i − v j ∣ ∣ ∣ ∣ x i − v k ∣ ∣ ] 2 ( c − 1 ) u_{ij}={1 \over \sum_{k=1}^m \left[||x_i-v_j|| \over ||x_i -v_k||\right]^{2\over(c-1)}} uij=k=1m[xivkxivj](c1)21
v j = ∑ i = 1 n u i j C x i ∑ i = 1 n u i j C v_j ={ \sum_{i=1}^n u_{ij}^C x_i\over{\sum_{i=1}^nu_{ij}^C}} vj=i=1nuijCi=1nuijCxi
FCM算法求出使目标函数 J ( U , V ) J(U,V) J(U,V),达到最小值。
##算法迭代

  1. 初始化参数,设置聚类数m,模糊系数C,初始化聚类中心V(FCM对于初始化的聚类中心比较敏感,最好不要随机设置,而是先验的找到差不多的点)
  2. 计算每个数据对象的隶属度
  3. 重新计算聚类中心
  4. 如果得到所需精度或者达到最大迭代代数就终止,输出隶属度矩阵和聚类中心,否则转第2步

#基于FA算法的NFAFCM模糊聚类算法
利用FA算法对FCM算法进行改进,寻找聚类中心,然后根据得到的聚类中心进行模糊聚类
##萤火虫亮度
将聚类中心向量 V = ( v 1 , v 2 … v c V=(v1,v_2 \ldots v_c V=v1,v2vc作为一个萤火虫,其中 v i v_i vi表示第i 个类簇中心,则随机出现一些萤火虫,每个萤火虫对应一个FCM的解,目的就是找到萤火虫中哪只更亮则也就是哪种聚类中心更加满足FCM算法。
则萤火虫的亮度函数可以表示为
I ( V ) = 1 ∑ i = 1 n ∑ j = 1 m u i j C ∣ ∣ x i − x j ∣ ∣ 2 2 + 1 I(V) ={1\over {\sum_{i =1}^n\sum_{j=1}^mu_{ij}^C||x_i-}x_j||_2^2+1} I(V)=i=1nj=1muijCxixj22+11
其中 x i x_i xi为数据集中第i个数据对象。
##算法迭代

  1. 初始化参数,设置萤火虫数目N(萤火虫及聚类中心向量),并初始化萤火,最大吸引度,吸收因子,聚类个数,最大迭代代数,具体参数意义详见萤火虫算法
  2. 根据每只萤火虫,计算隶属矩阵,根据亮度函数计算每只萤火虫的亮度
  3. 对于每个萤火虫向在自己感知范围内最合适的萤火虫移动
  4. 重新计算每只萤火虫的位置,并使最亮的萤火虫随机移动
  5. 如果达到最大迭代代数或者达到要求精度则迭代结束,否则转到第2步

你可能感兴趣的:(人工智能自动组方)