用MATLAB实现数据挖掘的一种算法.docx
- 文档编号:24930232
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:20
- 大小:18.93KB
用MATLAB实现数据挖掘的一种算法.docx
《用MATLAB实现数据挖掘的一种算法.docx》由会员分享,可在线阅读,更多相关《用MATLAB实现数据挖掘的一种算法.docx(20页珍藏版)》请在冰豆网上搜索。
用MATLAB实现数据挖掘的一种算法
一、数据挖掘的目的
数据挖掘(DataMining)阶段首先要确定挖掘的任务或目的。
数据挖掘的目的就是得出隐藏在数据中的有价值的信息。
数据挖掘是一门涉及面很广的交叉学科,包括器学习、数理统计、神经网络、数据库、模式识别、粗糙集、模糊数学等相关技术。
它也常被称为“知识发现”。
知识发现(KDD)被认为是从数据中发现有用知识的整个过程。
数据挖掘被认为是KDD过程中的一个特定步骤,它用专门算法从数据中抽取模式(patter,如数据分类、聚类、关联规则发现或序列模式发现等。
数据挖掘主要步骤是:
数据准备、数据挖掘、结果的解释评估。
二、数据挖掘算法说明
确定了挖掘任务后,就要决定使用什么样的挖掘算法。
由于条件属性在各样本的分布特性和所反映的主观特性的不同,每一个样本对应于真实情况的局部映射。
建立了粗糙集理论中样本知识与信息之间的对应表示关系,给出了由属性约简求约简决策表的方法。
基于后离散化策略处理连续属性,实现离散效率和信息损失之间的动态折衷。
提出相对值条件互信息的概念衡量单一样本中各条件属性的相关性,可以充分利用现有数据处理不完备信息系统。
本次数据挖掘的方法是两种,一是找到若干条特殊样本,而是找出若干条特殊条件属性。
最后利用这些样本和属性找出关联规则。
(第四部分详细讲解样本和属性的选择)
三数据预处理过程
数据预处理一般包括消除噪声、推导计算缺值数据、消除重复记录、完成数据类型转换(如把连续值数据转换为离散型数据,以便于符号归纳,或是把离散型数据转换为连续)。
本文使用的数据来源是名为“CardiologyCategorical”的excel文件中的“源数据”。
该数据表共303行,14个属性。
即共有303个样本。
将该数据表的前200行设为训练样本,剩下后的103行作为测试样本,用基于粗糙集理论的属性约简的方法生成相应的规则,再利用测试样本对这些规则进行测试。
首先对源数据进行预处理,主要包括字符型数据的转化和数据的归一化。
数据预处理的第一步是整理源数据,为了便于matlab读取数据,把非数字数据转换为离散型数字数据。
生成lisanhua.xsl文件。
这一部分直接在excel工作表中直接进行。
步骤如下:
将属性“sex”中的“Male”用“1”表示,“Female”用“2”表示;
将属性“chestpaintype”中的“Asymptomatic”用“1”表示,“AbnormalAngina”用“2”表示,“Angina”用“3”表示,“NoTang”用“4”表示;
将属性“Fastingbloodsuga<120”与属性“angina”中的“FALSE”用“1”表示,“TRUE”用“2”表示;
将属性“restingecg”中的“Hyp”用“1”表示,“Normal”用“2”表示,“Abnormal”用“3”表示;
将属性“slope”中的“Down”用“1”表示,“Flat”用“2”表示,“Up”用“3”表示,;
将属性“thal”中的“Rev”用“1”表示,“Normal”用“2”表示,“Fix”用“3”表示;
将属性“class”中的“Healthy”用“1”表示,“Sick”用“2”表示;
数据预处理的第二步:
使用
dm=xlsread('lisanhua');
导入’lisanhua’.xls文件,在MATLAB中对一些连续属性值离散化。
如下:
1、[29,48]=1,[48,62]=2,[62,77]=3
4、[94,110]=1,[110,143]=2,[143,200]=3
5、[126,205]=1,[205,293]=2,[293,564]=3
8、[71,120]=1,[120,175]=2,[175,202]=3
10、[0,1.5]=1,[1.5,2.5]=2,[2.5,6.2]=3。
然后对数据进行归一化处理:
由于不同属性之间的属性值相同,所以利用下面语句对一共13个条件属性中的38个属性进行如下赋值,使每条属性唯一确定。
从而得到38个条件属性,只不过38个里面有且只能出现13个。
程序如下:
m1=[0,3,2,4,3,3,2,3,3,2,3,3,4,3];k=1;w=m1(k);dm3=dm2;
fori=1:
3939
dm3(i)=dm2(i)+w;
ifrem(i,303)==0
k=k+1;
w=w+m1(k);
end
end
从而得到dm(3)矩阵。
而且决策属性分为1:
healthy;2:
sick。
并且在38个条件属性中没有值为0。
四、挖掘算法
1、特殊样本
首先在前200条样本中分别找出三条对应两种决策属性的重要样本,样本必须满足在同类决策属性下其他199条的13条决策属性中和它的13条条件属性数目大于等于10的前3条样本。
2、特殊条件属性值
其次分别对应两条决策属性值的5条重要条件属性值(在38个条件属性里找),特殊属性值必须满足:
(1)在对应相同决策属性下,此决策属性支持率必须在前五,
(2)而且如果不同决策属性出现相同条件属性。
如果相同决策属性同时出现在不同决策属性中,删除这条后找支持率第六的条件属性,以此类推。
挖掘算法在MATLAB里列出并做了标注。
五、验证程序
1、预处理
在验证程序里面分别对测试数据和六条样本做了对比,又对其属性值和特殊属性值做了对比,最后利用加权求和算法判断测试样本的决策属性正确率。
其中:
nc,mc代表测试数据分别和两类样本属性中相同数是否大于等于9时的加权值。
ncc,mcc代表测试数据分别和两类特殊属性满足几条数目的加权值。
2、关联规则
(1)、如果(nc>=0.9&ncc>=8)|(ncc>=10&nc>=0.6)得到决策属性healthy
(2)、不满足以上条件的话如果(mc>=0.9|mcc>=8)|(mcc>=9&mc>=0.6)得到决策属性sick。
(3)、不满足以上条件的话如果nc>=(mc+0.3)|ncc>=(mcc+2)得到决策属性healthy。
(4)、不满足以上条件的话如果mc>nc得到决策属性为sick。
(5)、不满足以上条件的话如果ncc>mcc得到决策属性为healthy。
(6)、不满足以上条件的话如果mcc>ncc得到决策属性为sick。
(7)、不满足以上条件的话得到决策属性为sick。
六、正确率及结果分析
正确率为82.5%
结果分析:
由于采用了两类约束方法,所以效果还可以。
七、程序如下页所示
clear;
%%%%%数据预处理程序%%%%%%
dm=xlsread('lisanhua');%载入数据
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
z1=dm(:
1);%离散化第一列数据
fori=1:
303
ifz1(i)>=29&z1(i)<48
z1(i)=1;
elseifz1(i)>=48&z1(i)<62
z1(i)=2;
elsez1(i)=3;
end
end
z2=dm(:
2);
fori=1:
303
ifz2(i)==0
z2(i)=1;
elsez2(i)=2;
end
end
z3=dm(:
3);
fori=1:
303
z3(i)=z3(i)+1;
end
z4=dm(:
4);
fori=1:
303
ifz4(i)>=94&z4(i)<110
z4(i)=1;
elseifz4(i)>=110&z4(i)<143
z4(i)=2;
elsez4(i)=3;
end
end
z5=dm(:
5);
fori=1:
303
ifz5(i)>=126&z5(i)<205
z5(i)=1;
elseifz5(i)>=205&z5(i)<293
z5(i)=2;
elsez5(i)=3;
end
end
z6=dm(:
6);
fori=1:
303
z6(i)=z6(i)+1;
end
z7=dm(:
7);
fori=1:
303
z7(i)=z7(i)+1;
end
z8=dm(:
8);
fori=1:
303
ifz8(i)>=71&z8(i)<120
z8(i)=1;
elseifz8(i)>=120&z8(i)<175
z8(i)=2;
elsez8(i)=3;
end
end
z9=dm(:
9);
fori=1:
303
z9(i)=z9(i)+1;
end
z10=dm(:
10);
fori=1:
303
ifz10(i)>=0&z10(i)<1.5
z10(i)=1;
elseifz10(i)>=1.5&z10(i)<2.5
z10(i)=2;
elsez10(i)=3;
end
end
z11=dm(:
11);
fori=1:
303
z11(i)=z11(i)+1;
end
z12=dm(:
12);
fori=1:
303
z12(i)=z12(i)+1;
end
z13=dm(:
13);
fori=1:
303
z13(i)=z13(i)+1;
end
z14=dm(:
14);
fori=1:
303
z14(i)=z14(i)+1;
end
dm2=[z1,z2,z3,z4,z5,z6,z7,z8,z9,z10,z11,z12,z13,z14];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
m1=[0,3,2,4,3,3,2,3,3,2,3,3,4,3];k=1;w=m1(k);dm3=dm2;
fori=1:
3939
dm3(i)=dm2(i)+w;
ifrem(i,303)==0
k=k+1;
w=w+m1(k);
end
end
%%%%%预处理结束%%%%%%
%%%%挖掘算法%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%找6条样本前的预处理
dm4=zeros(200,14);dm5=zeros(200,14);
fori=1:
200
ifdm3(i,14)==1
dm4(i,1:
13)=dm3(i,1:
13);
elsedm5(i,1:
13)=dm3(i,1:
13);
end
end
a1=zeros(38,1);a2=zeros(38,1);
fork=1:
38
fori=1:
13
forj=1:
200
ifdm4(j,i)==k&dm4(j,i)~=0
a1(k)=a1(k)+1;
end
ifdm5(j,i)==k&dm5(j,i)~=0
a2(k)=a2(k)+1;
end
end
end
end
a5=a1;a6=a2;
a3=zeros(5,1);a4=zeros(5,1);
j=1;
whilej<6
a11=0;
a11=max(a1);
fori=1:
38
ifa1(i)==a11
a3(j)=a11;
j=j+1;
ifj>5
break;
end
a1(i)=0;
end
end
end
j=1;
whilej<6
a22=0;
a22=max(a2);
fori=1:
38
ifa2(i)==a22
a4(j)=a22;
j=j+1;
ifj>5
break;
end
a2(i)=0;
end
end
end
%%%%%%%%%%%%%%%%构造h1h2矩阵
h1=zeros(200,14);
h2=zeros(1,200);
y1=0;y2=0;y3=0;y4=0;
forj=1:
200
x=0;
fori=1:
200
h1(i,1:
13)=dm3(j,1:
13)==dm3(i,1:
13);
h1(i,14)=dm3(j,14)==dm3(i,14);
ifsum(h1(i,1:
13))>=10&h1(i,14)==1
x=x+1;
end
end
h2(j)=x;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%筛选h2矩阵得到h3h4矩阵
h3=zeros(1,200);h4=zeros(1,200);
fori=1:
200
ifz14(i)==1
h3(i)=h2(i);
elseh4(i)=h2(i);
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
h5=h3;h6=h4;
%%%%%%%%%%%%%%找六条重要样本%%%%%%%%%
y1=max(h5);
fori=1:
200
ifh5(i)==y1
h5(i)=0;t1=i;
end
end
y2=max(h5);
fori=1:
200
ifh5(i)==y2
h5(i)=0;t2=i;
end
end
y3=max(h5);
fori=1:
200
ifh5(i)==y3
h5(i)=0;t3=i;
end
end
y4=max(h6);
fori=1:
200
ifh6(i)==y4
h6(i)=0;t4=i;
end
end
y5=max(h6);
fori=1:
200
ifh6(i)==y5
h6(i)=0;t5=i;
end
end
y6=max(h6);
fori=1:
200
ifh6(i)==y6
h6(i)=0;t6=i;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%找特殊样本结束
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%找特殊属性值
dm4=zeros(200,14);dm5=zeros(200,14);
fori=1:
200
ifdm3(i,14)==1
dm4(i,1:
13)=dm3(i,1:
13);
elsedm5(i,1:
13)=dm3(i,1:
13);
end
end
a1=zeros(38,1);a2=zeros(38,1);
fork=1:
38
fori=1:
13
forj=1:
200
ifdm4(j,i)==k&dm4(j,i)~=0
a1(k)=a1(k)+1;
end
ifdm5(j,i)==k&dm5(j,i)~=0
a2(k)=a2(k)+1;
end
end
end
end
a5=a1;a6=a2;
a3=zeros(6,1);a4=zeros(6,1);
j=1;
whilej<7
a11=0;
a11=max(a1);
fori=1:
38
ifa1(i)==a11
a3(j)=a11;
j=j+1;
ifj>6
break;
end
a1(i)=0;
end
end
end
j=1;
whilej<7
a22=0;
a22=max(a2);
fori=1:
38
ifa2(i)==a22
a4(j)=a22;
j=j+1;
ifj>6
break;
end
a2(i)=0;
end
end
end
b1=zeros(6,1);b2=zeros(6,1);
forj=1:
6
fori=1:
38
ifa5(i)==a3(j)
b1(j)=i;
end
end
end
forj=1:
6
fori=1:
38
ifa6(i)==a4(j)
b2(j)=i;
end
end
end
b3(1:
5,1)=b1(2:
6,1);b4(1:
5,1)=b2(1:
5,1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%寻找结束
%%%%%%%%%%%%%%%%%%%%%验证程序开始
h7=zeros(103,14);h8=zeros(103,14);tc=0;
fori=1:
103
h7(i,1:
13)=dm3(200+i,1:
13);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%特殊样本
fori=1:
103
nc=0;mc=0;ncc=0;mcc=0;
h8(i,1:
13)=h7(i,1:
13)==dm3(t1,1:
13);
ifsum(h8(i,1:
13))>=9
nc=nc+0.3;
end
h8(i,1:
13)=h7(i,1:
13)==dm3(t2,1:
13);
ifsum(h8(i,1:
13))>=9
nc=nc+0.3;
end
h8(i,1:
13)=h7(i,1:
13)==dm3(t3,1:
13);
ifsum(h8(i,1:
13))>=9
nc=nc+0.3;
end
h8(i,1:
13)=h7(i,1:
13)==dm3(t4,1:
13);
ifsum(h8(i,1:
13))>=9
mc=mc+0.3;
end
h8(i,1:
13)=h7(i,1:
13)==dm3(t5,1:
13);
ifsum(h8(i,1:
13))>=9
mc=mc+0.3;
end
h8(i,1:
13)=h7(i,1:
13)==dm3(t6,1:
13);
ifsum(h8(i,1:
13))>=9
mc=mc+0.3;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%样本结束
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%特殊属性值
ncc=0;mcc=0;
forj=1:
13
ifh7(i,j)==b3
(1)
ncc=ncc+3;
elseifh7(i,j)==b3
(2)
ncc=ncc+3;
elseifh7(i,j)==b3(3)
ncc=ncc+2;
elseifh7(i,j)==b3(4)
ncc=ncc+2;
elseifh7(i,j)==b3(5)
ncc=ncc+2;
elseifh7(i,j)==b4
(1)
mcc=mcc+3;
elseifh7(i,j)==b4
(2)
mcc=mcc+3;
elseifh7(i,j)==b4(3)
mcc=mcc+2;
elseifh7(i,j)==b4(4)
mcc=mcc+2;
elseifh7(i,j)==b4(5)
mcc=mcc+2;
end
end
end
end
end
end
end
end
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%属性值结束
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%挖掘算法
if(nc>=0.9&ncc>=8)|(ncc>=10&nc>=0.6)
h7(i,14)=1;
elseif(mc>=0.9|mcc>=8)|(mcc>=9&mc>=0.6)
h7(i,14)=2;
elseifnc>=(mc+0.3)|ncc>=(mcc+2)
h7(i,14)=1;
elseifmc>nc
h7(i,14)=2;
elseifncc>mcc
h7(i,14)=1;
elseifmcc>ncc
h7(i,14)=2;
else
h7(i,14)=2;
end
end
end
end
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%挖掘结束
%%%%%%%%%%%%%%%%%%计算正确率
h9=zeros(103,1);
h9=h7(:
14)==dm3(201:
303,14);
tc=sum(h9)/103
%%%%%%%%%%%%%%%%%%%%%%%算法完毕
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 实现 数据 挖掘 一种 算法