%本程序实现了把协同模糊聚类算法和G-K算法相结合,构建T-S模型

%并用该模型对数据进行测试

%输入数据:

%ytrain:训练数据的实际输出,是一个列向量

%xtrain:训练数据矩阵,分为两组,每组的每行代表一个特征.每组特征不同

%ytest:测试数据的实际输出,是一组列向量

%xtest:测试数据矩阵,其每行代表一个特征,并且与训练数据矩阵中的第一组相同

%输出数据:

%trainRMSE:模型对训练数据的均方根误差

%testRMSE:模型对测试数据的均方根误差

%最后输出模型对测试数据的拟合图

%说明:

%由于交叉验证的原因,对不用的测试数据分组不同,所以n也有不同

clear all

fid=fopen('MPG.txt','r');

original=fscanf(fid,'%f',[8,392]);

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

%用于训练的数据

ytrain=original(1,1:2:392)';

xtrain(:,:,1)=original([2 5 7],1:2:392);

xtrain(:,:,2)=original([3 4 5],1:2:392);

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

%用于测试的数据

ytest=original(1,2:2:262)';

xtest=original([2 5 7],2:2:262);

status=fclose(fid);

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

%初始化变量

c=3;                             %规则数

r=0.01;

n=168;

dis=1;

ntest=size(xtest,2)

datasize=size(xtrain,1);

RMSESUM=0;

coll=0.2;                        %协同系数

L=7                              %用于交叉验证方法,将测试数据分组数

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

%初始化矩阵

v=zeros(c,datasize,2);           %原形矩阵

sigma=zeros(c,datasize,2);       %协方差矩阵

d=zeros(c,n,2);                  %距离矩阵

u=rand(c,n,2);                   %模糊划分矩阵

p=zeros(1,c,2);                  %规则概率

w=ones(c,2);                     %权值

first=ones(n,1);

[center,u(:,:,1),objFcn] = fcm(xtrain(:,1:n,1)',c);        %模糊划分矩阵的初始化

[center,u(:,:,2),objFcn] = fcm(xtrain(:,1:n,2)',c);        %模糊划分矩阵的初始化

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

%交叉验证,分七组,其中六组训练,一组测试

for p=1:L

AA=xtrain;BB=ytrain;

pr=(p-1)*28+1;

for pp=1:28

BB(pr)=[];

AA(:,pr,:)=[];

end

data=AA;

y=BB;

validationx=xtrain(:,(pr:pr+27),1);

validationy=ytrain(pr:pr+27);

fi(:,:,1)=data(:,:,1)';

fi(:,:,2)=data(:,:,2)';

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

%计算前件参数--原形矩阵v

while(dis>r)

oldu=u;

for i=1:c

for j=1:datasize

A(i,j,1)=0;

A(i,j,2)=0;

B(i,1)=0;

B(i,2)=0;

C(i,j,1)=0;

C(i,j,2)=0;

D(i,j,1)=0;

D(i,j,2)=0;

for k=1:n

A(i,j,1)=A(i,j,1)+u(i,k,1)^2*data(j,k,1);

A(i,j,2)=A(i,j,2)+u(i,k,2)^2*data(j,k,2);

B(i,1)=B(i,1)+u(i,k,1)^2;

B(i,2)=B(i,2)+u(i,k,2)^2;

C(i,j,1)=C(i,j,1)+(u(i,k,1)-u(i,k,2))^2*data(j,k,1);

C(i,j,2)=C(i,j,2)+(u(i,k,2)-u(i,k,1))^2*data(j,k,2);

D(i,j,1)=D(i,j,1)+(u(i,k,1)-u(i,k,2))^2;

D(i,j,2)=D(i,j,2)+(u(i,k,2)-u(i,k,1))^2;

end

v(i,j,1)=(A(i,j,1)+coll*C(i,j,1))/(B(i,1)+coll*D(i,1));

v(i,j,2)=(A(i,j,2)+coll*C(i,j,2))/(B(i,2)+coll*D(i,2));

end

end

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

%计算前件参数--sigma

for i=1:c

for j=1:datasize

sumdv1=0;

sumdv2=0;

for k=1:n

sumdv1=sumdv1+u(i,k,1)*(data(j,k,1)-v(i,j,1))^2;

sumdv2=sumdv2+u(i,k,2)*(data(j,k,2)-v(i,j,2))^2;

end

sigma(i,j,1)=sumdv1/sum(u(i,:,1));

sigma(i,j,2)=sumdv2/sum(u(i,:,2));

end

end

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

%计算后件参数--th

for i=1:c

bet1=diag(u(i,:,1));

bet2=diag(u(i,:,2));

th(:,i,1)=inv([fi(:,:,1) first]'*bet1*[fi(:,:,1) first])*[fi(:,:,1) first]'*bet1*y;

th(:,i,2)=pinv([fi(:,:,2) first]'*bet2*[fi(:,:,2) first])*[fi(:,:,2) first]'*bet2*y;

end

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

%计算规则的概率p和权值w

for i=1:c

p(i,1)=sum(u(i,:,1))/n;

p(i,2)=sum(u(i,:,2))/n;

wdown1=1;

wdown2=1;

for j=1:datasize

wdown1=wdown1*(sigma(i,j,1)*2*pi);

wdown2=wdown2*(sigma(i,j,2)*2*pi);

end

if sqrt(wdown1)==0;

w(i,1)=1;

else

w(i,1)=p(i,1)/sqrt(wdown1);

end

if sqrt(wdown2)==0;

w(i,2)=1;

else

w(i,2)=p(i,2)/sqrt(wdown2);

end

end

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

%计算样本到原形距离矩阵d

for i=1:c

for k=1:n

fexp1=1;

fexp2=1;

for j=1:datasize

fexp1=fexp1*exp(-(data(j,k,1)-v(i,j,1))^2/(2*sigma(i,j,1)));

fexp2=fexp2*exp(-(data(j,k,2)-v(i,j,2))^2/(2*sigma(i,j,2)));

end

d(i,k,1)=qz(i,1)*fexp1;

d(i,k,2)=qz(i,2)*fexp2;

end

end

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

%更新模糊划分矩阵u

uu(:,:,1)=coll*u(:,:,1);

uu(:,:,2)=coll*u(:,:,2);

for i=1:c

for a=1:n

if sum(d(:,a,1))<=0

u(i,a,1)=0;

else

u(i,a,1)=(coll*uu(i,a,1))/(coll+1)+(d(i,a,1)/sum(d(:,a,1)))*(1-sum(uu(:,a,1))/(1+coll));

end

if sum(d(:,a,2))<=0

u(i,a,2)=0;

else

u(i,a,2)=(coll*uu(i,a,2))/(coll+1)+(d(i,a,2)/sum(d(:,a,2)))*(1-sum(uu(:,a,2))/(1+coll));

end

end

end

dis=sum(sum(oldu(:,:,1)-u(:,:,1)).^2)/n*c;

dis=sqrt(dis);

end

trainy=testing(validationx,w(:,1)',c,th(:,:,1),sigma(:,:,1),v(:,:,1));          %模型对每组训练数据的输出

TRAINRMSE=sqrt(sum((validationy-trainy').^2)/42);                               %每组训练数据的RMSE

RMSESUM=RMSESUM+TRAINRMSE;                                                      %每组训练数据的RMSE和

end

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

%训练及测试RMSE

trainRMSE=RMSESUM/L

testy=testing(xtest,w(:,1)',c,th(:,:,1),sigma(:,:,1),v(:,:,1));                 %模型对测试数据的输出,参数采用第一组特征子集的参数

testRMSE=sqrt((sum((ytest-testy').^2))/ntest)                                   %测试数据的RMSE

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

%测试的拟合图

put=1:ntest;

plot(put,ytest,'-',put,testy',':')

ylabel('MPG')

xlabel('样本')

h=legend('实际输出','模型输出',2);

模糊聚类划分matlab代码,Matlab协同模糊聚类建模相关推荐

  1. 机器学习之MATLAB代码--MATLAB量子粒子群优化LSTM超参数负荷预测(十三)

    机器学习之MATLAB代码--MATLAB量子粒子群优化LSTM超参数负荷预测(十三) 代码 数据 结果 代码 代码按照下列顺序依次: 1. function result(true_value,pr ...

  2. 数学建模常用方法 | matlab代码 | 二十三种数学建模方法 |2022赛前突击 |模型代码 |比赛比用、简单高效| 分享

    为是赛前突击,所以就不过多的介绍理论知识了,直接上案例,matlab代码 更加详细例题解析: 公众h:露露IT 目录 1.类比法 2.二分法 3.量纲分析法 4.图论法 5.差分法 6.变分法 7.数 ...

  3. 变步长龙格库塔法matlab代码,matlab 龙格库塔法 变步长龙格库塔法.doc

    河北科技大学硕士学位研究生 2012--2013学年第二学期 <Matlab语言及应用>结课论文 学 院: 信息科学与工程学院 专 业: 电路与系统 姓 名: 张利超 学 号: S2012 ...

  4. 变步长龙格库塔法matlab代码,matlab龙格库塔法变步长龙格库塔法.doc

    河北科技大学硕士学位研究生 2012--2013学年第二学期 <Matlab语言及应用>结课论文 学 院:信息科学与工程学院专 业:电路与系统姓 名:张利超学 号:S2012014011 ...

  5. 人工神经网络matlab代码,matlab神经网络30例代码

    如何在matlab中建立多层bp神经网络 当你用newff的时候,里面有一个参数可以控制层数,比如说:P = [0 1 2 3 4 5 6 7 8 9 10];T = [0 1 2 3 4 3 2 1 ...

  6. mcl计算matlab代码,matlab练习程序(马尔可夫聚类MCL)

    本文主要参考: 虽然参考上面两篇文章,不过这里和他给出的算法步骤不完全一致. 因为上面文章是针对Graphs的,矩阵中有边为0的数据,而我的数据是Vector的,边是根据距离计算出来的,应该还是有点区 ...

  7. 葡萄酒的评价matlab代码,MATLAB·设计论文葡萄酒质量评价的数学建模

    葡萄酒质量评价的数学建模 摘要:关于葡萄酒质量的评价,通常是通过评酒员的打分来确定的.本论文通过对酿酒葡萄与葡 萄酒的理化指标之间的相关关系和评酒员打分进行了深入系统地分析,给出了葡萄酒质量评价的 量 ...

  8. 葡萄酒的评价matlab代码,MATLAB·设计论文葡萄酒质量评价数学建模.docx

    MATLAB·设计论文葡萄酒质量评价数学建模 葡萄酒质量评价的数学建模摘 要 :关于葡萄酒质量的评价,通常是通过评酒员的打分来确定的.本论文通过对酿酒葡萄与葡萄酒的理化指标之间的相关关系和评酒员打分进 ...

  9. 最大流matlab代码,matlab求最大流问题

    如下图,我的代码只能求指定两点的最大流,例如V1到V6,列出邻接矩阵C=[0 1 0 1 0 0,1 0 1 0 1 0,0 1 0 1 0 1,1 0 1 0 1 0,0 1 0 1 0 1,0 0 ...

最新文章

  1. 关于keil环境的 三个红点(备忘)
  2. 【错误异常大全】:ArcGIS Engine中C#无法引用ESRI.ArcGIS.AxControls问题
  3. 【转】Ubuntu16.04安装 Matlab2018a详细教程
  4. linux sed 循环多行,linux sed 多行处理详细总结
  5. Pywick:追求功能完备的PyTorch高级训练库
  6. 效果良好!构造一个输入速度的神经网络,以DQN方式实现小游戏的自动控制
  7. 第二章节 ASP.NET 验证控件(一)
  8. Struts2——(3)ValueStack(值栈)
  9. java并发队列之DelayQueue
  10. SQL server 数据库调用远程数据库存储过程的实现方法
  11. Atitit 研发体系 之道 attilax著 艾龙著 1. 发管理是一个完整的管理体系,从结构上来讲,它主要由四个方面的内容构架而成:组织结构与岗位设置 管理流程与工作流程、、项目及管道管理(
  12. 不等式解集怎么取_6.初中数学:一个不等式的解集,都是另一个不等式的解,求a的取值范围?...
  13. 爱立信实习总结之面试心得
  14. centos7服务器安装无线网卡,CentOS 7 安装无线网卡驱动方法实例教程
  15. eTerm放大/PID放大软件众多,如何选择
  16. [原创]佰志达SBO网上商城系统业务框架介绍
  17. 业务规范之springboot整合swagger2
  18. 数据可视化之matplotlib实战:plt.step() 绘制阶梯图
  19. 给大家分享一些IT网课资源的学习网站啦
  20. 技术专题:几个子网通过一个公网IP上网的WAYOS设置方法

热门文章

  1. 妲己机器人需要什么条件才能使用_estar零封YTG:平头哥快乐电竞,只有妲己没亚瑟,差评...
  2. 8代cpu能跑linux,Intel公布6/7/8代桌面CPU打漏洞补丁性能结果:影响很小
  3. [转载] 什么是Java中的自动拆装箱 integer
  4. java 方法 示例_Java语言环境getISOCountries()方法与示例
  5. c#二维数据最大最小值_C#| 打印类型,各种数据类型的最大值和最小值
  6. Linux编译程序源码环境,Linux下对nodejs环境进行源码编译并部署云应用
  7. 死锁 预防死锁避免死锁_死锁和处理死锁的方法
  8. 面试官:元素排序Comparable和Comparator有什么区别?
  9. 漫画:如何找到链表的倒数第n个结点?
  10. QT5开发的程序打包发布