1、数据挖掘上机报告数据挖掘实验上机报告课程名称 数据挖掘 学生学院 管理学院 _专业班级 学 号 学生姓名_指导教师_刘国胜老师_2016 年 6 月第一次上机训练内容一 、 基础训练 ( 以下内容可参考课件 )1、创建标量、行向量、列向量、矩阵;标量单个数据行向量一行数据列向量一列数据矩阵m行n列的二维数据2、基本函数与操作;(1)创建一个向量(数组),求出向量的长度、转置、各元素之和、最大值、最小值;向量的长度、转置、各元素之和、最大值、最小值(2)创建一个二维矩阵,取出矩阵的某一个元素、某一行、某一列、某一子矩阵;创建一个二维矩阵 取出矩阵的某一个元素、某一行、某一列、某一子矩阵(3)创建
2、两个二维方阵,计算两个矩阵的和、积、点积,计算两个矩阵横向连接和纵向连接后的新矩阵;创建两个二维方阵,计算两个矩阵的和、积、点积,计算两个矩阵横向连接纵向连接新矩阵;(4)创建一个向量,找出向量中所有大于 0 的元素的下标。3、自定义函数(可在帮助文件中搜索关于 function 的帮助文档)(1)自定义一个函数,输入为两个实数,输出为此两个数的和、差、积、商;代码:function he cha ji shang = Compute4(a,b)%UNTITLED % he=a+bcha=a-bji=a*bshang=a/b end代码验证: c=Compute4(4,5)(2)自定义一个函数
3、,输入为一个区间的左边界、右边界和步长,以该步长在此区间内绘制出函数 f(x)=x*sin(x)的图像;代码:function z = Image01(a,b,c)x=a:c:by=x.*sin(x)z=plot(x,y) end验证:图像(3)自定义一个函数,输入为一个向量,输出为向量中所有比前一个元素大的当前元素之和。代码: function bb = Sum01(a)c=length(a)bb=0for i=2:c if (a(i)a(i-1) bb=bb+a(i) end end代码验证:4、自定义一个文件夹,将以上所有自定义函数放入此文件夹中,并让 matlab 程序的当前路径指向此
4、文件夹第二次上机训练内容本次上机主要训练如何实现关联规则 Apriori 算法,训练前需掌握如何按算法流程对实例进行手工计算,例如,之前布置的课后作业: 已知交易记录数据库 D 中有 9 条交易记录(事务): T1:A,B,E T2:B,D T3:B,C T4:A,B,D T5:A,C T6:B,C T7:A,C T8:A,B,C,E T9:A,B,C 设定最小支持度为 20%,最小可信度为 60%,找出所有的强规则并计算其支持度和可信度在对以上类型的问题进行关联规则挖掘时,需要考虑以下算法实现的问题:(1)首先考虑如何用(-1/0/1)表示事务集、频繁集、关联规则;(2)其次考虑创建两个函数
5、,分别计算项集的支持度和可信度;(3)然后考虑如何得到所有的频繁项集;(4)最后考虑如何从所有频繁集中找出强关联规则。提示 :1、此算法的接口可定义为:R,sup,conf=Apriori(D,min_sup,min_conf)其中输入变量分别为事务集、最小支持度和最小可信度,输出分别为强规则、支持度和可信度。在作业中的例子中,事务集的可表示为:D(1:4, :)=1,1,0,0,1; 0,1,0,1,0; 0,1,1,0,0; 1,1,0,1,0;输出的强规则由-1/0/1 组成,类似有如下形式:R=-1, 1, 0, -1, 0此规则的含义是 A,DB。2、创建的计算支持度的函数有如下形式
6、:sup=compute_sup(S, D)其中 S 为要计算支持度的项集,由 0/1 组成,有类似于上一条中 R 的形式。现在假设 S=1, 0, 1, 0,0,则其计算支持度时需要顺序与 D 中的每一行进行比较,比较的公式如下:判断:all(D(i, :)-S)=true,如成立则支持度计数增加1,否则不增加。3、此问题的算法实现过程可能用到的 matlab 函数包含:eye, all, find, size, zeros, nchoosek原理:Apriori算法的基本过程是:扫描一遍数据库,得到一阶频繁项;用一阶频繁项构造二阶候选项;扫描数据库对二阶候选项进行计数,删除其中的非频繁项,
7、得到二阶频繁项;然后构造三阶候选项,以此类推,直到无法构造更高阶的候选项,或到达频繁项集的最大长度限制。Apriori算法的示意流程如下图所示:如何从k阶的频繁项集生成k+1阶候选项集:自连接+裁剪(若k+1阶候选项的k阶子集中至少有一个不存在于k阶频繁项集中,则裁剪Apriori裁剪规则,又称向下闭合特性)表示事务集:T1:A,B,E 1 1 0 0 1T2:B,D 0 1 0 1 0T3:B,C 0 1 1 0 0 T4:A,B,D 1 1 0 1 0T5:A,C 1 0 1 0 0T6:B,C 0 1 1 0 0T7:A,C 1 0 1 0 0T8:A,B,C,E 1 1 1 0 1T9
8、:A,B,C 1 1 1 0 0计算项集的支持度:代码:function sup = compute_sup(S,D)n,m=size(D);sup=0; for i=1:n if all(D(i,:)-S)=0)=true sup=sup+1; endend sup = sup/nend验证:计算项集的置信度:代码:function conf = compute_conf(R,D) conf=compute_sup(abs(R),D)/compute_sup(abs(R)-R)/2,D); endApriori.m 代码:function R,SupR,Conf=Aprior(D,min_s
9、up,min_conf) m,n=size(D);L=;C=;Lk=;Ck=;Sup=;%频繁集L的支持度系数矩阵for k=1:n, if (k=1) Ck=eye(n); else p=size(Lk,1);%1,获取矩阵的行数 Ck=; for i=1:p-1%find()位置的判定:在矩阵中,第一列开始,自上而下,依次为1,2,3.,然后再从第二列,第三列依次往后数) for j=i+1:p indi=find(Lk(i,:)=1); indj=find(Lk(j,:)=1); if all(indi(1:end-1)=indj(1:end-1) & (indi(end)=indj(e
10、nd) Ck=Ck;Lk(i,:) | Lk(j,:); end; end; end end; q=size(Ck,1);%获取矩阵的行数,即C1的项集 Supk=zeros(q,1);%产生q1的零矩阵 for i=1:q%CK的行数 for j=1:m%D的行数 if all(D(j,:)-Ck(i,:)=0)%D的行-CK的行,若大于0则说明包含 Supk(i)=Supk(i)+1;%supk的第i行加1 end; end; end; ind=find(Supk=min_sup*m); Sup=Sup;Supk(ind,:);%把支持度系数放到Sup矩阵中,第二个算法要用到 Lk=Ck(
11、ind,:); L=L;Lk; end; R,SupR,Conf=find_rule(D,L,Sup,min_conf);Find_rule.mfunction R,SupR,Conf=find_rule(D,L,Sup,min_conf)R=;Conf=;SupR=;m,n=size(L);g,h=size(D);for i=1:m%i是L的第i行,比如i=13,1,1,0,0,1 rowLi=sum(L(i,:)0);%rowLi是L第i行含1的个数 rowLi=3 if(rowLi1) ind=find(L(i,:)=1);%ind是L第i行含1的下标矩阵 ind=1,2,5 for j
12、=1:rowLi-1 %j=1,j=2 nchoosei=nchoosek(ind,j);%1,2,512,15,25 a,b=size(nchoosei);%a=3,b=1/a=3,b=2 for x=1:a line_temp=zeros(1,n);%一个15的零矩阵, lineL=L(i,:);%L的第i行 for y=1:b lineL(1,nchoosei(x,y)=-1;%每次循环将L的第i个集项的一个非空子集当成条件改成-1 line_temp(1,nchoosei(x,y)=1;%把零矩阵中条件项所在的位置改成1,用于接下来算该规则的置信度 end for z=1:m if a
13、ll(line_temp-L(z,:)=0)%找在条件在频繁集中的所在的行数 confi=Sup(i,1)/Sup(z,1);%因为Sup矩阵和L各项的位置一一对应,用找到的行数从频繁集的支持度系数矩阵中找到条件集项的支持度 if(confi=min_conf)%判断算出的置信度是否满足最小置信度 R=R;lineL;%若是,将lineL加入R中 Conf=Conf;confi;%将置信度加入Conf中 SupR=SupR;Sup(i,1)/g;%将支持度加入SupR中 end end end end end endend验证:第三次上机训练报告代码:function y0 = newID3(
14、X,x0) %X为训练集,其中一行为一个样本,最后一列为分类 %x0为新样本,因新样本尚未确定分类,故将最后一个值定为-1 n,m=size(X); xy=max(X(:,m); %xy为X的最后一列即分类的最大值 H=; %定义H用于存储各个属性的后验熵 %对第k个属性进行计算- for k=1:m-1 xx=max(X(:,k); %xx为X的第k个属性的最大取值 G=zeros(xy,xx); %G为第k个属性的信息增益矩阵 for i=1:xy for j=1:xx G(i,j)=length(find(X(:,k)=j & X(:,m)=i); end; end; %得到第k个属性的
15、信息增益矩阵G HUV=0; for i=1:size(G,2) %i为xk的列 HUV=HUV+sum(G(:,i)/n.*entropy(X(:,i); end; %得到第k个属性的后验熵 H=H,HUV; %得到每一个属性的信息增益并存储在向量H中 end %第k个属性计算完毕 miny,mH=min(H); %取得后验熵最小的属性的列数 X(find(X(:,mH)=x0(mH),:)=; % X(:,mH)=; % %注:不可颠倒 %将X裁小 if min(X(:,size(X,2) = max(X(:,size(X,2) y0 = miny; return; end; %若Y值只剩
16、一个,则退出循环返回y0 y0 = ID3(X,x0); %函数重新调用自己function r = entropy(z)s=sum(z);r=0;for ri=1:length(z) r=r-z(ri)/s.*log2(z(ri)/s);end;验证:第四次上机训练报告代码:function z=my_fun(x)z=x*sin(10*pi*x)+2;z=-z;end options = gaoptimset(Generations,200,PopulationSize,20,PlotFcns,gaplotbestf,StallGenLimit, 200); options.Generations = 2000; %最大迭代数设为2000 X,FVAL,EXITFLAG,OUTPUT =ga(my_fun, 1 , ,2,-1,options); Optimization terminated: average change in the fitness value less than options.TolFun.运行结果如图versicolor类和非versicolor类线性核函数径向基核函数virginica类和非virginica类线性基函数径向基函数
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1