1 / 13
文档名称:

属性约简matlab算法有实例有讲解.doc

格式:doc   大小:38KB   页数:13页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

属性约简matlab算法有实例有讲解.doc

上传人:2982835315 2022/2/15 文件大小:38 KB

下载得到文件列表

属性约简matlab算法有实例有讲解.doc

文档介绍

文档介绍:粗糙集属性约简
题目:  SARS 诊断
注:这是我学粗糙集时教师给的作业
 
U
干咳
呼吸困难
 血液检测
高烧38度
 *射线
浓痰
血细胞多
寒战
肌肉酸痛
乏力
胸膜痛
头痛
非典
1
1
    inde*2=0;
    end
end
if p<=m*(m-1)/2 
    if inde*==0
        dismat=[];
        return;
    end
    if dis(p,1)==-1
        p=p-1;
    end
else p=m*(m-1)/2;
end
dismat=dis(1:p,:);
%
% 对已经处理过的区分矩阵进展知识约简
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
 
%
% a为条件属性矩阵,d为决策属性向量
% pos为正域,保存条件属性矩阵的索引值
function pos=posCD(a,d)
[m,n]=size(a);
p=m;
inde*=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;inde*=1;
            end
        end
        if inde*==1
            a(i,1)=-1;