粗糙集属性约简matlab程序
- 格式:doc
- 大小:18.50 KB
- 文档页数:3
第34卷第4期 2017年4月计算机应用与软件Computer Applications and SoftwareV o L34No. 4Apr. 2017基于MapReduce的高效粗糙集属性约简算法吕洁1刘利民1胡皎月1许志伟131(内蒙古工业大学信息工程学院内蒙古呼和浩特010080)2(中国科学院计算技术研究所北京100086)摘要针对粗糙集理论中传统的基于正域的属性约简算法和基于信息熵的属性约简算法无法得到最小约简集的问题,给出基于信息熵改进的属性约简算法,即先使用条件熵识别出重要度值最大的属性,使用正域进行约 简判断。
在此基础上,设计了高效的基于M a p R e d u c e的信息熵改进属性约简算法。
以真实海量气象数据为基础, 在H a d o o p集群上实现上述算法,验证了该算法的有效性和效率。
关键词 属性约简粗糙集理论信息熵中图分类号T P311文献标识码A D O I:10. 3969/j. issn. 1000-386x. 2017. 04.046EFFICIENT ROUGH SET ATTRIBUTE REDUCTION ALGORITHMBASED ON MAPREDUCELii Jie1Liu Limin1H u Jiaoyue1X u Zhiwei1’21(College of Information Engineering, Inner Mongolia University of Technology ,Huhhot 010080, Inner Mongolia, China)2 (Institute of Computing Technology ^Chinese Academy of Sciences, Beijing 100086, China)Abstract Aiming at the problem that the traditional attribute reduction algorithm based on positive domain and the attribute reduction algorithm based on information entropy can ,t get the m i n i m u m reduction set in rough set theory,an optimized attribute reduction algorithm based on information entropy is proposed. T h e conditional entropy is used to identify the attribute with the highest significance value, and the positive domain is used to the reduction judgment. O n this basis,an efficient algorithm of information entropy improved attribute reduction based on M a p R e d u c e is designed. Based on the real meteorological data, the algorithm is implemented on H a d o o p cluster, and the effectiveness and efficiency of the algorithm are verified.Keywords Attribute reduction R o u g h set theory Information entropy熵改进属性约简算法,通过真实海量气象数据,验证了 〇弓丨言算法的有效性。
用M A T L A B实现数据挖掘的一种算法一、数据挖掘的目的数据挖掘(Data Mining)阶段首先要确定挖掘的任务或目的。
数据挖掘的目的就是得出隐藏在数据中的有价值的信息。
数据挖掘是一门涉及面很广的交叉学科,包括器学习、数理统计、神经网络、数据库、模式识别、粗糙集、模糊数学等相关技术。
它也常被称为“知识发现”。
知识发现(KDD)被认为是从数据中发现有用知识的整个过程。
数据挖掘被认为是KDD过程中的一个特定步骤,它用专门算法从数据中抽取模式(patter,如数据分类、聚类、关联规则发现或序列模式发现等。
数据挖掘主要步骤是:数据准备、数据挖掘、结果的解释评估。
二、数据挖掘算法说明确定了挖掘任务后,就要决定使用什么样的挖掘算法。
由于条件属性在各样本的分布特性和所反映的主观特性的不同, 每一个样本对应于真实情况的局部映射。
建立了粗糙集理论中样本知识与信息之间的对应表示关系, 给出了由属性约简求约简决策表的方法。
基于后离散化策略处理连续属性, 实现离散效率和信息损失之间的动态折衷。
提出相对值条件互信息的概念衡量单一样本中各条件属性的相关性, 可以充分利用现有数据处理不完备信息系统。
本次数据挖掘的方法是两种,一是找到若干条特殊样本,而是找出若干条特殊条件属性。
最后利用这些样本和属性找出关联规则。
(第四部分详细讲解样本和属性的选择)三数据预处理过程数据预处理一般包括消除噪声、推导计算缺值数据、消除重复记录、完成数据类型转换(如把连续值数据转换为离散型数据,以便于符号归纳,或是把离散型数据转换为连续)。
本文使用的数据来源是名为“CardiologyCategorical”的excel文件中的“源数据”。
该数据表共303行,14个属性。
即共有303个样本。
将该数据表的前200行设为训练样本,剩下后的103行作为测试样本,用基于粗糙集理论的属性约简的方法生成相应的规则,再利用测试样本对这些规则进行测试。
首先对源数据进行预处理,主要包括字符型数据的转化和数据的归一化。
《基于粗糙集的连续值属性约简算法研究》篇一一、引言随着大数据时代的来临,数据挖掘和知识发现成为了研究的热点。
粗糙集理论作为一种有效的数学工具,被广泛应用于数据分析和知识约简。
在处理具有连续值属性的数据时,如何有效地进行属性约简是一个重要的研究问题。
本文旨在研究基于粗糙集的连续值属性约简算法,为数据处理和知识发现提供有效的方法。
二、粗糙集理论概述粗糙集理论是一种处理不确定性和模糊性的数学工具,主要研究的是集合与集合之间的关系。
在数据挖掘和机器学习中,粗糙集理论被广泛应用于特征选择和属性约简。
粗糙集通过上下近似集来描述一个概念或集合的粒度,从而实现对数据的分析和约简。
三、连续值属性约简问题在处理具有连续值属性的数据时,传统的粗糙集理论面临着一些挑战。
连续值属性的处理需要更复杂的算法和技术。
此外,连续值属性的约简还需要考虑到数据的分布、密度、相关性等因素。
因此,如何有效地进行连续值属性的约简是一个重要的研究问题。
四、基于粗糙集的连续值属性约简算法为了解决连续值属性的约简问题,本文提出了一种基于粗糙集的连续值属性约简算法。
该算法主要包括以下步骤:1. 数据预处理:对数据进行清洗、归一化等预处理操作,以便于后续的约简操作。
2. 计算上下近似集:利用粗糙集理论,计算每个属性的上下近似集。
3. 属性重要性评估:根据上下近似集,评估每个属性的重要性。
重要性的评估可以采用信息熵、增益率等方法。
4. 属性约简:根据属性重要性的评估结果,选择一部分属性进行约简。
约简的目标是在保持数据分类能力的同时,减少属性的数量。
5. 约简结果评估:对约简结果进行评估,包括分类准确率、约简率等指标。
五、实验与分析为了验证本文提出的算法的有效性,我们进行了实验分析。
实验数据采用UCI等公开数据集。
实验结果表明,本文提出的算法可以有效地进行连续值属性的约简,且约简后的数据分类准确率较高。
此外,我们还对约简结果进行了可视化展示,以便于更好地理解约简过程和结果。
粗糙集属性约简注:这是我学粗糙集时老师给的作业属性约简的顺序如下:求正域、生成未经处理的区分矩阵、对区分矩阵进行化简、求核、对已经处理过的区分矩阵进行属性约简。
约简后的决策表有26行,所有12个属性都是正域中的属性,核为空程序:% main.mtic;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% 生成未经处理的区分矩阵dismatfunction 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:mfor j=i+1:mif (isxbelongtopos(i,pos)&~isxbelongtopos(j,pos))...|(~isxbelongtopos(i,pos)&isxbelongtopos(j,pos)). ..|(isxbelongtopos(i,pos)&isxbelongtopos(j,pos)&~i sxybelongtoindD(i,j,d))index2=1;endif index2==0continue;endfor k=1:nif a(i,k)~=a(j,k)dis(p,k)=1;index1=1;else dis(p,k)=0;endendif index1==1p=p+1;index=1;endindex1=0;index2=0;endendif p<=m*(m-1)/2if index==0dismat=[];return;endif dis(p,1)==-1p=p-1;endelse p=m*(m-1)/2;enddismat=dis(1:p,:);% redu.m% 对已经处理过的区分矩阵进行知识约简function [red,row]=redu(dism)[m,n]=size(dism);red=[];row=0;if m<=0return;endfor i=1:nif dism(1,i)~=0row=row+1;endendred(1:row,:)=zeros(row,n);j=1;for i=1:rowwhile dism(1,j)==0j=j+1;endred(i,j)=1;j=j+1;endtemp=[];tempdis=[];rowd=0;rowd1=0;for i=2:mj=1;while j<=rowtemp=uni(dism(i,:),red(j,:));[s,n]=size(temp);rowd1=rowd+s;tempdis(rowd+1:rowd1,:)=temp;rowd=rowd1;j=j+1;temp=[];endred=[];red=disbe(tempdis);tempdis=[];[row,n]=size(red);rowd=0;rowd1=0;end% disbe.m% 对区分矩阵或者约简矩阵进行化简即去掉包含关系function dism=disbe(dis)[m,n]=size(dis);p=m;for i=1:mif dis(i,1)~=-1for j=1:mif i~=j & dis(j,1)~=-1if 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;endendendendenddism=ones(p,n);j=1;for i=1:pwhile j<=m & dis(j,1)==-1j=j+1;enddism(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:mif a(i,1)~=-1for j=i+1:mif a(j,1)~=-1 &(a(i,:)==a(j,:)&d(i)~=d(j))a(j,1)=-1;p=p-1;index=1;endendif index==1a(i,1)=-1;p=p-1;index=0;endendendpos=zeros(p,1);i=1;for r=1:pwhile a(i,1)==-1&i<=mi=i+1;endpos(r)=i;r=r+1;i=i+1;end% cor.m% 对已经处理过的区分矩阵求核function core=cor(dism)[m,n]=size(dism);core1=zeros(1,n);number=0;for i=1:mnum=0;p=0;for j=1:nif dism(i,j)~=0num=num+1;p=j;endendif num==1core1(p)=1;number=number+1;endendif number==0core=0;elsecore=zeros(1,number);j=1;for i=1:numberwhile core1(j)==0j=j+1;endcore(i)=core1(j);j=j+1;endend% uni.m%对区分矩阵的第i行和red(j,:)运算,即将a中%所有的1分别插入到red(j,:)中,待去掉包含关系function tempred=uni(disa,red)[m,n]=size(red);num=0;for i=1:nif disa(i)~=0num=num+1;endendtempred=ones(m*num,n);temp=[];j=1;for i=1:numwhile disa(j)==0j=j+1;endtemp=red;temp(:,j)=ones(m,1);tempred((i-1)*m+1:i*m,:)=temp;j=j+1;end% isxbelongtopos.m% 判断x是否在正域pos中% x为索引值% 返回值p,如果x在pos中p=1否则p=0 function p=isxbelongtopos(x,pos)[m,n]=size(pos);p=0;if x<=0p=-1;return;endfor i=1:mif x==pos(i)p=1;break;endend% isxybelongtoindD.m% 判断x,y是否在indD中% x,y为索引值% 返回值p,如果x,y在indD中p=1否则p=0 function p=isxybelongtoindD(x,y,d)if x<=0 | x>size(d) | y<=0 | y>size(d) p=-1;return;endif d(x)==d(y)p=1;else p=0;end约简后的决策表如有侵权请联系告知删除,感谢你们的配合!。
粗糙集-属性约简-m a t l a b程序
Data2为条件属性,decision2为决策属性
%%%my_test函数实现
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%读取信息系统文件
file=textread('data2.txt','%s','delimiter','\n','whitespace','');%读取文件信息,每一行为一个胞元
[m,n]=size(file);%胞元的大小
fori=1:m
words=strread(file{i},'%s','delimiter','');%读取每个胞元中字符,即分解胞元为新的胞元
words=words';%转置
X{i}=words;
end
X=X'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[B,num,AT]=my_reduct(X);%信息系统的约简
ind_AT=ind(X);%信息系统的不可等价关系%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%显示约简信息系统
disp('约简后的条件系统为:');
[m,n]=size(B);
fori=1:m
disp(B{i});
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%读取决策系统文件
file=textread('decision2.txt','%s','delimiter','\n','whitespace','');
[m,n]=size(file);
fori=1:m
words=strread(file{i},'%s','delimiter','');
words=words';
D{i}=words;
end
D=D'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%决策系统的正域约简
X_D=X;
[l,k]=size(X_D{1});
pos_d=pos(X_D,D);%正域
fori=1:m%%%%%%%%%%%%%%正域有问题%%%%%%%%%%%%%%%%%%%%%%%%%%%
if(~ismember(num(i),pos_d))
B{i}='';%若约简后的信息系统B{i}不在正域中则删除该行
end%因为相同的条件得到的决策不一样,
end
%将在正域规则下约简过的信息系统B连接决策系统D
[m,n]=size(B);
fori=1:m
if(~isequal(B{i},''))
B{i}{1,k+1}=D{i}{1};
end
end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%显示约简决策系统
disp('约简后的决策系统为:');
[m,n]=size(B);
fori=1:m
disp(B{i});
end
--------------------------------------------------------------------------------
%%%%%my_reduct函数实现
function[C,num,reduct_attr]=my_reduct(X)
%%%%%y为约简后的cell数组,reduct_attr为可约去的属性
%X为行向量(元素为胞元)
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%约简
[m,n]=size(X);
[p,k]=size(X{1});
ind_AT=ind(X);%寻找不可等价关系
reduct_attr=[];%可约去的的属性
num=zeros(m,1);%约简后的信息对应的个体
fori=1:k
B=delete_AT(X,i);
if(isequal(ind_AT,ind(B)))%若IND(AT-{a}=IND(AT)
reduct_attr=union(reduct_attr,i);%则寻找到可约去的属性
X=B;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%剔除重复的行
k=1;
fori=1:m
if(~isequal(ind_AT{i},[]))
C_i=ind_AT{i,1}(1);
num(k)=i;
C{k,1}=X{C_i};%返回约简后的信息系统
k=k+1;
end
end
--------------------------------------------------------------------------------
%%%%%ind函数实现
functionyy=ind(X)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%寻找不可分辨关系[m,n]=size(X);
k=1;
ind_AT=cell(m,1);
fori=1:m
forj=(i+1):m%潜在问题,如i=m是终止循环,此时若最后一行不为空的话,将漏扫
if(~isequal(X{i},''))%若X{i}不为空
ind_AT{k}=union(ind_AT{k},i);%不可等价关系赋初值
if(isequal(X{i},X{j}))
X{j}='';%若X{i}==X{j},则删除X{j}
ind_AT{k}=union(ind_AT{k},j);%寻找不可等价关系
end
end
end
k=k+1;
end
--------------------------------------------------------------------------------
%%%delete_AT函数的源代码
functiony=delete_AT(X,ATi)%删除X中第i列的属性值
[m,n]=size(X);
[l,k]=size(X{1});
fori=1:m
X{i}{ATi}='';
end
y=X;
--------------------------------------------------------------------------------
%%%%%pos函数实现
functionpos_d=pos(X,D)%求决策系统的正域函数
%X为条件属性,D为决策属性
ind_D=ind(D);%求决策属性D的不可等价关系
[m,n]=size(ind_D);
ind_X=ind(X);%求信息系统属性X的不可等价关系
low=[];%存储正域个体的编号
fori=1:m
forj=1:m
if(~isequal(ind_X{i},[])&&~isequal(ind_D{j},[]))
if(ismember(ind_X{i},ind_D{j}))
low=union(low,ind_X{i});%由性质Pos_AT(d)=low_AT(X1)Ulow_AT(X2)U...
end
end
end
end
pos_d=low;。