属性约简(MATLAB算法)有实例有讲解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

粗糙集属性约简

注:这是我学粗糙集时老师给的作业

属性约简的顺序如下:求正域、生成未经处理的区分矩阵、对区分矩阵进行化简、求核、对已经处理过的区分矩阵进行属性约简。约简后的决策表有26行,所有12个属性都是正域中的属性,核为空

程序:

% main.m

tic;

a=[ 1,1,1,1,0,0,0,0,1,1,0,1;

0,0,0,0,0,0,0,0,0,0,0,0;

1,0,1,0,0,0,0,0,0,1,0,0;

0,0,0,1,1,1,1,0,1,0,1,1;

1,0,0,1,1,1,1,1,0,1,1,0;

0,1,0,1,1,1,1,1,1,0,0,1;

1,0,0,0,1,1,1,0,0,1,1,1;

1,1,1,1,0,0,0,0,1,1,0,1;

1,0,1,1,1,0,0,0,1,1,0,1;

1,1,1,1,0,0,0,0,1,1,0,1;

1,0,1,1,1,0,0,0,1,1,0,1;

1,0,1,1,1,0,0,0,1,1,0,1 ];

d=[1;0;0;0;0;0;0;1;1;1;1;1];

pos=posCD(a,d);

dismat=dismatrix(a,d,pos);

dism=disbe(dismat);

core=cor(dism);

[red,row]=redu(dism);

time=toc

% dismatrix.m

% 生成未经处理的区分矩阵dismat

function dismat=dismatrix(a,d,pos)

[m,n]=size(a);

p=1;

index1=0;index2=0;index=0;

dis=-1*ones(m*(m-1)/2,n);

for i=1:m

for j=i+1:m

if (isxbelongtopos(i,pos)&~isxbelongtopos(j,pos))...

|(~isxbelongtopos(i,pos)&isxbelongtopos(j,pos))...

|(isxbelongtopos(i,pos)&isxbelongtopos(j,pos)&~isxybelongtoindD(i,j,d)) index2=1;

end

if index2==0

continue;

end

for k=1:n

if a(i,k)~=a(j,k)

dis(p,k)=1;

index1=1;

else dis(p,k)=0;

end

end

if index1==1

p=p+1;index=1;

end

index1=0;

index2=0;

end

end

if p<=m*(m-1)/2

if index==0

dismat=[];

return;

end

if dis(p,1)==-1

p=p-1;

end

else p=m*(m-1)/2;

end

dismat=dis(1:p,:);

% redu.m

% 对已经处理过的区分矩阵进行知识约简function [red,row]=redu(dism)

[m,n]=size(dism);

red=[];

row=0;

if m<=0

return;

end

for i=1:n

if dism(1,i)~=0

row=row+1;

end

end

red(1:row,:)=zeros(row,n);

j=1;

for i=1:row

while dism(1,j)==0

j=j+1;

end

red(i,j)=1;

j=j+1;

end

temp=[];tempdis=[];

rowd=0;rowd1=0;

for i=2:m

j=1;

while j<=row

temp=uni(dism(i,:),red(j,:));

[s,n]=size(temp);

rowd1=rowd+s;

tempdis(rowd+1:rowd1,:)=temp;

rowd=rowd1;

j=j+1;

temp=[];

end

red=[];

red=disbe(tempdis);

tempdis=[];

[row,n]=size(red);

rowd=0;rowd1=0;

end

% 对区分矩阵或者约简矩阵进行化简即去掉包含关系function dism=disbe(dis)

[m,n]=size(dis);

p=m;

for i=1:m

if dis(i,1)~=-1

for j=1:m

if i~=j & dis(j,1)~=-1

if dis(i,:)<=dis(j,:)

dis(j,1)=-1;

p=p-1;

elseif dis(i,:)>=dis(j,:)

dis(i,:)=dis(j,:);

dis(j,1)=-1;

p=p-1;

end

end

end

end

end

dism=ones(p,n);

j=1;

for i=1:p

while j<=m & dis(j,1)==-1

j=j+1;

end

dism(i,:)=dis(j,:);

j=j+1;

end

% posCD.m

% a为条件属性矩阵,d为决策属性向量

% pos为正域,保存条件属性矩阵的索引值

function pos=posCD(a,d)

[m,n]=size(a);

p=m;

index=0;

for i=1:m

if a(i,1)~=-1

for j=i+1:m

if a(j,1)~=-1 &(a(i,:)==a(j,:)&d(i)~=d(j))

a(j,1)=-1;p=p-1;index=1;

end

相关文档
最新文档