FCM聚类算法
来源:互联网 发布:软件详细设计模板 java 编辑:程序博客网 时间:2024/05/21 22:55
之前提到了K均值算法,多数讨论认为K均值与硬C均值(HCM)算法本质相同。在HCM的基础上加入了对聚类簇的模糊划分,引入了隶属度来提升算法性能。
import copy,math,random,time,sysimport matplotlib.pyplot as pltimport matplotlib.animation as animationimport decimalMAX = 10000.0#构建初始理数矩阵Epsilon = 0.000001#停止条件def randomise(data):#随机打乱数据,同时返回原数据顺序 order = list(range(len(data))) random.shuffle(oder)#记录原始数据顺序 new_data = [[]for i in range(len(data))] for index in range(len(order)): new_data[index] = data[order[index]] return new_data,orderdef de_randomise(data,order):#恢复被打乱的数据 new_data = [[]for i in range(len(data))] for index in range(len(order)): new_data[order[index]] = data[index] return new_datadef print_matrix(lists):#打印矩阵 for i in range(len(list)): print lists[i] def init_U(data,clu_num):#随机初始化隶属矩阵 global MAX U = [] for i in range(len(data)): current = [] random_sum = 0.0 for j in range(clu_num): a = random.randint(1,int(MAX)) current.append(a) random_sum += a for j in range(clu_num): current[j] = current[j]/random_sum#归一化处理 U.append(current) return U def distance(v1,v2):#两点距离公式 if len(v1)!=len(v2): return -1 return sqrt(sum(power(v2-v1,2)))def end_iterate(U,U_old):#隶属矩阵变化过小时停止迭代 global Epsilon for i in range(len(U)): for j in range(len(U[0])): if abs(U[i][j]-U_old[i][j])>Epsilon: return False return Truedef normalise_U(U):#将U规范化,找出最可能的簇 for i in range(len(U)): max_u = max(U[i]) for j in range(len(U[0])): if U[i][j]!=max_u: U[i][j]=0 else: U[i][j]=1 return Udef fuzz_c_mean(data,clu_num,m,max_iterate):#FCM算法 U = init_U(data,clu_num) current_iterate = 0 while 1: current_iterate += 1 U_old = copy.deepcopy C = [] for i in range(clu_num):#更新聚类中心 current_clu = [] for j in range(len(data[0])): sum_num = 0.0 sum_dum = 0.0 for k in range(len(data)): sum_num += (u[k][i]**m)*data[k][j] sum_dum += (u[k][i]**m)#带入Pj公式 current_clu.append(sum_num/sum_dum)#第j列聚类中心 C.append(current_clu)#第i簇聚类中心 distance_mat = []#生成距离矩阵 for i in range (len(data)): current = [] for j in range(clu_num): current.append(distance(data[i],C[j])) distance_mat.append(current) for i in range(clu_num):#更新U for j in range(len(data)): for k in range(clu_num): a += (distance_mat[j][i]/distance_mat[j][k])**(2/(m-1)) U[j][i] = 1/a if end_iterate(U,U_old):#判断是否迭代有效 print 'mission complete' break elif current_iterate>max_iterate:#判断是否超出迭代次数 print 'iterate overflow' break U = normalise_U(U)#标准化U后返回U return U
阅读全文
0 0
- FCM聚类算法
- FCM聚类算法
- Fuzzy c-means (FCM)聚类算法
- FCM 模糊C均值聚类算法
- Fuzzy c-means (FCM)聚类算法
- Fuzzy c-means (FCM)聚类算法
- FCM聚类算法(模糊C均值算法)
- 模糊C均值聚类算法(FCM) --…
- 聚类之详解FCM算法原理及应用
- FCM算法
- FCM 算法
- 模糊聚类算法(FCM)和硬聚类算法(HCM)的VB6.0实现及其应用
- 模糊聚类算法(FCM)和硬聚类算法(HCM)的VB6.0实现及其应用
- 模糊聚类算法(FCM)和硬聚类算法(HCM)的VB6.0实现及
- 模糊聚类算法(FCM)和硬聚类算法(HCM)的VB6.0实现及其应用
- 聚类算法概述(k-Means++/FCM/凝聚层次聚类/DBSCAN)
- 颜色迁移之四——模糊聚类(FCM)算法
- 基于数据场和云模型的FCM聚类算法MATLAB源代码
- tensorflow学习(一):Reduction以及tesorflow数学操作函数查找地址
- GNSS接收机通道数
- C++下载指定Url网络地址上的文件-Windows Api
- Wannafly模拟赛3-F 监视任务(贪心+线段树区间更新)
- Python快速笔记
- FCM聚类算法
- [Spring Cloud] Eureka 的自我保护模式及相关问题
- js 递归调用无返回值的问题
- 修改tomcat默认的编码方式
- Kth Largest Element in an Array解题心得
- 第一次作业
- bfs和dfs
- linux查看防火墙,关闭防火墙,启动防火墙,防火墙定义
- JPA动态操作