聚类——FCM的matlab程序

在聚类——FCM文章中已介绍了FCM算法的理论知识,现在用matlab进行实现。

1.matlab程序

FCM_main.m

function [ave_acc_FCM,max_acc_FCM,min_acc_FCM,ave_iter_FCM,ave_run_time]=FCM_main(X,real_label,K)

%输入K:聚的类,max_iter是最大迭代次数

%输出ave_acc_FCM:迭代max_iter次之后的平均准确度

t0=cputime;

s=0;

s_1=0;

max_iter=20; %重复max_iter次

accuracy=zeros(max_iter,1);

iter_FCM_t=zeros(max_iter,1);

%对data做最大-最小归一化处理

% [data_num,~]=size(data);

% X=(data-ones(data_num,1)*min(data))./(ones(data_num,1)*(max(data)-min(data)));

for i=1:max_iter

[label_1,~,iter_FCM]=My_FCM(X,K);

iter_FCM_t(i)=iter_FCM;

accuracy(i)=succeed(real_label,K,label_1);

s=s+accuracy(i);

s_1=s_1+iter_FCM_t(i);

fprintf('第 %2d 次,FCM的迭代次数为:%2d,准确度为:%.8f\n', i, iter_FCM_t(i), accuracy(i));

end

ave_iter_FCM=s_1/max_iter;

ave_acc_FCM=s/max_iter;

max_acc_FCM=max(accuracy);

min_acc_FCM=min(accuracy);

run_time=cputime-t0;

ave_run_time=run_time/max_iter;

My_FCM.m

function [label_1,para_miu_new,iter]=My_FCM(X,K)

%输入K:聚类数

%输出:label_1:聚的类, para_miu_new:模糊聚类中心μ,responsivity:模糊隶属度

format long

eps=1e-4; %定义迭代终止条件的eps

alpha=2; %模糊加权指数,[1,+无穷)

T=100; %最大迭代次数

fitness=zeros(T,1);

[X_num,X_dim]=size(X);

count=zeros(X_num,1); %统计distant中每一行为0的个数

%----------------------------------------------------------------------------------------------------

%随机初始化K个聚类中心

rand_array=randperm(X_num); %产生1~X_num之间整数的随机排列

para_miu=X(rand_array(1:K),:); %随机排列取前K个数,在X矩阵中取这K行作为初始聚类中心

responsivity=zeros(X_num,K);

R_up=zeros(X_num,K);

% ----------------------------------------------------------------------------------------------------

% FCM算法

for t=1:T

%欧氏距离,计算(X-para_miu)^2=X^2+para_miu^2-2*para_miu*X',矩阵大小为X_num*K

distant=(sum(X.*X,2))*ones(1,K)+ones(X_num,1)*(sum(para_miu.*para_miu,2))'-2*X*para_miu';

%更新隶属度矩阵X_num*K

for i=1:X_num

count(i)=sum(distant(i,:)==0);

if count(i)>0

for k=1:K

if distant(i,k)==0

responsivity(i,k)=1./count(i);

else

responsivity(i,k)=0;

end

end

else

R_up(i,:)=distant(i,:).^(-1/(alpha-1)); %隶属度矩阵的分子部分

responsivity(i,:)= R_up(i,:)./sum( R_up(i,:),2);

end

end

%目标函数值

fitness(t)=sum(sum(distant.*(responsivity.^(alpha))));

%更新聚类中心K*X_dim

miu_up=(responsivity'.^(alpha))*X; %μ的分子部分

para_miu=miu_up./((sum(responsivity.^(alpha)))'*ones(1,X_dim));

if t>1

if abs(fitness(t)-fitness(t-1))

break;

end

end

end

para_miu_new=para_miu;

iter=t; %实际迭代次数

[~,label_1]=max(responsivity,[],2);

succeed.m

function accuracy=succeed(real_label,K,id)

%输入K:聚的类,id:训练后的聚类结果,N*1的矩阵

N=size(id,1); %样本个数

p=perms(1:K); %全排列矩阵

p_col=size(p,1); %全排列的行数

new_label=zeros(N,p_col); %聚类结果的所有可能取值,N*p_col

num=zeros(1,p_col); %与真实聚类结果一样的个数

%将训练结果全排列为N*p_col的矩阵,每一列为一种可能性

for i=1:N

for j=1:p_col

for k=1:K

if id(i)==k

new_label(i,j)=p(j,k); %iris数据库,1 2 3

end

end

end

end

%与真实结果比对,计算精确度

for j=1:p_col

for i=1:N

if new_label(i,j)==real_label(i)

num(j)=num(j)+1;

end

end

end

accuracy=max(num)/N;

2.在UCI数据库的iris上的运行结果

>> data_load=dlmread('E:\My matlab\database\iris.data');data=data_load(:,1:4);real_label=data_load(:,5);

>> [ave_acc_FCM,max_acc_FCM,min_acc_FCM,ave_iter_FCM,ave_run_time]=FCM_main(data,real_label,3)

第 1 次,FCM的迭代次数为:33,准确度为:0.89333333

第 2 次,FCM的迭代次数为:41,准确度为:0.89333333

第 3 次,FCM的迭代次数为:14,准确度为:0.89333333

第 4 次,FCM的迭代次数为:13,准确度为:0.89333333

第 5 次,FCM的迭代次数为:16,准确度为:0.89333333

第 6 次,FCM的迭代次数为:10,准确度为:0.89333333

第 7 次,FCM的迭代次数为:21,准确度为:0.89333333

第 8 次,FCM的迭代次数为:46,准确度为:0.89333333

第 9 次,FCM的迭代次数为:19,准确度为:0.89333333

第 10 次,FCM的迭代次数为:18,准确度为:0.89333333

第 11 次,FCM的迭代次数为:17,准确度为:0.89333333

第 12 次,FCM的迭代次数为:38,准确度为:0.89333333

第 13 次,FCM的迭代次数为:37,准确度为:0.89333333

第 14 次,FCM的迭代次数为:11,准确度为:0.89333333

第 15 次,FCM的迭代次数为:22,准确度为:0.89333333

第 16 次,FCM的迭代次数为:17,准确度为:0.89333333

第 17 次,FCM的迭代次数为:13,准确度为:0.89333333

第 18 次,FCM的迭代次数为: 8,准确度为:0.89333333

第 19 次,FCM的迭代次数为:13,准确度为:0.89333333

第 20 次,FCM的迭代次数为:20,准确度为:0.89333333

ave_acc_FCM =

0.893333333333333

max_acc_FCM =

0.893333333333333

min_acc_FCM =

0.893333333333333

ave_iter_FCM =

21.350000000000001

ave_run_time =

0.035937500000000

sum idx i matlab,聚类——FCM的matlab程序相关推荐

  1. 模糊聚类FCM的MATLAB实现

    FCM的原理在之前的博文中写过.现在按照它的算法流程,用MATLAB实现.共包括三个函数(myfcm.m, mydist.m, myplot.m) 测试数据集用的是鸢尾花(iris)数据集.下载地址  ...

  2. matlab 聚类 源程序,聚类——KFCM的matlab程序

    聚类--KFCM的matlab程序 在聚类--KFCM文章中已介绍了KFCM-F算法的理论知识,现在用matlab进行实现,下面这个例子是用FCM初始化聚类中心,也可以随机初始化聚类中心. 1.mat ...

  3. 基于遗传模拟退火算法的模糊C-均值聚类算法(SAGAFCM)—MATLAB实现

    本文的代码将放在最后,需要的小伙伴们可以免费获取哦!!! 文章目录 一.模糊C-均值聚类(FCM) 1.介绍 1).算法初步介绍 2)算法步骤 2.MATLAB实现 1).问题描述 2).算法实现 二 ...

  4. matlab中CH指标聚类评价指标,MATLAB聚类有效性评价指标(外部)

    MATLAB聚类有效性评价指标(外部) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 更多内容,请看标签:MATLAB.聚类 前提:数据的真实标签已知 ...

  5. MATLAB聚类有效性评价指标(外部)

    MATLAB聚类有效性评价指标(外部) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 更多内容,请看标签:MATLAB.聚类 前提:数据的真实标签已知 ...

  6. matlab中的聚类算法,kmeans聚类算法matlab matlab 聚类算法silhouette

    怎样用matlab实现多维K-means聚类算法小编觉得一个好的周末应该是这样的:睡到中午醒来,在床上躺着玩两个小时手机,起床随便吃点东西,下午去超市买一大堆零食,五六点的时候去约小伙伴们吃火锅烧烤, ...

  7. K均值聚类算法的MATLAB实现

    K均值聚类算法的MATLAB实现 1.K-均值聚类法的概述 之前在参加数学建模的过程中用到过这种聚类方法,但是当时只是简单知道了在matlab中如何调用工具箱进行聚类,并不是特别清楚它的原理.最近因为 ...

  8. matlab 实现分层聚类算法,[转载]MATLAB层次聚类分析法(转)

    层次聚类是基于距离的聚类方法,MATLAB中通过pdist.linkage.dendrogram.cluster等函数来完成.层次聚类的过程可以分这么几步: (1) 确定对象(实际上就是数据集中的每个 ...

  9. matlab编程选择语句,matlab编程控制语句

    matlab编程控制语句 M文件 程序控制结构 函数文件 程序举例 程序调试,2.1 M文件 2.1.1 M文件概述 用MATLAB语言编写的程序,称为M文件.M文件可以根据调用方式的不同分为两类:命 ...

最新文章

  1. 达观杯_构建模型(二)逻辑回归
  2. 一个硬中断的完整处理过程【转】
  3. http://blog.51cto.com/wutengfei/1917288
  4. 为什么Android项目mainactivity中有一个变量R_【Android开发入门教程】二.Android应用程序结构分析!...
  5. shell脚本中的命令替换
  6. Facebook 宣布开源无线设备 打造全新5G世界
  7. Linux下jetty报java.lang.OutOfMemoryError: PermGen space及Jetty内存配置调优解决方案
  8. php中不让数组初始化,javascript中数组与php数组初始化差异
  9. [label][paypal] Paypal 支付页面的语言显示问题
  10. 获取datagrid中编辑列combobox的value值与text值
  11. 增强for循环(foreach解析)—带冒号的for循环
  12. OSChina 周三乱弹 ——祖传的程序员?????
  13. html旋转 缩放 移动,CSS3旋转缩放移动倾斜等效果——transform
  14. Python3 根据关键字爬取百度图片
  15. Unity线性空间UI制作方面总结
  16. CentOS7 DM-Multipath+HUAWEI OceanStor存储多路径配置
  17. 如何用python群发工资条
  18. 攻防世界pwn新手区整理
  19. 力学专业做cae需要学c语言吗,CAE工程师是需要掌握力学知识到何种程度?
  20. 扫盲-----addEventlistener()方法,事件监听(一)

热门文章

  1. python方差齐性检验_【Python】统计科学之方差齐性检验
  2. Android imagebutton美化+edittext美化 实现登录界面美化
  3. 爬虫速成(四):数据存储
  4. 请使用netty框架实现高效稳定的websocket通信
  5. ip route常用语法
  6. python爬取手机app图片_python 手机app数据爬取
  7. mysql数据备份管理
  8. java 之 xml 解析工具
  9. js 设置window.open打开新窗口的title
  10. python中的函数及面向对象的知识点