《用MATLAB实现数据挖掘的一种算法.doc》由会员分享,可在线阅读,更多相关《用MATLAB实现数据挖掘的一种算法.doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、如有侵权,请联系网站删除,仅供学习与交流用MATLAB实现数据挖掘的一种算法【精品文档】第 16 页一、数据挖掘的目的数据挖掘(Data Mining)阶段首先要确定挖掘的任务或目的。数据挖掘的目的就是得出隐藏在数据中的有价值的信息。数据挖掘是一门涉及面很广的交叉学科,包括器学习、数理统计、神经网络、数据库、模式识别、粗糙集、模糊数学等相关技术。它也常被称为“知识发现”。知识发现(KDD)被认为是从数据中发现有用知识的整个过程。数据挖掘被认为是KDD过程中的一个特定步骤,它用专门算法从数据中抽取模式(patter,如数据分类、聚类、关联规则发现或序列模式发现等。数据挖掘主要步骤是:数据准备、数
2、据挖掘、结果的解释评估。二、数据挖掘算法说明确定了挖掘任务后,就要决定使用什么样的挖掘算法。由于条件属性在各样本的分布特性和所反映的主观特性的不同, 每一个样本对应于真实情况的局部映射。建立了粗糙集理论中样本知识与信息之间的对应表示关系, 给出了由属性约简求约简决策表的方法。基于后离散化策略处理连续属性, 实现离散效率和信息损失之间的动态折衷。提出相对值条件互信息的概念衡量单一样本中各条件属性的相关性, 可以充分利用现有数据处理不完备信息系统。 本次数据挖掘的方法是两种,一是找到若干条特殊样本,而是找出若干条特殊条件属性。最后利用这些样本和属性找出关联规则。(第四部分详细讲解样本和属性的选择)
3、三 数据预处理过程数据预处理一般包括消除噪声、推导计算缺值数据、消除重复记录、完成数据类型转换(如把连续值数据转换为离散型数据,以便于符号归纳,或是把离散型数据转换为连续)。本文使用的数据来源是名为“CardiologyCategorical”的excel文件中的“源数据”。该数据表共303行,14个属性。即共有303个样本。将该数据表的前200行设为训练样本,剩下后的103行作为测试样本,用基于粗糙集理论的属性约简的方法生成相应的规则,再利用测试样本对这些规则进行测试。首先对源数据进行预处理,主要包括字符型数据的转化和数据的归一化。数据预处理的第一步是整理源数据,为了便于matlab读取数据
4、,把非数字数据转换为离散型数字数据。生成lisanhua.xsl文件。这一部分直接在excel工作表中直接进行。步骤如下:将属性“sex”中的“Male”用“1”表示,“Female”用“2”表示;将属性“chest pain type”中的“Asymptomatic”用“1”表示,“Abnormal Angina”用“2”表示,“Angina”用“3”表示,“NoTang”用“4”表示;将属性“Fasting blood suga=0.9&ncc=8)|(ncc=10&nc=0.6) 得到决策属性healthy(2)、不满足以上条件的话 如果(mc=0.9|mcc=8)|(mcc=9&mc=
5、0.6) 得到决策属性sick。(3)、不满足以上条件的话 如果nc=(mc+0.3)|ncc=(mcc+2) 得到决策属性healthy。(4)、不满足以上条件的话 如果mcnc 得到决策属性为sick。(5)、不满足以上条件的话 如果nccmcc 得到决策属性为healthy。(6)、不满足以上条件的话 如果mccncc 得到决策属性为sick。(7)、不满足以上条件的话 得到决策属性为sick。六、正确率及结果分析正确率为82.5%结果分析:由于采用了两类约束方法,所以效果还可以。七、程序如下页所示clear;% 数据预处理程序 %dm=xlsread(lisanhua); % 载入数据
6、z1=dm(:,1); % 离散化第一列数据for i=1:303 if z1(i)=29&z1(i)=48&z1(i)=94&z4(i)=110&z4(i)=126&z5(i)=205&z5(i)=71&z8(i)=120&z8(i)=0&z10(i)=1.5&z10(i)2.5 z10(i)=2; else z10(i)=3; endendz11=dm(:,11);for i=1:303 z11(i)=z11(i)+1;endz12=dm(:,12);for i=1:303 z12(i)=z12(i)+1;endz13=dm(:,13);for i=1:303 z13(i)=z13(i)+
7、1;endz14=dm(:,14);for i=1:303 z14(i)=z14(i)+1;enddm2=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;for i=1:3939 dm3(i)=dm2(i)+w; if rem(i,303)=0 k=k+1; w=w+m1(k); endend% 预处理结束 % 挖掘算法 % 找6条样本前的预处理dm4=zeros(200,14);dm5=zeros(200,14);for i=1:200 if d
8、m3(i,14)=1 dm4(i,1:13)=dm3(i,1:13); else dm5(i,1:13)=dm3(i,1:13); endenda1=zeros(38,1);a2=zeros(38,1);for k=1:38for i=1:13 for j=1:200 if dm4(j,i)=k&dm4(j,i)=0 a1(k)=a1(k)+1; end if dm5(j,i)=k&dm5(j,i)=0 a2(k)=a2(k)+1; end endendenda5=a1;a6=a2;a3=zeros(5,1);a4=zeros(5,1);j=1;while j5 break; end a1(i
9、)=0; end endendj=1;while j5 break; end a2(i)=0; end endend% 构造h1 h2 矩阵h1=zeros(200,14);h2=zeros(1,200);y1=0;y2=0;y3=0;y4=0;for j=1:200 x=0;for i=1:200 h1(i,1:13)=dm3(j,1:13)=dm3(i,1:13); h1(i,14)=dm3(j,14)=dm3(i,14); if sum(h1(i,1:13)=10&h1(i,14)=1 x=x+1; endendh2(j)=x;end% 筛选h2 矩阵 得到h3 h4矩阵h3=zeros
10、(1,200);h4=zeros(1,200);for i=1:200 if z14(i)=1 h3(i)=h2(i); else h4(i)=h2(i); endendh5=h3;h6=h4;% 找六条重要样本 %y1=max(h5);for i=1:200 if h5(i)=y1 h5(i)=0;t1=i; endendy2=max(h5);for i=1:200 if h5(i)=y2 h5(i)=0;t2=i; endendy3=max(h5);for i=1:200 if h5(i)=y3 h5(i)=0;t3=i; endendy4=max(h6);for i=1:200 if h
11、6(i)=y4 h6(i)=0;t4=i; endendy5=max(h6);for i=1:200 if h6(i)=y5 h6(i)=0;t5=i; endendy6=max(h6);for i=1:200 if h6(i)=y6 h6(i)=0;t6=i; endend% 找特殊样本结束% 找特殊属性值dm4=zeros(200,14);dm5=zeros(200,14);for i=1:200 if dm3(i,14)=1 dm4(i,1:13)=dm3(i,1:13); else dm5(i,1:13)=dm3(i,1:13); endenda1=zeros(38,1);a2=zer
12、os(38,1);for k=1:38for i=1:13 for j=1:200 if dm4(j,i)=k&dm4(j,i)=0 a1(k)=a1(k)+1; end if dm5(j,i)=k&dm5(j,i)=0 a2(k)=a2(k)+1; end endendenda5=a1;a6=a2;a3=zeros(6,1);a4=zeros(6,1);j=1;while j6 break; end a1(i)=0; end endendj=1;while j6 break; end a2(i)=0; end endendb1=zeros(6,1);b2=zeros(6,1);for j=1
13、:6for i=1:38 if a5(i)=a3(j) b1(j)=i; endendendfor j=1:6 for i=1:38 if a6(i)=a4(j) b2(j)=i; end endendb3(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;for i=1:103 h7(i,1:13)=dm3(200+i,1:13);end% 特殊样本for i=1:103 nc=0;mc=0;ncc=0;mcc=0; h8(i,1:13)=h7(i,1:13)=
14、dm3(t1,1:13); if sum(h8(i,1:13)=9 nc=nc+0.3; end h8(i,1:13)=h7(i,1:13)=dm3(t2,1:13); if sum(h8(i,1:13)=9 nc=nc+0.3; end h8(i,1:13)=h7(i,1:13)=dm3(t3,1:13); if sum(h8(i,1:13)=9 nc=nc+0.3; end h8(i,1:13)=h7(i,1:13)=dm3(t4,1:13); if sum(h8(i,1:13)=9 mc=mc+0.3; end h8(i,1:13)=h7(i,1:13)=dm3(t5,1:13); if
15、 sum(h8(i,1:13)=9 mc=mc+0.3; end h8(i,1:13)=h7(i,1:13)=dm3(t6,1:13); if sum(h8(i,1:13)=9 mc=mc+0.3; end % 样本结束 % 特殊属性值 ncc=0;mcc=0; for j=1:13 if h7(i,j)=b3(1) ncc=ncc+3; else if h7(i,j)=b3(2) ncc=ncc+3; else if h7(i,j)=b3(3) ncc=ncc+2; else if h7(i,j)=b3(4) ncc=ncc+2; else if h7(i,j)=b3(5) ncc=ncc+
16、2; else if h7(i,j)=b4(1) mcc=mcc+3; else if h7(i,j)=b4(2) mcc=mcc+3; else if h7(i,j)=b4(3) mcc=mcc+2; else if h7(i,j)=b4(4) mcc=mcc+2; else if h7(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; else if (mc=0.9|mcc=8)|(mcc=9&mc=0.6) h7(i,14)=2; else if nc=(mc+0.3)|ncc=(mcc+2) h7(i,14)=1; else if mcnc h7(i,14)=2; else if nccmcc h7(i,14)=1; else if mccncc h7(i,14)=2; else h7(i,14)=2; end end end end end endend% 挖掘结束% 计算正确率h9=zeros(103,1);h9=h7(:,14)=dm3(201:303,14);tc=sum(h9)/103% 算法完毕