⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmeans11.m

📁 人工智能中比较经典的c-means算法的实现。在MATLAB中
💻 M
字号:
clear;clc;clf;%CMEANS Summary of this function goes here%   Detailed explanation goes here[a1,a2,a3,a4]=textread('男女学生数据\StudentsData.txt','%f%f%f%f');A=[a1,a2,a3,a4];Member=[a1];TestSet.X=[a3,a4];c.num=0;c1=TestSet.X(1,:);%c2=TestSet.X(2,:);N=size(TestSet.X,1);d=size(TestSet.X,2);dis=0;for i=1:N dd=0;   for j=1:d       dd=dd+(c1(1,j)-TestSet.X(i,j))^2;   end   if dd>dis       dis=dd;       c2=TestSet.X(i,:);       t=i;   endend%Member(t);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%初次划分t1=0;t2=0;for i=1:N      d1=0;      d2=0;   for j=1:d       d1=d1+(c1(1,j)-TestSet.X(i,j))^2;       d2=d2+(c2(1,j)-TestSet.X(i,j))^2;   end   if d1>d2        t2=t2+1;        Member2(t2,1)=Member(i);        setc2(t2,:)=TestSet.X(i,:);            else         t1=t1+1;        Member1(t1,1)=Member(i);        setc1(t1,:)=TestSet.X(i,:);            endendMember1;Member2;setc2;setc1;t1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%聚类均值%for i=1:d    m1=sum(setc1)/t1;%end%for i=1:d   m2=sum(setc2)/t2;%endm1m2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%准则函数值J1=0;J2=0;for i=1:t1    J1=J1+(setc1(i,:)-m1(1,:))*(setc1(i,:)-m1(1,:))';endfor i=1:t2    J2=J2+(setc2(i,:)-m2(1,:))*(setc2(i,:)-m2(1,:))';endJe=J1+J2delta=1000;Je1=0;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%循环划分while delta>0.01    nt2=1;    nt1=1;for i=1:t1    p1=(setc1(i,:)-m1(1,:))*(setc1(i,:)-m1(1,:))'*t1/(t1-1);    p2=(setc1(i,:)-m2(1,:))*(setc1(i,:)-m2(1,:))'*t2/(t2+1);        if p1>p2       tempsetc2(nt2,:)=setc1(i,:);       nt2=nt2+1;    else       tempsetc1(nt1,:)=setc1(i,:);       nt1=nt1+1;    endendfor i=1:t2 p1=(setc2(i,:)-m1(1,:))*(setc2(i,:)-m1(1,:))'*t1/(t1+1); p2=(setc2(i,:)-m2(1,:))*(setc2(i,:)-m2(1,:))'*t2/(t2-1);    if p1>p2       tempsetc2(nt2,:)=setc2(i,:);       nt2=nt2+1;    else       tempsetc1(nt1,:)=setc2(i,:);       nt1=nt1+1;     endendsetc1=tempsetc1;setc2=tempsetc2;t1=nt1-1;t2=nt2-1;clear tempsetc1*%=zeros(100,2);clear tempsetc2*%=zeros(100,2);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%重新计算 m1=sum(setc1)/t1; m2=sum(setc2)/t2;for i=1:t1    J1=J1+(setc1(i,:)-m1(1,:))*(setc1(i,:)-m1(1,:))';endfor i=1:t2    J2=J2+(setc2(i,:)-m2(1,:))*(setc2(i,:)-m2(1,:))';endJe1=J1+J2;delta=abs(Je-Je1)/Je;Je=Je1;endsetc1setc2Je1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%求错分率t3=0;for i=1:t1    for j=1:N      if (setc1(i,1)==a3(j)&&setc1(i,2)==a4(j))         if a2(j)==-1            t3=t3+1;            setc3(t3,:)=setc1(i,:);         end      end    endendfor i=1:t2    for j=1:N      if (setc2(i,1)==a3(j)&&setc2(i,2)==a4(j))          if a2(j)==1            t3=t3+1;            setc3(t3,:)=setc2(i,:);          end      end    end   endsetc3e=t3/Nplot(setc1(:,1),setc1(:,2),'+',setc2(:,1),setc2(:,2),'o',setc3(:,1),setc3(:,2),'x')        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -