数据分析与挖掘实验报告doc.docx
《数据分析与挖掘实验报告doc.docx》由会员分享,可在线阅读,更多相关《数据分析与挖掘实验报告doc.docx(24页珍藏版)》请在冰豆网上搜索。
数据分析与挖掘实验报告doc
《数据挖掘》实验报告
1.关联规则的基本概念和方法1
1.1数据挖掘1
1.1.1数据挖掘的概念1
1.1.2数据挖掘的方法与技术1
1.2关联规则2
1.2.1关联规则的概念2
1.2.2关联规则的实现一一Apriori算法3
2.用Matlab实现关联规则5
2.1Matlab概述5
2.2基于MatIab的Apriori算法6
3.用java实现关联规则10
3.1java界面描述10
3.2java关键代码描述13
4.实验总结18
4.1实验的不足和改进18
4.2实验心得19
1•关联规则的基本概念和方法
1.1数据挖掘
1.1.1数据挖掘的概念
计算机技术和通信技术的迅猛发展将人类社会带入到了信息时代。
在最近十几年里,数拯库中存储的数据急剧增大。
数据挖掘就是信息技术自然进化的结果。
数据挖掘可以从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中,提取隐含在苴中的,人们事先不知道的但又是潜在有用的信息和知识的过程。
许多人将数据挖掘视为另一个流行词汇数据中的知识发现(KDD)的同义词,而另一些人只是把数据挖掘视为知识发现过程的一个基本步骤。
知识发现过程如下:
•数据淸理(消除噪声和删除不一致的数据)
・数据集成(多种数据源可以组合在一起)
・数据转换(从数据库中提取和分析任务相关的数据)
•数据变换(从汇总或聚集操作,把数据变换和统一成适合挖掘的形式)
•数据挖掘(基本步骤,使用智能方法提取数据模式)
•模式评估(根据某种兴趣度度量,识别代表知识的真正有趣的模式)
•知识表示(使用可视化和知识表示技术,向用户提供挖掘的知识)。
1.1.2数据挖掘的方法与技术
数据挖掘吸纳了诸如数据库和数据仓库技术、统讣学、机器学习、高性能讣算、模式识别、神经网络、数据可视化、信息检索、图像和信号处理以及空间数据分析技术的集成等许多应用领域的大量技术。
数据挖掘主要包括以下方法。
欷经网绍方法.•神经网络由于本身良好的鲁棒性、自组织自适应性、并行处理、分布存储和高度容错等特性非常适合解决数据挖掘的问题,因此近年来越来越受到人们的关注。
典型的神经网络模型主要分3大类:
以感知机、bp反向传播模型、函数型网络为代表的,用于分类、预测和模式识别的前馈式神经网络模型;以hopfield的离散模型和连续模型为代表的,分别用于联想记忆和优化汁算的反馈式神经网络模型:
以art模型、koholon模型为代表的,用于聚类的自组织映射方法。
神经网络方法的缺点是"黑箱"性,人们难以理解网络的学习和决策过程。
遗传算法:
遗传算法是一种基于生物自然选择与遗传机理的随机搜索算法,是一种仿生全局优化方法。
遗传算法具有的隐含并行性、易于和其它模型结合等性质使得它在数据挖掘中被加以应用。
sunil已成功地开发了一个基于遗传算法的数据挖掘工具,利用该工具对两个飞机失事的真实数据库进行了数据挖掘实验,结果表明遗传算法是进行数据挖掘的有效方法之一。
遗传算法的应用还体现在与神经网络、粗糙集等技术的结合上。
如利用遗传算法优化神经网络结构,在不增加错误率的前提下,删除多余的连接和隐层单元:
用遗传算法和bp算法结合训练神经网络,然后从网络提取规则等。
但遗传算法的算法较复杂,收敛于局部极小的较早收敛问题尚未解决。
决策树方法:
决策树是一种常用于预测模型的算法,它通过将大量数据有目的分类,从
中找到一些有价值的,潜在的信息。
它的主要优点是描述简单,分类速度快,特别适合大规模的数据处理。
粗糙集方法:
粗糙集理论是一种研究不精确、不确左知识的数学工具。
粗糙集方法有几个优点:
不需要给出额外信息:
简化输入信息的表达空间:
算法简单,易于操作。
粗糙集处理的对象是类似二维关系表的信息表。
目前成熟的关系数据库管理系统和新发展起来的数据仓库管理系统,为粗糙集的数据挖掘奠定了坚实的基础。
但粗糙集的数学基础是集合论,难以直接处理连续的属性。
而现实信息表中连续属性是普遍存在的。
因此连续属性的离散化是制约粗糙集理论实用化的难点。
覆盖正例排斥反例方法:
它是利用覆盖所有正例、排斥所有反例的思想来寻找规则。
首先在正例集合中任选一个种子,到反例集合中逐个比较。
与字段取值构成的选择子相容则舍去,相反则保留。
按此思想循环所有正例种子,将得到正例的规则(选择子的合取式)。
比较典型的算法有michalski的aqll方法、洪家荣改进的aql5方法以及他的ae5方法。
统计分析方法:
在数据库字段项之间存在两种关系:
函数关系(能用函数公式表示的确泄性关系)和相关关系(不能用函数公式表示,但仍是相关确左性关系),对它们的分析可采用统计学方法,即利用统计学原理对数据库中的信息进行分析。
可进行常用统讣(求大量数据中的最大值、最小值、总和、平均值等)、回归分析(用回归方程来表示变疑间的数量关系)、相关分析(用相关系数来度疑变量间的相关程度)、差异分析(从样本统计量的值得岀差异来确定总体参数之间是否存在差异)等。
模糊集方法:
即利用模糊集合理论对实际问题进行模糊评判、模糊决策、模糊模式识别和模糊聚类分析。
系统的复杂性越髙,模糊性越强,一般模糊集合理论是用隶属度来刻画模糊事物的亦此亦彼性的。
李徳毅等人在传统模糊理论和概率统汁的基础上,提岀了左性泄量不确定性转换模型一云模型,并形成了云理论。
还有接下来重点介绍的彌纽恢/方法。
1.2关联规则
1.2.1关联规则的概念
关联规则的一个典型例子是购物篮分析。
它是由著名的全国五百强沃尔玛发现的,沃尔玛有着世界最大的数据仓库系统,为了能够准确了解顾客在其门店的购买习惯,沃尔玛对其顾客的购物行为进行购物篮分析,想知道顾客经常一起购买的商品有哪些。
沃尔玛数拯仓库里集中了其各门店的详细原始交易数据。
在这些原始交易数据的基础上,沃尔玛利用数据挖掘方法对这些数据进行分析和挖掘。
一个意外的发现是:
"跟尿布一起购买最多的商品竟是啤洒!
经过大量实际调查和分析,揭示了一个隐藏在"尿布与啤洒"背后的美国人的一种行为模式:
在美国,一些年轻的父亲下班后经常要到超市去买婴儿尿布,而他们中有30%〜40%的人同时也为自己买一些啤酒。
产生这一现象的原因是:
美国的太太们常叮嘱她们的丈夫下班后为小孩买尿布,而丈夫们在买尿布后又随手带回了他们喜欢的啤酒。
关联规则由此进入人们的视野。
关联规则挖掘被泄义为假设I是项的集合。
给左一个交易数据库D,苴中每个事务(Transaction)t是I的非空子集,即每一个交易都与一个唯一的标识符TID(TransactionID)对应。
关联规则在D中的支持度(support)是D中事务同时包含X、Y的百分比,即概率:
置信度(confidence)是包含X的事务中同时又包含Y的百分比,即条件槪率。
下而举个例子来更好地说明关联规则。
给左AllElectronics关系数据库,一个数据挖掘系统可能发现如下形式的关联规则
Age(X,“20….29”)Aincome(X,"20,000….29,000”)?
二〉buys(X,"CD-Player”)[Support二20$,Confident=60%]
英中X是变量,代表顾客,该关联规则表示所研究的AllElectronics数据库中,顾客有20%在20-29岁,年收入在20,000-29,000之间,并且购买CD机;
这个年龄和收入组的顾客购买CD机的可能性有60%o
1.2.2关联规则的实现Apriori算法
1.2.2.1算法描述
Apriori算法在发现关联规则领域具有很大影响力。
算法命鋼源于算法使用了频繁项集性质的先验(prior)知识。
在具体实验时,Apriori算法将发现关联规则的过程分为两个步骤:
第一步通过迭代,检索岀事务数据库中的所有频繁项集,即支持度不低于用户设定的阈值的项集:
第二步利用频繁项集构造出满足用户最小信任度的规则。
其中,挖掘或识别出所有频繁项集是该算法的核心,占整个计算量的大部分。
Apriori算法使用一种称作逐层搜索的迭代方法,K项集用于搜索(K+1)项集。
首先,通过扫描数据库,累积每个项的计数,并收集满足最小支持度的项,找出频繁1项集的集合。
该集合记作L1。
然后,L1用于寻找频繁2项集的集合L2,L2用于寻找L3,如此下去,直到不能再找到频繁K项集。
为提髙频繁项集逐层产生的效率,一种称作Apriori的重要性质用于压缩搜索空间。
Apriori性质:
频繁项集的所有非空子集也必须是频繁的。
如何在算法中使用Apriori性质?
主要有两步过程组成:
连接步和剪枝步。
(1)连接步:
为找Lk,通过将L该候选项集合记作Ck。
设11和12是Lk」中的项集。
记号1JJ俵示h中的第j项。
执行S小连接5小,如果它们的前(K-2)项相同的话,其中的元素是可连接的。
(2)剪枝步:
为压缩Ck,可以用Apriori的性质:
任何非频繁的(K-1)项集都不是频繁K项集的子集。
因此,如果候选K项集的(K-1)项子集不在L(k小中,则该候选也不可能是频繁的,从而可以从Ck中删除。
1.2.2.1算法举例
Apriori算法的伪代码
input:
DB,minsup
Output:
result=所有频繁项集的他们的支持度方法:
Result:
={};
K:
=l;
Cj:
=所有的1-项集
While(Ck)do
begin
为每一个Ck中的项集生成一个计数器;
For(i=l;i<[DB];i++)
begin
对第i个记录T支持的每一个Ck中的项集,其计数器加1;end
Lk:
=Ck中满足大于min.sup的全体项集;
Lk支持度保留;
Result:
=ResultULK
Ck+i:
=所有的(k+1)-项集中满足其k-子集都在-里的全体:
k=k+l;
enddo
下面举个例子来说明Apriori算法。
设某个数据库中有9个事务。
即IDI=9。
使用图1.2解释Apriori算法发现D中的频繁项集。
表1.1某超市的销售项目的事务记录
TID
Items
T100
I1J2J3
T200
I2J4
T300
I2J3
T400
I1J2J4
T500
I1J3
T600
I2J3
T700
I1J3
T800
I1J2J3J5
T900
I1J2J3
(1)在算法的第一次迭代时,每个项都是候选1项集的集合C.的成员。
算法简单地扫描所有的事务,对每个项的岀现次数计数。
(2)假设最小支持度计数为2,即,min_sup=2。
可以肯泄频繁1项集的集合L“
(3)为了发现频繁2项集的集合L?
算法使用Li和J的连接C2。
注意,在剪枝步中,没有候选从C2中删除,因为这些候选的每个子集也是频繁的。
(4)扫描数据库D中的事务,累ilC中每个候选相集的支持计数,如图1.2的第二行中间的表所示。
(5)然后确泄频繁2项集的集合L2,它由C2中满足最小支持度的候选2项集组成。
(6)候选3项集的集合C3的产生要用到Apriori的逐层搜索技术,频繁项集的所有子集都必须是频繁的,给泄一个候选k项集,只需要检查它们的(k-1)项集是否频繁。
如图1.2中的第三行的第一个表所示。
(7)扫描D中事务以确左L3,它由C3中满足最小支持的的候选3项集组成,如图1.2中的第三行的第三个表所示。
(8)算法使用L3^L3连接产生候选4项集C4。
尽管会产生结果{II,12,13,15},但是这个项集被剪去,因为它的子集(12,13,15}不是频繁的。
所以Cf空集,所以算法终止,找出所有的频繁项集。
候选项集Cl
扫描D,对于每个候选集计数
TIDItems
II6
127
136
14
152
选出支持度
>2的项集
频繁项集L1
TID
Items
11
6
12
7
13
6
14
2
15
2
由L*生成候选集C?
候选项集C2
I1J2
4
I1J3
4
I1J4
1
I1J5
2
I2J3
A
q
I2J4
2
I2J5
2
I3J4
0
I3J5
1
I4J5
0
扫描D,并对每个候选计数
频繁项集L2
I1J2
4
11,13
4
I1J5
2
I2J3
4
I2J4
2
I2J5
2
选出支持度
>2的项集
图6.2候选相集合频繁项集的产生,最小支持度为2
2•用Matlab实现关联规则
2.1Matlab概述
Matlab是由美国malhworks公司发布的主要而对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数拯可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设汁以及必须进行有效数值计算的众多科学领域提供了一种全而的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
Matlab的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且
MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
由于Matlab使用矩阵作为其基本数据单位,所以使用Matlab进行Apriori算法的编辑有着先天的优势,可以使代码简洁易懂。
下面就来介绍用Matlab编写的Apriori算法。
2.2基于Matlab的Apriori算法
采用的原始数据是上节表1」的某超市的销售项目的事务记录。
以下为基于Matlab的Apriori算法的源代码以及相关解释。
sup=2;%假设支持度为2
shw=[l1001;01010;01100;11010;10100;01100;10100;11101;11100];
焉hw是事务矩阵,行衣示•个事务,列衣示项目;若某•事务没有某项,则该项目用0衣示。
将上述衣1.1的数据衣示为事务矩阵,每个项目都用数字衣示。
shw=
1
1
0
0
1
0
1
0
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
0
0
1
1
0
0
1
0
1
0
0
1
1
1
0
1
1
1
1
0
0
[mlznl]=size(shw);
ml=
9
nl=
5
幺寻找1项集col=(l:
nl)f;col=
1
2
3
4
5
count_sup=sum(shw,1)*;%求出所有候选项集Cl的支持度count_sup=
6
7
6
2
2
temp=find(count_sup>=sup);$査找候选项集Cl中支持度>2的项集,生成频繁项集Ll
temp=
1
2
3
4
5
col=col(temp);count_col_sup=count_sup(temp);Ll=[colcount_col_sup];
6
2
7
3
6
4
2
LL
丄
%产生2项集
i=0;
j=0;
co2=nchoosek(col,2);务产生候选项集C2
co2=
1
2
1
3
1
4
1
5
2
3
2
4
2
5
3
4
3
5
[m2,n2]=size(co2);count_co2_sup=zeros(m2,1);fori=l:
m2
forj=l:
ml
if(shw(j,co2(i,1))==1)&&(shw(j,oo2(i,2))==1)count_co2_sup(i)=count_co2_sup(i)+1;
end
endend
temp=find(count_co2_sup>=sup);务查找候选项集C2支持度>2的项集,生成频繁项L2co2=co2(temp,:
);
count_co2_sup=count_co2_sup(temp,:
);
L2=[co2count__co2_sup];
L2=
1
2
4
1
3
4
1
5
2
2
3
4
2
4
2
2
5
2
%寻找3项集
A=[co2(:
zl)co2(:
2)];
4=
1
2
1
3
1
5
2
3
2
4
2
5
[mA,nA]=size(A);
B
(1)=A
(1);
k=2;
fori=l:
mA
forj=l:
nA
if(A(i,j)-=B(l:
end))电查找重复出现的商品号B(k)=A(i,j);
k=k+l;%B=[12354]
end
end
i=i+l;
end
co3=nchoosek(B,3);$产生候选项集C3
co3=
1
2
3
1
2
5
1
2
4
1
3
5
1
3
4
1
5
4
2
3
5
2
3
4
2
5
4
3
5
4
[m3,n3]=size(co3);
count_co3_sup=zeros(m3,1);
fori=l:
m3
forj=1:
ml
if(shw(jzco3(i,1))==1)&&(shw(j,oo3(i,2))==1)&&(shw(jzco3(iz3))==l)
count_co3_sup(i)=count_co3_sup(i)+1;
end
end
m3=m3+l;
end
temp=find((count_co3_sup)>=sup);务査找候选项集C3支持度>2的项集,生成频繁项L3co3=co3(temp,:
);
count_co3__sup=count__co3_sup(temp,:
);
L3=[co3count_co3_sup];
L3=
1
2
3
2
1
2
5
2
务寻找4项集
C=[co3(:
zl)1co3(:
2)1co3(:
3)1];
[mC,nC]=size(C);
D
(1)=C
(1);
K=2;
fori=2:
nC
if(C(i)-=D(l:
end))%查找重复出现的商品号
D(K)=C(i);
K=K+1;
end
i=i+l;
end
co4=nchoosek(D,4);
[m4,n4]=size(co4);
count_co4_sup=zeros(m4,1);
fori=l:
m4
forj=l:
ml
if(shw(j,co4(i,1))==1)&&(shw(j,oo4(i,2))==1)&&(shw(jzco4(i,3))==1)&&(shw(j,oo4(i,4))==1)
count_co4_sup(i)=count_co4_sup(i)+1;
end
jW
end
end
temp=find((count_co4_sup)>=sup);
co4=co4(temp,:
);
count_co4_sup=count_co4__sup(temp,:
);
L4=[co4count_co4_sup];
Emptymatrix:
0-by-5
上述基于Matlab的Apriori算法的结果与上节的图6.2—致,由于C4是空集,所以算法终止,共找到频繁项集Li,L“L3o
3•用java实现关联规则
3.1java界面描述
运行程序Apriori,进入关联规则主界而,如图3」所示
图3.1关联规则主界面
点击“载入”选择"g:
/l.lxt",选择“打开S载入到java界而中,如图3.2所示
圍关联更则
回込
图3.2载入界面
载入完成后的界而,如图3.3所示
图33载入完成界面
输入最小支持度阈值,如2,点击“生成频繁项集S生成所有频繁项集,如下图3.4所示
图3.4频繁项集
输入最小可信度的值,如0.6,点击生成关联规则,结果如下图3.5所示
图3.5关联规则
3.2java关键代码描述
1、删除小于支持度的键
publicvoidrettioveNotSupporty(HStringstr=support.getTezt();
intj=Integer);
Sets=ht-keyset();
for(Iteratori=s.iterator();i.hasllext();){if(Integer.parseInt((String)ht.get(i.next()))}
}
1
2、创建并返回Li的结果集
publicStringcreateLl(){
Stririigstr=,,M;
for(inti=0;i.htl.cantainsKey(info[i][j])){htJL.pugQnfo[i]I;
}小e{
ht1.put[j]》Inrteger・parselnt((String)lit1
十1十“);
}
}
}
removellotSupportKey(ht1);
str=ML1如下;”十M\nM;
str=str+print(htl)十
str=str+B,M+In";
returnstr;
}
3、创建并返回L2的结果集
publicStringcreateL2(){
Stringstr=MM;
str=createLl();
Sets=htJL.keyset();
for(Iteratoriter=s.iterator();iter・hasHext();){
Objecto=iter・next();
for(inti=O;iforfor(intk=j4-1;kthis・cohtain(ht2-keySet()4(String)info[i][k],null)){
Itemitem=newItem((String)o丿info[i][k]);ht2・piut(:
Ltem,'U;
}else{Obj