数据挖掘上机报告.docx

上传人:b****7 文档编号:8982123 上传时间:2023-02-02 格式:DOCX 页数:35 大小:1,017.82KB
下载 相关 举报
数据挖掘上机报告.docx_第1页
第1页 / 共35页
数据挖掘上机报告.docx_第2页
第2页 / 共35页
数据挖掘上机报告.docx_第3页
第3页 / 共35页
数据挖掘上机报告.docx_第4页
第4页 / 共35页
数据挖掘上机报告.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

数据挖掘上机报告.docx

《数据挖掘上机报告.docx》由会员分享,可在线阅读,更多相关《数据挖掘上机报告.docx(35页珍藏版)》请在冰豆网上搜索。

数据挖掘上机报告.docx

数据挖掘上机报告

数据挖掘实验上机报告

 

课程名称数据挖掘

学生学院管理学院__

专业班级

学号

学生姓名_____

指导教师________刘国胜老师_______

 

2016年6月

第一次上机训练内容

一、基础训练(以下内容可参考课件)

1、创建标量、行向量、列向量、矩阵;

标量——单个数据

行向量——一行数据

列向量——一列数据

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

2、基本函数与操作;

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

向量的长度、

转置、

各元素之和、

最大值、

最小值

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

创建一个二维矩阵

取出矩阵的某一个元素、

某一行、

某一列、

某一子矩阵

 

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

接后的新矩阵;

创建两个二维方阵,

 

计算两个矩阵的和、

积、

点积,

计算两个矩阵横向连接

纵向连接新矩阵;

 

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

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

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

代码:

function[hechajishang]=Compute4(a,b)

%UNTITLED´Ë´¦ÏÔʾÓйش˺¯ÊýµÄÕªÒª

%´Ë´¦ÏÔʾÏêϸ˵Ã÷

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

fori=2:

c

if(a(i)>a(i-1))

bb=bb+a(i)

end

end

代码验证:

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

径指向此文件夹

第二次上机训练内容

本次上机主要训练如何实现关联规则Apriori算法,训练前需掌握如何按算法流程对实

例进行手工计算,例如,之前布置的课后作业:

•已知交易记录数据库D中有9条交易记录(事务):

•T1:

A,B,ET2:

B,DT3:

B,CT4:

A,B,D

•T5:

A,CT6:

B,CT7:

A,CT8:

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,E11001

T2:

B,D01010

T3:

B,C01100

T4:

A,B,D11010

T5:

A,C10100

T6:

B,C01100

T7:

A,C10100

T8:

A,B,C,E11101

T9:

A,B,C11100

计算项集的支持度:

代码:

function[sup]=compute_sup(S,D)

[n,m]=size(D);

sup=0;

fori=1:

n

ifall((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的支持度系数矩阵

fork=1:

n,

if(k==1)

Ck=eye(n);

else

p=size(Lk,1);%1,获取矩阵的行数

Ck=[];

fori=1:

p-1%find()位置的判定:

在矩阵中,第一列开始,自上而下,依次为1,2,3...,然后再从第二列,第三列依次往后数)

forj=i+1:

p

indi=find(Lk(i,:

)==1);

indj=find(Lk(j,:

)==1);

ifall(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的零矩阵

fori=1:

q%CK的行数

forj=1:

m%D的行数

ifall(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);

fori=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]

forj=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

forx=1:

a

line_temp=zeros(1,n);%一个1×5的零矩阵,

lineL=L(i,:

);%L的第i行

fory=1:

b

lineL(1,nchoosei(x,y))=-1;%每次循环将L的第i个集项的一个非空子集当成条件改成-1

line_temp(1,nchoosei(x,y))=1;%把零矩阵中条件项所在的位置改成1,用于接下来算该规则的置信度

end

forz=1:

m

ifall(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

end

end

验证:

第三次上机训练报告

代码:

functiony0=newID3(X,x0)

%X为训练集,其中一行为一个样本,最后一列为分类

%x0为新样本,因新样本尚未确定分类,故将最后一个值定为-1

[n,m]=size(X);

xy=max(X(:

m));%xy为X的最后一列即分类的最大值

H=[];%定义H用于存储各个属性的后验熵

%对第k个属性进行计算-->

fork=1:

m-1

xx=max(X(:

k));%xx为X的第k个属性的最大取值

G=zeros(xy,xx);%G为第k个属性的信息增益矩阵

fori=1:

xy

forj=1:

xx

G(i,j)=length(find(X(:

k)==j&X(:

m)==i));

end;

end;

%得到第k个属性的信息增益矩阵G

HUV=0;

fori=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))',:

)=[];%<1>

X(:

mH)=[];%<2>

%注:

<1><2>不可颠倒

%将X裁小

ifmin(X(:

size(X,2)))==max(X(:

size(X,2)))

y0=miny;

return;

end;

%若Y值只剩一个,则退出循环返回y0

y0=ID3(X,x0);

%函数重新调用自己

functionr=entropy(z)

s=sum(z);

r=0;

forri=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);Optimizationterminated:

averagechangeinthefitnessvaluelessthanoptions.TolFun.

运行结果如图

versicolor类和非versicolor类

线性核函数

径向基核函数

virginica类和非virginica类

线性基函数

径向基函数

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1