%%***************************************************************************
%FCM
%%***************************************************************************
clear all;
close all;
% dataset=input('input dataset:','s');
% datafile=['data\',dataset,'_data.mat'];
% load(datafile);
% Informationfile=['data\',dataset,'_Information.mat'];
% load(Informationfile);
% data_num=Information(1);
% data_dim=Information(2);
% center_num=Information(3);
% idfile=['data\',dataset,'_id.mat'];
% load(idfile);
% id_label=(min(id):max(id)); %类标号。默认类标号为连续整数
dataset=input('dataset:','s');;
data=importdata([dataset,'_data.txt']);
id=importdata([dataset,'_id.txt']);
[data_num,data_dim]=size(data);
center_num=max(id)-min(id)+1;
id_label=(min(id):max(id)); %类标号。默认类标号为连续整数。
threshold=0.000001;
alpha=input('input alpha:');
%输出文件
resultfile=['result\',dataset,'_FCM_result','.txt'];
fp_result=fopen(resultfile,'wt');
%for alpha=1.015:0.005:1.1
data=bsxfun(@times,bsxfun(@minus,data,min(min(data))),(max(max(data))-min(min(data))).^(-1))*1-0;
Loop=100;%每种参数组合运行5次
C=zeros(center_num,data_dim);
CS = zeros(Loop, center_num, data_dim);
for loop=1:Loop
U=zeros(data_num,center_num);
%初始化中心
for i=1:center_num
temp=find(id==id_label(i));
location=temp(ceil(rand(1,1)*length(temp)));
C(i,:)=data(location,:);
end
%初始化中心
% for i=1:center_num
% temp=find(id==id_label(i));
% C_real(i,:)=sum(RFFreal(temp,:))/length(temp);
% C_imag(i,:)=sum(RFFimag(temp,:))/length(temp);
% end
iteration=0;
objfunc_old=0;%记录上一次的目标函数
tic;
%进行FCM
while(1)
%计算U
dis=zeros(center_num,data_num);
for c=1:center_num
dis(c,:)=(sum((ones(data_num,1)*C(c,:)-data).^2,2))';
end
U=(1./(dis.^(1/(alpha-1)).*(ones(center_num,1)*sum(dis.^(-1/(alpha-1))))))';
U(dis'==0)=1;
U(isnan(dis'==0))=0;
%计算objective function
objfunc=0;
for c=1:center_num
objfunc=objfunc+dis(c,:)*(U(:,c).^alpha);
end%c
%判断停止条件
if(abs(objfunc-objfunc_old)<threshold)
break;
end
objfunc_old=objfunc;
% fprintf('alpha=%f,loop=%d,iteration=%d\n',alpha,loop,iteration);
iteration=iteration+1;
%更新中心
%for k=1:center_num
Um=U.^alpha;
C=(Um')*data./(ones(data_dim,1)*sum(Um))';
%end%k
end%while
CS(loop, :, :) = C;
%cpu时间
CPUtime=toc;
%U转换为id形式
id_U=zeros(data_num,1);
for i=1:data_num
location=find(U(i,:)==max(U(i,:)))-1;
id_U(i)=location(1);
end
%计算正确率
rightpoints=(id_U==id);
accuracy=sum(rightpoints)/data_num;
%计算NMI ARI
NMI=Function_NMI(id_U,id);
fprintf('ACU=%f\tNMI=%f\n',accuracy,NMI);
%聚类结果输出到txt
fprintf(fp_result,'alpha=%f\t',alpha);
fprintf(fp_result,'loop=%f\t',loop);
fprintf(fp_result,'accuracy=%f\t',accuracy);
fprintf(fp_result,'NMI=%f\t',NMI);
fprintf(fp_result,'iteration=%f\t',iteration);
fprintf(fp_result,'cputime=%f\n',CPUtime);
end%loop
%end%alpha
save(['result\',dataset,'_FCM_Center','.mat'], 'CS');
fclose(fp_result);
FCM_FAST.zip_MATLAB 聚类_分割_机器学习 分割_聚类_聚类 图像
版权申诉
27 浏览量
2022-07-15
21:26:46
上传
评论
收藏 1KB ZIP 举报
我虽横行却不霸道
- 粉丝: 72
- 资源: 1万+
最新资源
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0