1、一、数据挖掘的目的数据挖掘(Data Mining)阶段首先要确定挖掘的任务或目的。数据挖掘的目的就是得出隐藏在数据中的有价值的信息。数据挖掘是一门涉及面很广的交叉学科,包括器学习、数理统计、神经网络、数据库、模式识别、粗糙集、模糊数学等相关技术。它也常被称为“知识发现” 。知识发现(KDD)被认为是从数据中发现有用知识的整个过程。数据挖掘被认为是KDD 过程中的一个特定步骤,它用专门算法从数据中抽取模式(patter,如数据分类、聚类、关联规则发现或序列模式发现等。数据挖掘主要步骤是:数据准备、数据挖掘、结果的解释评估。二、数据挖掘算法说明确定了挖掘任务后,就要决定使用什么样的挖掘算法。由于
2、条件属性在各样本的分布特性和所反映的主观特性的不同, 每一个样本对应于真实情况的局部映射。建立了粗糙集理论中样本知识与信息之间的对应表示关系, 给出了由属性约简求约简决策表的方法。基于后离散化策略处理连续属性, 实现离散效率和信息损失之间的动态折衷。提出相对值条件互信息的概念衡量单一样本中各条件属性的相关性, 可以充分利用现有数据处理不完备信息系统。本次数据挖掘的方法是两种,一是找到若干条特殊样本,而是找出若干条特殊条件属性。最后利用这些样本和属性找出关联规则。 (第四部分详细讲解样本和属性的选择)三 数据预处理过程数据预处理一般包括消除噪声、推导计算缺值数据、消除重复记录、完成数据类型转换(
3、 如把连续值数据转换为离散型数据,以便于符号归纳,或是把离散型数据转换为连续)。本文使用的数据来源是名为“CardiologyCategorical”的excel文件中的“源数据” 。该数据表共303行,14个属性。即共有303个样本。将该数据表的前200行设为训练样本,剩下后的103行作为测试样本,用基于粗糙集理论的属性约简的方法生成相应的规则,再利用测试样本对这些规则进行测试。首先对源数据进行预处理,主要包括字符型数据的转化和数据的归一化。数据预处理的第一步是整理源数据,为了便于 matlab 读取数据,把非数字数据转换为离散型数字数据。生成 lisanhua.xsl 文件。这一部分直接在
4、 excel 工作表中直接进行。步骤如下:将属性“sex” 中的 “Male”用“1” 表示, “Female”用“2” 表示;将属性“chest pain type”中的 “Asymptomatic”用“1”表示, “Abnormal Angina”用“2”表示, “Angina”用“3” 表示, “NoTang”用“4”表示;将属性“Fasting blood suga=0.9% 数据预处理程序 %dm=xlsread(lisanhua); % 载入数据%z1=dm(:,1); % 离散化第一列数据for i=1:303if z1(i)=29enda1(i)=0;endendendj=1;
5、while j5break;enda2(i)=0;endendend% 构造 h1 h2 矩阵h1=zeros(200,14);h2=zeros(1,200);y1=0;y2=0;y3=0;y4=0;for j=1:200x=0;for i=1:200h1(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)=10endendh2(j)=x;end% 筛选 h2 矩阵 得到 h3 h4 矩阵h3=zeros(1,200);h4=zeros(1,200);for i=1:200if z14(i
6、)=1h3(i)=h2(i);else h4(i)=h2(i);endend%h5=h3;h6=h4;% 找六条重要样本 %y1=max(h5);for i=1:200if h5(i)=y1h5(i)=0;t1=i;endendy2=max(h5);for i=1:200if h5(i)=y2h5(i)=0;t2=i;endendy3=max(h5);for i=1:200if h5(i)=y3h5(i)=0;t3=i;endendy4=max(h6);for i=1:200if h6(i)=y4h6(i)=0;t4=i;endendy5=max(h6);for i=1:200if h6(i)
7、=y5h6(i)=0;t5=i;endendy6=max(h6);for i=1:200if h6(i)=y6h6(i)=0;t6=i;endend% 找特殊样本结束% 找特殊属性值dm4=zeros(200,14);dm5=zeros(200,14);for i=1:200if dm3(i,14)=1dm4(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:13for j=1:200if dm4(j,i)=kendif dm5(j,i)=
8、kendendendenda5=a1;a6=a2;a3=zeros(6,1);a4=zeros(6,1);j=1;while j6break;enda1(i)=0;endendendj=1;while j6break;enda2(i)=0;endendendb1=zeros(6,1);b2=zeros(6,1);for j=1:6for i=1:38if a5(i)=a3(j)b1(j)=i;endendendfor j=1:6for i=1:38if a6(i)=a4(j)b2(j)=i;endendendb3(1:5,1)=b1(2:6,1);b4(1:5,1)=b2(1:5,1);% 寻
9、找结束 % 验证程序开始h7=zeros(103,14);h8=zeros(103,14);tc=0;for i=1:103h7(i,1:13)=dm3(200+i,1:13);end% 特殊样本for i=1:103nc=0;mc=0;ncc=0;mcc=0;h8(i,1:13)=h7(i,1:13)=dm3(t1,1:13);if sum(h8(i,1:13)=9nc=nc+0.3;endh8(i,1:13)=h7(i,1:13)=dm3(t2,1:13);if sum(h8(i,1:13)=9nc=nc+0.3;endh8(i,1:13)=h7(i,1:13)=dm3(t3,1:13);
10、if sum(h8(i,1:13)=9nc=nc+0.3;endh8(i,1:13)=h7(i,1:13)=dm3(t4,1:13);if sum(h8(i,1:13)=9mc=mc+0.3;endh8(i,1:13)=h7(i,1:13)=dm3(t5,1:13);if sum(h8(i,1:13)=9mc=mc+0.3;endh8(i,1:13)=h7(i,1:13)=dm3(t6,1:13);if sum(h8(i,1:13)=9mc=mc+0.3;end% 样本结束% 特殊属性值ncc=0;mcc=0;for j=1:13if h7(i,j)=b3(1)ncc=ncc+3;else i
11、f 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+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;endendendendendendendendendendend% 属性值结束% 挖掘算法 if (nc=0.9else if (mc=0.9|mcc=8)|(mcc=9else if nc=(mc+0.3)|ncc=(mcc+2)h7(i,14)=1;else if mcnch7(i,14)=2;else if nccmcch7(i,14)=1;else if mccncch7(i,14)=2;elseh7(i,14)=2;endendendendendendend% 挖掘结束% 计算正确率h9=zeros(103,1);h9=h7(:,14)=dm3(201:303,14);tc=sum(h9)/103% 算法完毕