数据挖掘上机报告 - 图文

更新时间:2024-03-18 00:45:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数据挖掘实验上机报告

课程名称 数据挖掘 学生学院 管理学院 __ 专业班级

学 号 学生姓名_____

指导教师________刘国胜老师_______

2016 年 6 月

第一次上机训练内容

一 、 基础训练 ( 以下内容可参考课件 ) 1、 创建标量、行向量、列向量、矩阵;

标量——单个数据

行向量——一行数据

列向量——一列数据

矩阵——m行n列的二维数据

2、基本函数与操作;

(1)创建一个向量(数组),求出向量的长度、转置、各元素之和、最大值、最小值;

向量的长度、

转置、

各元素之和、

最大值、

最小值

(2)创建一个二维矩阵,取出矩阵的某一个元素、某一行、某一列、某一子矩阵;

创建一个二维矩阵

取出矩阵的某一个元素、

某一行、

某一列、

某一子矩阵

(3)创建两个二维方阵,计算两个矩阵的和、积、点积,计算两个矩阵横向连接和纵向连 接后的新矩阵; 创建两个二维方阵,

计算两个矩阵的和、

积、

点积,

计算两个矩阵横向连接

纵向连接新矩阵;

(4)创建一个向量,找出向量中所有大于 0 的元素的下标。

3、自定义函数(可在帮助文件中搜索关于 function 的帮助文档)

(1)自定义一个函数,输入为两个实数,输出为此两个数的和、差、积、商; 代码:

function [he cha ji shang] = Compute4(a,b) %UNTITLED ′?′|??ê?óD1?′?oˉêyμ??aòa % ′?′|??ê??ê???μ?÷ he=a+b cha=a-b ji=a*b shang=a/b end

代码验证:

>> c=Compute4(4,5)

(2)自定义一个函数,输入为一个区间的左边界、右边界和步长,以该步长在此区间内绘 制出函数 f(x)=x*sin(x)的图像; 代码:

function [z] = Image01(a,b,c) x=a:c:b y=x.*sin(x) z=plot(x,y) end

验证:

图像

(3)自定义一个函数,输入为一个向量,输出为向量中所有比前一个元素大的当前元素之 和。 代码:

function [bb] = Sum01(a)

c=length(a) bb=0 for i=2:c

if (a(i)>a(i-1)) bb=bb+a(i) end end

代码验证:

4、自定义一个文件夹,将以上所有自定义函数放入此文件夹中,并让 matlab 程序的当前路

径指向此文件夹

第二次上机训练内容

本次上机主要训练如何实现关联规则 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)其次考虑创建两个函数,分别计算项集的支持度和可信度; (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,D?B。

2、创建的计算支持度的函数有如下形式: 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算法的基本过程是:

扫描一遍数据库,得到一阶频繁项;用一阶频繁项构造二阶候选项;扫描数据库对二阶候选项进行计数,删除其中的非频繁项,得到二阶频繁项;然后构造三阶候选项,以此类推,直到无法构造更高阶的候选项,或到达频繁项集的最大长度限制。Apriori算法的示意流程如下图所示:

如何从k阶的频繁项集生成k+1阶候选项集:自连接+裁剪(若k+1阶候选项的k阶子集中至少有一个不存在于k阶频繁项集中,则裁剪——Apriori裁剪规则,又称向下闭合特性)

表示事务集:

T1:A,B,E 1 1 0 0 1 T2:B,D 0 1 0 1 0 T3:B,C 0 1 1 0 0 T4:A,B,D 1 1 0 1 0 T5:A,C 1 0 1 0 0 T6:B,C 0 1 1 0 0 T7:A,C 1 0 1 0 0 T8:A,B,C,E 1 1 1 0 1 T9: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; end end

sup = sup/n end

验证:

计算项集的置信度: 代码:

function [conf] = compute_conf(R,D)

conf=compute_sup(abs(R),D)/compute_sup((abs(R)-R)/2,D); end

Apriori.m 代码:

function [R,SupR,Conf]=Aprior(D,min_sup,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(end)) Ck=[Ck;Lk(i,:) | Lk(j,:)]; end;

end; end end;

q=size(Ck,1);%获取矩阵的行数,即C1的项集 Supk=zeros([q,1]);%产生q×1的零矩阵 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(ind,:);

L=[L;Lk]; end;

[R,SupR,Conf]=find_rule(D,L,Sup,min_conf);

Find_rule.m

function [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(rowLi>1)

ind=find(L(i,:)==1);%ind是L第i行含1的下标矩阵 ind=[1,2,5] for j=1:rowLi-1 %j=1,j=2

nchoosei=nchoosek(ind,j);%[1,2,5][12,15,25] [a,b]=size(nchoosei);%a=3,b=1/a=3,b=2 for x=1:a

line_temp=zeros(1,n);%一个1×5的零矩阵, 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

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类 线性基函数

径向基函数

本文来源:https://www.bwwdw.com/article/pkf8.html

Top