数据挖掘实验指导_第1页
数据挖掘实验指导_第2页
数据挖掘实验指导_第3页
数据挖掘实验指导_第4页
数据挖掘实验指导_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据仓库与数据挖掘技术实验指导刘小明实验1. Matlab基础实践实验目的熟悉matlab的基本用法实验内容1. 编写一个函数,计算给定半径的圆的周长与面积。函数名为fcircle。2. matlab绘图,在0,2区间内,绘制曲线3. 熟悉课件中matlab一维和2维数组,数组下标、字符串等相关内容。实验二 聚类算法实验指导 实验目的 聚类分析是数据分析中的一种重要技术,它的应用极为广泛。许多领域中都会涉及聚类分析方法的应用与研究工作,如数据挖掘、统计学、机器学习、模式识别、生物学、空间数据库技术、电子商务等。用Matlab 7实现聚类基本算法. 掌握聚类算法中以下的关键步骤的实现1) 选择模

2、型类别2)定义代价函数3)选择模型结构4) 搜索模型参数实验内容 1)利用 clusterdata 函数对数据样本进行一次聚类 2)分步聚类:( 1)用 pdist函数计算变量之间的距离,找到数据集合中两辆变量之间的相似性和非相似性;( 2)用 linkage函数定义变量之间的连接;( 3)用 cophenetic函数评价聚类信息;( 4)用 cluster函数进行聚类。 实验步骤 1)一次聚类 。任意生成一个2维数据集,用Clusterdata函数对其进行聚类,并用图示方式显示聚类结果 提示:Clusterdata函数可以视为 pdist、 linkage与 cluster的综合,一般比较简

3、单。 【 clusterdata函数: 调用格式: T=clusterdata(X,cutoff)                           等价于Y=pdist(X,euclid); Z=linkage(Y,single); T=cluster(Z,cutoff)  】 2)分步聚类 ( 1)求出变量之间的相似性 用

4、pdist生成一个 M*(M-1)/2个元素的行向量,分别表示 M个样本两两间的距离。用 squareform函数将其转化为方阵,其中 x(i,j)表示第 i个样本与第 j个样本之的距离,对角线均为 0.提示:用 pdist函数计算出相似矩阵,有多种方法可以求距离,若此前数据还未无量纲化,则可用 zscore函数对其标准化 【 pdist函数: 调用格式: Y=pdist(X,metric) 说明: X是 M*N矩阵,为由 M个样本组成,每个样本有 N个字段的数据集         metirc取值为:

5、euclidean:欧氏距离(默认) seuclidean:标准化欧氏距离; mahalanobis:马氏距离 】 ( 2)用 linkage函数来产生聚类树 提示:【 linkage函数: 调用格式: Z=linkage(Y,method)说明: Y为 pdist函数返回的 M*(M-1)/2个元素的行向量,   method可取值: single:最短距离法(默认); complete:最长距离法;               &#

6、160;                   average:未加权平均距离法; weighted:加权平均法                          

7、;        centroid: 质心距离法;       median:加权质心距离法;                                  ward:内平方距

8、离法(最小方差算法) 】 返回的 Z为一个 (M-1)*3的矩阵,其中前两列为索引标识,表示哪两个序号的样本可以聚为同一类,第三列为这两个样本之间的距离。另外,除了 M个样本以外,对于每次新产生的类,依次用 M+1、 M+2、 来标识。 为了表示 Z矩阵,我们可以用更直观的聚类数来展示, 方法为: dendrogram(Z), 产生的聚类数是一个 n型树,最下边表示样本,然后一级一级往上聚类,最终成为最顶端的一类。纵轴高度代表距离列。          另外,还可以设置聚类数最下端的样本数,默认为 30,可以根据修

9、改 dendrogram(Z,n)参数 n来实现, 1<n<M。 dendrogram(Z,0)则表 n=M的情况,显示所有叶节点。 ( 3)用 cophenetic函数评价聚类信息 提示:【 cophenet函数:   调用格式: c=cophenetic(Z,Y)  说明:利用 pdist函数生成的 Y和 linkage函数生成的 Z计算 cophenet相关系数。】 cophene检验一定算法下产生的二叉聚类树和实际情况的相符程度 ,就是检测二叉聚类树中各元素间的距离和 pdist计算产生的实际的距离之间有多大的相关性,另外也可以用 i

10、nconsistent表示量化某个层次的聚类上的节点间的差异性。 ( 4)最后,用 cluster进行聚类,返回聚类列。    实验三 分类算法实验指导 实验目的 用Matlab 7实现分类中支持向量机分类算法,熟悉Bayesian分类算法。 实验内容 设计一个基于持向量机的分类程序,显示决策树分类结果,并对分类结果进行评估。 实验步骤 load fisheriris%载入matlab自带的数据有关数据的信息可以自己到UCI查找,这是UCI的经典数据之一,得到的数据如下图:其中meas是150*4的矩阵代表着有150个样本每个样本有4个属性描述,species代表着这150

11、个样本的分类.data = meas(:,1), meas(:,2);%在这里只取meas的第一列和第二列,即只选取前两个属性.groups = ismember(species,'setosa');%由于species分类中是有三个分类:setosa,versicolor,virginica,为了使问题简单,我们将其变为二分类问题:Setosa and non-Setosa.train, test = crossvalind('holdOut',groups);cp = classperf(groups);%随机选择训练集合测试集有关crossvalind的使

12、用请自己help一下其中cp作用是后来用来评价分类器的.svmStruct = svmtrain(data(train,:),groups(train),'showplot',true);%使用svmtrain进行训练,得到训练后的结构svmStruct,在预测时使用.训练结果如图:classes = svmclassify(svmStruct,data(test,:),'showplot',true);%对于未知的测试集进行分类预测,结果如图:classperf(cp,classes,test);cp.CorrectRateans =   

13、 0.9867%分类器效果测评,看测试集分类的准确率的高低.实验四 关联规则算法实验指导 实验目的 1.加强对Apriori算法的理解;2.锻炼分析问题、解决问题并动手实践的能力;实验内容 编程实现Apriori算法,加深对其理解。实验步骤 一关联算法简介关联规则的目的在于在一个数据集中找出项之间的关系,也称之为购物蓝分析 (market basketanalysis)。例如,购买鞋的顾客,有10%的可能也会买袜子,60%的买面包的顾客,也会买牛奶。这其中最有名的例子就是"尿布和啤酒"的故事了。关联规则的应用场合。在商业销售上,关联规则可用于交叉销售,以得到更大的收入;在保

14、险业务方面,如果出现了不常见的索赔要求组合,则可能为欺诈,需要作进一步的调查。在医疗方面,可找出可能的治疗组合;在银行方面,对顾客进行分析,可以推荐感兴趣的服务等等。Apriori algorithm是关联规则里一项基本算法。二.关联算法的基本原理 该算法的基本思想是:首先找出所有的频集,这些项集出现的频繁性至少和预定义的最小支持度一样。然后由频集产生强关联规则,这些规则必须满足最小支持度和最小可信度。然后使用第1步找到的频集产生期望的规则,产生只包含集合的项的所有规则,其中每一条规则的右部只有一项,这里采用的是中规则的定义。一旦这些规则被生成,那么只有那些大于用户给定的最小可信度的规则才被留

15、下来。为了生成所有频集,使用了递推的方法(1)L1 = find_frequent_1-itemsets(D); / 挖掘频繁1-项集,比较容易(2) for (k=2; Lk-1 ;k+) (3) Ck = apriori_gen(Lk-1 ,min_sup); / 调用apriori_gen方法生成候选频繁项集(4) for each transaction t D / 扫描事务数据库D     (5) Ct = subset(Ck,t);(6) for each candidate c Ct(7) c.count+; /  &#

16、160;统计候选频繁k-项集的计数(8) (9) Lk =c Ck|c.countmin_sup / 满足最小支持度的k-项集即为频繁k-项集(10) (11) return L= k Lk; / 合并频繁k-项集(k>0)三.关联算法的C+实现(1)算法数据:对给定数据集用Apriori算法进行挖掘,找出其中的频繁集并生成关联规则。对下面数据集进行挖掘:I1 I2 I5I1 I2I2 I4I1 I2 I4I1 I3I1 I2 I3 I5I1 I2 I3I2 I5I2 I3 I4I3 I4对于数据集,取最小支持度minsup=2,最小置信度minconf=0.8。(2)算法步骤: 首先单

17、趟扫描数据集,计算各个一项集的支持度,根据给定的最小支持度闵值,得到一项频繁集L1。 然后通过连接运算,得到二项候选集,对每个候选集再次扫描数据集,得出每个候选集的支持度,再与最小支持度比较。得到二项频繁集L2。 如此进行下去,直到不能连接产生新的候选集为止。 对于找到的所有频繁集,用规则提取算法进行关联规则的提取。(3)C+算法的简单实现 首先要在工程名文件夹里自己定义date.txt文档存放数据,然后在main函数中用FILE* fp=fopen("date.txt","r");将数据导入算法。 定义int countL110;找到各一维频繁子集出现

18、的次数。定义char curL1202;实现出现的一维子集。由于给出的数据最多有4个数,所以同样的我们要定义到4维来放数据。int countL210; /各二维频繁子集出现的次数char curL2203; /出现的二维子集int countL310; /各三维频繁子集出现的次数char curL3204; /出现的三维子集char cur504; 定义int SizeStr(char* m) 得到字符串的长度。实现代码如下: int SizeStr(char* m)int i=0;while(*(m+i)!=0)i+;return i;比较两个字符串,如果相等返回true,否则返回fals

19、e bool OpD(char* x,char* y)int i=0;if(SizeStr(x)=SizeStr(y)while(*(x+i)=*(y+i)i+;if(*(x+i)=0 && *(y+i)=0)return true;return false;通过void LoadItemL1(char *p) 得到所有1元的字串和各自出现的次数 void LoadItemL1(char *p)int i,j,n=0,k=0;char ch;char* s;int f;memset(cur,0,sizeof(cur);for(i=0;i<20;i+)curL1i0=0;c

20、urL1i1=0;for(j=0;j<10;j+)countL1j=0;for(i=0;i<10;i+)for(j=0;j<4;j+)ch=*(*(p+i)+j);if(ch=0)break;curn0=ch;n+;curL100=cur00;curL101=cur01;k=0;for(i=0;i<50;i+)if(curi=0)break;s=curi;f=1;for(j=0;j<=k;j+)if(OpD(s,curL1j)f=0;break;if(f=1)+k;curL1k0=curi0;curL1k1=curi1;for(i=0;i<20;i+)for

21、(j=0;j<50;j+)char* m;m=curL1i;if(*m=0)break;if(OpD(m,curj)countL1i+;printf("L1: n ");printf("项集 支持度计数n");for(i=0;i<10;i+)if(curL1i=0)break;if(countL1i>=2)printf("I%s: %dn",curL1i,countL1i);通过void SubItem2(char *p) 得到所有的2元子串 void SubItem2(char *p)int i,j,k,n=0;c

22、har* s;memset(cur,0,sizeof(cur);for(i=0;i<20;i+)curL2i0=0;curL2i1=0;curL2i2=0;for(i=0;i<10;i+)countL2i=0;for(k=0;k<10;k+)s=*(p+k);if(SizeStr(s)<2)continue;for(i=0;i<SizeStr(s);i+)for(j=i+1;j<SizeStr(s);j+)if(*(s+j)=0)break;*(curn+0)=*(s+i);*(curn+1)=*(s+j);*(curn+2)=0;*(curn+3)=0;n

23、+;通过void LoadItemL2(char *p) 得到各个2元频繁子串出现的次数 void LoadItemL2(char *p)int k,i,j;char* s;int f;SubItem2(p);curL200=cur00;curL201=cur01;curL202=cur02;k=0;for(i=0;i<50;i+)if(curi=0)break;s=curi;f=1;for(j=0;j<=k;j+)if(OpD(s,curL2j)f=0;break;if(f=1)+k;curL2k0=curi0;curL2k1=curi1;curL2k2=curi2;for(i=

24、0;i<20;i+)for(j=0;j<50;j+)s=curL2i;if(*s=0)break;if(OpD(s,curj)countL2i+;printf("L2: n");printf("项集 支持度计数n");for(i=0;i<10;i+)if(curL2i=0)break;if(countL2i>=2)printf("I%c,I%c: %dn",curL2i0,curL2i1,countL2i);通过定义void SubItem3(char *p) 得到所有3元的子串 void SubItem3(c

25、har *p)char *s;int i,j,h,m;int n=0;memset(cur,0,sizeof(cur);for(j=0;j<20;j+)curL3j0=0;curL3j1=0;curL3j2=0;curL3j3=0;for(i=0;i<10;i+)countL3i=0;for(m=0;m<10;m+)s=*(p+m);if(SizeStr(s)<3)continue;for(i=0;i<SizeStr(s);i+)for(j=i+1;j<SizeStr(s);j+)for(h=j+1;h<SizeStr(s);h+)if(*(s+h)=

26、0)break;*(curn+0)=*(s+i);*(curn+1)=*(s+j);*(curn+2)=*(s+h);*(curn+3)=0;n+;同样我们要得到得到各个3元频繁子串出现的次数 void LoadItemL3(char* p)int k,i,j;char* s;int f;SubItem3(p);curL300=cur00;curL301=cur01;curL302=cur02;curL303=cur03;k=0;for(i=0;i<50;i+)if(curi=0)break;s=curi;f=1;for(j=0;j<=k;j+)if(OpD(s,curL3j)f=

27、0;break;if(f=1)+k;curL3k0=curi0;curL3k1=curi1;curL3k2=curi2;curL3k3=curi3;for(i=0;i<20;i+)for(j=0;j<50;j+)s=curL3i;if(*s=0)break;if(OpD(s,curj)countL3i+;printf("L3: n");printf("项集 支持度计数n");for(i=0;i<10;i+)if(curL3i=0)break;if(countL3i>=2)printf("I%c,I%c,I%c: %dn&

28、quot;,curL3i0,curL3i1,curL3i2,countL3i);定义void LoadItemL4(char* p) 得到各个3元子串出现的次数 void LoadItemL4(char* p)int i;char* s;int j=0;for(i=0;i<10;i+)s=*(p+i);if(SizeStr(s)=4)j+;printf("四维子集出现的次数: %dn",j);printf("没有四维的频繁子集,算法结束! n");通过void Support(char* w,int g) 得到关联规则,并输出结果 void Support(char* w,int g)int i,j,k,n=0;char* s;float c=0.8,d=0;memset(cur,0,sizeof(cur);s=w;for(i=0;i<SizeStr(s);i+)*(curn+0)=*(s+i);*(curn+1)=0;*(curn+2)=0;*(curn+3)=0;n+;for(i=0;i<SizeStr(s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论