叶志伟数据挖掘实验指导书(算法编程部分)
- 格式:doc
- 大小:334.50 KB
- 文档页数:40
实验一 ID3算法实现一、实验目的通过编程实现决策树算法,信息增益的计算、数据子集划分、决策树的构建过程。
加深对相关算法的理解过程。
实验类型:验证计划课间:4学时二、实验内容1、分析决策树算法的实现流程;2、分析信息增益的计算、数据子集划分、决策树的构建过程;3、根据算法描述编程实现算法,调试运行;4、对所给数据集进行验算,得到分析结果。
三、实验方法算法描述:以代表训练样本的单个结点开始建树;若样本都在同一个类,则该结点成为树叶,并用该类标记;否则,算法使用信息增益作为启发信息,选择能够最好地将样本分类的属性;对测试属性的每个已知值,创建一个分支,并据此划分样本;算法使用同样的过程,递归形成每个划分上的样本决策树递归划分步骤,当下列条件之一成立时停止:给定结点的所有样本属于同一类;没有剩余属性可以进一步划分样本,在此情况下,采用多数表决进行四、实验步骤1、算法实现过程中需要使用的数据结构描述:Struct{int Attrib_Col; // 当前节点对应属性int Value; // 对应边值Tree_Node* Left_Node; // 子树Tree_Node* Right_Node // 同层其他节点Boolean IsLeaf; // 是否叶子节点int ClassNo; // 对应分类标号}Tree_Node;2、整体算法流程主程序:InputData();T=Build_ID3(Data,Record_No, Num_Attrib);OutputRule(T);释放内存;3、相关子函数:3.1、 InputData(){输入属性集大小Num_Attrib;输入样本数Num_Record;分配内存Data[Num_Record][Num_Attrib];输入样本数据Data[Num_Record][Num_Attrib];获取类别数C(从最后一列中得到);}3.2、Build_ID3(Data,Record_No, Num_Attrib){Int Class_Distribute[C];If (Record_No==0) { return Null }N=new tree_node();计算Data中各类的分布情况存入Class_Distribute Temp_Num_Attrib=0;For (i=0;i<Num_Attrib;i++)If (Data[0][i]>=0) Temp_Num_Attrib++;If Temp_Num_Attrib==0{N->ClassNo=最多的类;N->IsLeaf=TRUE;N->Left_Node=NULL;N->Right_Node=NULL;Return N;}If Class_Distribute中仅一类的分布大于0{N->ClassNo=该类;N->IsLeaf=TRUE;N->Left_Node=NULL;N->Right_Node=NULL;Return N;}InforGain=0;CurrentCol=-1;For i=0;i<Num_Attrib-1;i++){TempGain=Compute_InforGain(Data,Record_No,I,Num_Attrib); If (InforGain<TempGain){ InforGain=TempGain; CurrentCol=I;}}N->Attrib_Col=CurrentCol;//记录CurrentCol所对应的不同值放入DiferentValue[];I=0;Value_No=-1;While i<Record_No {Flag=false;For (k=0;k<Value_No;k++)if (DiferentValu[k]=Data[i][CurrentCol]) flag=true;if (flag==false){Value_No++;DiferentValue[Value_No]=Data[i][CurrentCol] } I++;}SubData=以Data大小申请内存空间;For (i=0;i<Value_No;i++){k=-1;for (j=0;j<Record_No-1;j++)if (Data[j][CurrentCol]==DiferentValu[i]){k=k++;For(int i1=0;i1<Num_Attrib;i1++)If (i1<>CurrentCol)SubData[k][i1]=Data[j][i1];Else SubData[k][i1]=-1;}N->Attrib_Col=CurrentCol;N->Value=DiferentValu[i];N->Isleaf=false;N->ClassNo=0;N->Left_Node=Build_ID3(SubData,k+1, Num_Attrib);N->Right_Node=new Tree_Node;N=N->Right_Node;}}3.3、计算信息增益Compute_InforGain(Data,Record_No, Col_No, Num_Attrib) {Int DifferentValue[MaxDifferentValue];Int Total_DifferentValue;Int s[ClassNo][MaxDifferentValue];s=0;// 数组清0;Total_DifferentValue=-1;For (i=0;i<Record_No;i++){J=GetPosition(DifferentValue,Total_DifferentValue,Data[i][Col_no]);If (j<0) {Total_DifferentValue++;DifferentValue[Total_DifferentValue]=Data[i][Col_no];J=Total_DifferentValue;}S[Data[i][Num_Attrib-1]][j]++;}Total_I=0;For (i=0;i<ClassNo;i++){Sum=0;For(j=0;j<Record_No;j++) if Data[j][Num_Attrib-1]==i sum++; Total_I=Compute_PI(Sum/Record_No);}EA=0;For (i=0;i<Total_DifferentValue;i++);{ temp=0;sj=0; //sj是数据子集中属于类j的样本个数;For (j=0;j<ClassNO;j++)sj+=s[j][i];For (j=0;j<ClassNO;j++)EA+=sj/Record_No*Compute_PI(s[j][i]/sj);}Return total_I-EA;}3.4、得到某数字在数组中的位置GetPosition(Data, DataSize,Value){For (i=0;i<DataSize;i++) if (Data[i]=value) return I;Return -1;}3.5、计算Pi*LogPiFloat Compute_PI(float pi){If pi<=0 then return 0;If pi>=1 then return 0;Return 0-pi*log2(pi);}五、实验报告要求1、用C语言实现上述相关算法(可选择利用matlab函数实现)2、实验操作步骤和实验结果,实验中出现的问题和解决方法。
《数据仓库与数据挖掘》实验指导书主编张磊审校2012-1-11目录实验报告模板 (1)实验一、SSIS教程1-3课 (3)实验二、SSAS教程1-3课 (5)实验三、数据挖掘教程 (10)实验报告模板见下页。
青岛大学实验报告年月日姓名系年级组别同组者科目题目仪器编号[注:下面空白处明确实验目的、内容和要求,简要概括实验过程,适量拷屏部分关键界面放到实验报告中,评价最终结果是否正确,记录实验过程遇到的问题及解决结果,简单总结心得体会。
必要时加页,每个实验报告1-3页篇幅为宜。
]实验一、SSIS教程1-3课实验目的:采用SQL Server 2005的Integration Service,熟悉ETL工具的功能和使用方法实验内容:结合教材的ETL知识,打开SQL Server 2005的SSIS教程,按教程步骤完成1-3课,4学时,其中第1课2学时,第2、3课2学时。
实验要求:每次实验课结束前5分钟关闭SQL Server Business Intelligence Development Studio和SQL Server Management Studio,将项目文件夹拷贝到U盘或压缩后发到自己邮箱保存起来,以便下次实验课可以继续往下做或最后上交。
每次实验课开始时先使用SQL Server Configuration Manager启动必需的SQL Server 服务。
按时完成实验内容,整理实验报告。
实验说明:注意SQL Server 2005与SQL Server 2000的差异,如“框架”,访问表时必须使用框架名来限定,如SalesOrders.Employee;注意因中文教程是由英文教程翻译而来,所以有些地方出现名称翻译不足(即软件界面上是中文而教程中是英文)或过翻译(即软件界面上是英文而教程中是中文),因为大家懂英文所以这点应该不成问题;注意因为我们安装的SQL Server不是采用默认实例名(而是DWDM),而教程中假设的是采用默认实例名,所以有些地方的配置受到影响,需要进行更改;注意解决方案、项目和项的区别:解决方案可以包含多个项目;每个项目包含一个或多个项;按下图打开SSIS教程,做的过程中,注意以下问题:(1)创建的项目放到一个方便找到的自定义文件夹中以便每次下课时可以拷贝带走(2)第1课的“添加和配置平面文件连接管理器”步骤中的“重新映射列数据类型”部分,将【但现在,请不要进行任何更改,单击“取消”返回“平面文件连接管理器编辑器”对话框的“高级”窗格,查看建议的列数据类型。
数据挖掘实验报告-实验1-W e k a基础操作学生实验报告学院:信息管理学院课程名称:数据挖掘教学班级: B01姓名:学号:实验报告课程名称数据挖掘教学班级B01 指导老师学号姓名行政班级实验项目实验一: Weka的基本操作组员名单独立完成实验类型■操作性实验□验证性实验□综合性实验实验地点H535 实验日期2016.09.281. 实验目的和要求:(1)Explorer界面的各项功能;注意不能与课件上的截图相同,可采用打开不同的数据文件以示区别。
(2)Weka的两种数据表格编辑文件方式下的功能介绍;①Explorer-Preprocess-edit,弹出Viewer对话框;②Weka GUI选择器窗口-Tools | ArffViewer,打开ARFF-Viewer窗口。
(3)ARFF文件组成。
2.实验过程(记录实验步骤、分析实验结果)2.1 Explorer界面的各项功能2.1.1 初始界面示意其中:explorer选项是数据挖掘梳理数据最常用界面,也是使用weka最简单的方法。
Experimenter:实验者选项,提供不同数值的比较,发现其中规律。
KnowledgeFlow:知识流,其中包含处理大型数据的方法,初学者应用较少。
Simple CLI :命令行窗口,有点像cmd 格式,非图形界面。
2.1.2 进入Explorer 界面功能介绍(1)任务面板Preprocess(数据预处理):选择和修改要处理的数据。
Classify(分类):训练和测试分类或回归模型。
Cluster(聚类):从数据中聚类。
聚类分析时用的较多。
Associate(关联分析):从数据中学习关联规则。
Select Attributes(选择属性):选择数据中最相关的属性。
Visualize(可视化):查看数据的二维散布图。
(2)常用按钮Openfile:打开文件Open URL:打开URL格式文件Open DB:打开数据库文件Generate:数据生成Undo:撤销操作Edit:编辑数据Save:保存数据文件,可实现文件格式的转换,比如csv 格式文件向ARFF格式文件转换等等。
潘怡编著《数据仓库与数据挖掘》课程实验指导书长沙学院计算机科学与技术系2009年9月前言本书是《数据仓库与数据挖掘》课程及《数据分析与挖掘》的实验指导书。
全书分为三个部分,第一部分为实验内容对每个实验的实验目的、实验类型、实验学时、实验原理及知识点、实验环境(硬件环境、软件环境)和实验内容及步骤进行简单介绍,第二部分为实验指导对每个实验的实验方法,实验步骤及补充的实验知识进行详细介绍,第三部分为实验报告。
本实践课程主要介绍数据仓库的工作机理及其构建过程,。
要求学生熟练使用数据库管理系统MS SQL Server,掌握典型的数据仓库系统及其开发工具的使用,理解数据挖掘的工作原理与流程,掌握典型数据挖掘技术及其工具的使用方法,熟悉SQL SERVER BI DE V集成挖掘环境。
要求学生实验前认真准备,实验后提供实验报告,给出详细设计方法以及设计依据。
实验报告的格式应采用统一封面,统一的实验报告纸。
封面应包括:课程名称、实验序号、名称、专业、班级、姓名、同组实验者、实验时间。
实验报告内容应包括:实验名称、目的、内容、实验步骤、实验记录、数据处理(或原理论证、或实验现象描述、或结构说明等)。
目录第一部分实验内容实验1:实践SQL Server数据多维分析环境实验2:实践关联规则挖掘方法实验3:实践决策树挖掘方法实验4:实践聚类挖掘方法实验5:实践神经网络挖掘方法第二部分实验指导实验1:实践SQL Server数据多维分析环境实验2:实践关联规则挖掘方法实验3:实践决策树挖掘方法实验4:实践聚类挖掘方法实验5:实践神经网络挖掘方法第三部分实验报告第一部分实验内容实验1:实践SQL Server数据多维分析环境一.实验目的学习和掌握Sql Server 2005 Analysis Services 工具集,包括如何在BI Development Studio 的Analysis Services 项目中定义数据源、数据源视图、维度、属性、层次结构和多维数据集,如何查看多维数据集和维度,理解并掌握OLAP分析的基本过程与方法。
叶志伟数据挖掘实验指导书(算法编程部分)-CAL-FENGHAI.-(YICAI)-Company One1《数据挖掘与数据仓库》实验指导书2013年计算机学院计算应用实验1 Apriori算法实现一、实验目的1、掌握Apriori算法对于关联规则挖掘中频繁集的产生以及关联规则集合的产生过程;2、根据算法描述编程实现算法,调试运行。
并结合相关实验数据进行应用,得到分析结果。
数据和删除数据的操作。
实验类型:综合计划课间:2学时二、实验内容1、频繁项集的生成与Apriori算法实现;2、关联规则的生成过程与Rule-generate算法实现;3、结合样例对算法进行分析;三、实验步骤编写程序完成下列算法:1、Apriori算法输入:数据集D;最小支持数minsup_count;输出:频繁项目集LL1={large 1-itemsets}For (k=2; Lk-1≠Φ; k++)Ck=apriori-gen (Lk-1); // Ck是k个元素的候选集For all transactions t∈D dobegin Ct=subset(Ck,t); //Ct是所有t包含的候选集元素for all candidates c ∈Ct do c.count++;endLk={c ∈Ck| c.count ≧ minsup_count }EndL=∪Lk;2、apriori-gen (Lk-1) 候选集产生算法输入: (k-1)-频繁项目集Lk-1输出: k-频繁项目集CkFor all itemset p∈Lk-1 doFor all itemset q∈Lk-1 doIf p.item1=q.item1, p.item2=q.item2, …,p.itemk-2=q.itemk-2, p.itemk-1<q.itemk-1thenbegin c=p∞qif has_infrequent_subset(c, Lk-1)then delete celse add c to CkEndReturn Ck3、has_infrequent_subset(c, Lk-1)功能:判断候选集的元素输入:一个k-频繁项目集Lk-1 ,(k-1)-频繁项目集Lk-1输出:c是否从候选集中删除的布尔判断For all (k-1)-subsets of c doIf Not(S∈Lk-1) THEN return TRUE;Return FALSE;4、Rule-generate(L,minconf)输入:频繁项目集;最小信任度输出:强关联规则算法:FOR each frequent itemset lk in Lgenerules(lk,lk);5、Genrules递归算法:Genrules(lk:frequent k-itemset, xm:frequent m-itemset)X={(m-1)-itemsets xm-1 | xm-1 in xm};For each xm-1 in XBEGIN conf=support(lk)/support(xm-1);IF (conf≧minconf) THENBEGIN输出规则:xm-1->(lk-xm-1),support,confidence;IF (m-1)>1) THEN genrules(lk,xm-1);END;END;结合相关样例数据对算法进行调试,并根据相关实验结果对数据进行分析,四、实验报告要求1、用C语言或者其他语言实现上述相关算法。
《数据挖掘与数据仓库》实验指导书2013年计算机学院计算应用实验1 Apriori算法实现一、实验目的1、掌握Apriori算法对于关联规则挖掘中频繁集的产生以及关联规则集合的产生过程;2、根据算法描述编程实现算法,调试运行。
并结合相关实验数据进行应用,得到分析结果。
数据和删除数据的操作。
实验类型:综合计划课间:2学时二、实验内容1、频繁项集的生成与Apriori算法实现;2、关联规则的生成过程与Rule-generate算法实现;3、结合样例对算法进行分析;三、实验步骤编写程序完成下列算法:1、Apriori算法输入:数据集D;最小支持数minsup_count;输出:频繁项目集LL1={large 1-itemsets}For (k=2; Lk-1≠Φ; k++)Ck=apriori-gen (Lk-1); // Ck是k个元素的候选集For all transactions t∈D dobegin Ct=subset(Ck,t); //Ct是所有t包含的候选集元素for all candidates c ∈Ct do c.count++;endLk={c ∈Ck| c.count ≧ minsup_count }EndL=∪Lk;2、apriori-gen (Lk-1) 候选集产生算法输入: (k-1)-频繁项目集Lk-1输出: k-频繁项目集CkFor all itemset p∈Lk-1 doFor all itemset q∈Lk-1 doIf p.item1=q.item1, p.item2=q.item2, …,p.itemk-2=q.itemk-2, p.itemk-1<q.itemk-1 thenbegin c=p∞qif has_infrequent_subset(c, Lk-1)then delete celse add c to CkEndReturn Ck3、has_infrequent_subset(c, Lk-1)功能:判断候选集的元素输入:一个k-频繁项目集Lk-1 ,(k-1)-频繁项目集Lk-1输出:c是否从候选集中删除的布尔判断For all (k-1)-subsets of c doIf Not(S∈Lk-1) THEN return TRUE;Return FALSE;4、Rule-generate(L,minconf)输入:频繁项目集;最小信任度输出:强关联规则算法:FOR each frequent itemset lk in Lgenerules(lk,lk);5、Genrules递归算法:Genrules(lk:frequent k-itemset, xm:frequent m-itemset)X={(m-1)-itemsets xm-1 | xm-1 in xm};For each xm-1 in XBEGIN conf=support(lk)/support(xm-1);IF (conf≧minconf) THENBEGIN输出规则:xm-1->(lk-xm-1),support,confidence;IF (m-1)>1) THEN genrules(lk,xm-1);END;END;结合相关样例数据对算法进行调试,并根据相关实验结果对数据进行分析,四、实验报告要求1、用C语言或者其他语言实现上述相关算法。
数据挖掘技术与应用 实 验 报 告专业:_______________________班级:_______________________学号:_______________________姓名:_______________________2012-2013学年 第二学期经济与管理学院实验名称:SPSS Clementine 软件安装、功能演练指导教师: 实验日期: 成绩:实验目的1、熟悉SPSS Clementine 软件安装、功能和操作特点。
2、了解SPSS Clementine 软件的各选项面板和操作方法。
3、熟练掌握SPSS Clementine 工作流程。
实验内容1、打开SPSS Clementine 软件,逐一操作各选项,熟悉软件功能。
2、打开一有数据库、或新建数据文件,读入SPSS Clementine,并使用各种输出节点,熟悉数据输入输出。
(要求:至少做access数据库文件、excel文件、txt文件、可变文件的导入、导出)实验步骤一 实验前准备:1.下载SPSS Clementine 软件安装包和一个虚拟光驱。
2.选择任意盘区安装虚拟光驱,并把下载的安装包的文件(后缀名bin)添加到虚拟光驱上,然后双击运行。
3.运行安装完成后,把虚拟光驱中CYGiSO文件中的lservrc文件和PlatformSPSSLic7.dll文件复制替换到安装完成后的bin文件中,完成破解,获得永久免费使用权。
4.运行中文破解程序,对SPSS Clementine 软件进行汉化。
二 实验操作:从 Windows 的“开始”菜单中选择:所有程序/SPSS 1、启动 Clementine:Clementine 12.0/SPSS Clementine client 12.02、Clementine窗口当第一次启动 Clementine 时,工作区将以默认视图打开。
中中,这将是用来工作的主要区域。
间的区域称作流工作区。
数据挖掘实验报告-数据预处理数据挖掘实验报告数据预处理一、实验目的本次实验的主要目的是深入了解和掌握数据预处理在数据挖掘过程中的重要性及相关技术,通过对实际数据集的处理,提高数据质量,为后续的数据挖掘和分析工作奠定良好的基础。
二、实验背景在当今数字化时代,数据的规模和复杂性不断增加,而原始数据往往存在着各种问题,如缺失值、噪声、异常值、不一致性等。
这些问题如果不加以处理,将会严重影响数据挖掘算法的性能和结果的准确性。
因此,数据预处理成为了数据挖掘过程中不可或缺的重要环节。
三、实验数据集本次实验使用了一个名为“销售数据”的数据集,该数据集包含了某公司在过去一年中不同产品的销售记录,包括产品名称、销售日期、销售数量、销售价格、客户信息等字段。
四、数据预处理技术(一)数据清洗1、处理缺失值首先,对数据集中的缺失值进行了识别和分析。
通过观察发现,“客户信息”字段存在部分缺失。
对于这些缺失值,采用了两种处理方法:一是如果缺失比例较小(小于5%),直接删除含有缺失值的记录;二是如果缺失比例较大,采用均值填充的方法进行补充。
2、处理噪声数据数据中的噪声通常表现为数据中的错误或异常值。
通过对销售数量和销售价格的观察,发现了一些明显不合理的数值,如销售数量为负数或销售价格过高或过低的情况。
对于这些噪声数据,采用了基于统计的方法进行识别和处理,将超出合理范围的数据视为噪声并进行删除。
(二)数据集成由于原始数据集可能来自多个数据源,存在着重复和不一致的问题。
在本次实验中,对“销售数据”进行了集成处理,通过对关键字段(如产品名称、销售日期)的比较和合并,消除了重复的记录,并确保了数据的一致性。
(三)数据变换1、数据标准化为了消除不同字段之间量纲的影响,对销售数量和销售价格进行了标准化处理,使其具有可比性。
2、数据离散化对于连续型的数据字段,如销售价格,采用了等宽离散化的方法将其转换为离散型数据,以便于后续的数据挖掘算法处理。
《商务数据分析》实验指导书(适用于国际经济与贸易专业)江西财经大学国际经贸学院编写人:戴爱明目录前言 (1)实验一、SPSS Clementine 软件功能演练 (5)实验二、SPSS Clementine 数据可视化 (9)实验三、决策树C5.0 建模 (17)实验四、关联规则挖掘 (28)实验五、聚类分析(异常值检测) (35)前言一、课程简介商务数据分析充分利用数据挖掘技术从大量商务数据中获取有效的、新颖的、潜在有用的、最终可理解的模式的非平凡过程。
数据挖掘的广义观点:数据挖掘就是从存放在数据库,数据仓库或其他信息库中的大量的数据中“挖掘”有趣知识的过程。
数据挖掘,又称为数据库中知识发现(Knowledge Discovery in Database, KDD),因此,数据挖掘和数据仓库的协同工作,一方面,可以迎合和简化数据挖掘过程中的重要步骤,提高数据挖掘的效率和能力,确保数据挖掘中数据来源的广泛性和完整性。
另一方面,数据挖掘技术已经成为数据仓库应用中极为重要和相对独立的方面和工具。
数据挖掘有机结合了来自多学科技术,其中包括:数据库、数理统计、机器学习、高性能计算、模式识别、神经网络、数据可视化、信息检索、图像与信号处理、空间数据分析等,这里我们强调商务数据分析所处理的是大规模数据,且其算法应是高效的和可扩展的。
通过数据分析,可从数据库中挖掘出有意义的知识、规律,或更高层次的信息,并可以从多个角度对其进行浏览察看。
所挖掘出的知识可以帮助进行商务决策支持。
当前商务数据分析应用主要集中在电信、零售、农业、网络日志、银行等方面。
二、课程的任务和实验的教学目标课程编号:课程属性:专业任选课实验学时:8适用专业:国际经济与贸易先修课程:数据库技术、概率论与数理统计、统计学《商务数据分析》是一门理论和实践相结合的课程,其上机实验的目的主要是实现数据挖掘的主要算法,训练学生实际动手进行数据挖掘设计和软件应用的能力,加深对数据挖掘相关概念和算法的理解。
机器学习与数据挖掘实验报告一、第一部分: 实验综述二、实验工具介绍三、WEKA是新西兰怀卡托大学开发的开源项目, 全名是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis)。
WEKA是由JAVA编写的, 它的源代码可通过/ml/weka/得到, 是一款免费的, 非商业化的机器学习以及数据挖掘软件。
WEKA作为一个公开的数据挖掘工作平台, 集合了大量能承担数据挖掘任务的学习算法, 包括对数据进行预处理, 分类, 回归, 聚类, 关联规则以及在新的交互式界面上的可视化。
数据挖掘就是通过分析存在于数据库里的数据来解决问题, WEKA的出现使得数据挖掘无需编程即可轻松搞定。
四、实验环境搭建在PC机上面安装java运行环境即JDK环境, 然后安装WEKA。
三、实验目的(1)探索数据集大小与C4.5模型的精度之间的关系。
(2)探索属性的个数对数据集大小与C4.5模型精度之间关系的影响。
四、实验理论依据测试分类模型精度的方法依据如下表所示。
Accuracy=(a+d)/(a+b+c+d)五、实验思路(1)为探索数据集大小与C4.5模型精度之间的关系, 采用实例数据集的训练集进行测试。
对数据集进行多次筛选采样, 通过移除不同百分比的数据实例形成大小的训练集(wake设置为Filter.filters.unsupervised.instance.RemovePercentage), 在分类测试中采用use training set 方法进行测试, 并记录测试模型的精度, 在实验过程中不改变属性值得个数。
换用不同的数据集, 重复该实验过程, 并记录实验结果, 最后进行实验分析总结得出实验结论。
(2)为探索属性的个数对数据集大小与C4.5模型精度之间关系的影响, 使用一个数据集, 采用一个带筛选器的分类器。
对该数据集的属性进行随机抽样筛选, 并对处理后的训练集进行测试, 采用Cross-validation方法, 并记录测试结果。
《数据挖掘与数据仓库》实验指导书2013年计算机学院计算应用实验1 Apriori算法实现一、实验目的1、掌握Apriori算法对于关联规则挖掘中频繁集的产生以及关联规则集合的产生过程;2、根据算法描述编程实现算法,调试运行。
并结合相关实验数据进行应用,得到分析结果。
数据和删除数据的操作。
实验类型:综合计划课间:2学时二、实验内容1、频繁项集的生成与Apriori算法实现;2、关联规则的生成过程与Rule-generate算法实现;3、结合样例对算法进行分析;三、实验步骤编写程序完成下列算法:1、Apriori算法输入:数据集D;最小支持数minsup_count;输出:频繁项目集LL1={large 1-itemsets}For (k=2; Lk-1≠Φ; k++)Ck=apriori-gen (Lk-1); // Ck是k个元素的候选集For all transactions t∈D dobegin Ct=subset(Ck,t); //Ct是所有t包含的候选集元素for all candidates c ∈Ct do c.count++;endLk={c ∈Ck| c.count ≧ minsup_count }EndL=∪Lk;2、apriori-gen (Lk-1) 候选集产生算法输入: (k-1)-频繁项目集Lk-1输出: k-频繁项目集CkFor all itemset p∈Lk-1 doFor all itemset q∈Lk-1 doIf p.item1=q.item1, p.item2=q.item2, …,p.itemk-2=q.itemk-2, p.itemk-1<q.itemk-1 thenbegin c=p∞qif has_infrequent_subset(c, Lk-1)then delete celse add c to CkEndReturn Ck3、has_infrequent_subset(c, Lk-1)功能:判断候选集的元素输入:一个k-频繁项目集Lk-1 ,(k-1)-频繁项目集Lk-1输出:c是否从候选集中删除的布尔判断For all (k-1)-subsets of c doIf Not(S∈Lk-1) THEN return TRUE;Return FALSE;4、Rule-generate(L,minconf)输入:频繁项目集;最小信任度输出:强关联规则算法:FOR each frequent itemset lk in Lgenerules(lk,lk);5、Genrules递归算法:Genrules(lk:frequent k-itemset, xm:frequent m-itemset)X={(m-1)-itemsets xm-1 | xm-1 in xm};For each xm-1 in XBEGIN conf=support(lk)/support(xm-1);IF (conf≧minconf) THENBEGIN输出规则:xm-1->(lk-xm-1),support,confidence;IF (m-1)>1) THEN genrules(lk,xm-1);END;END;结合相关样例数据对算法进行调试,并根据相关实验结果对数据进行分析,四、实验报告要求1、用C语言或者其他语言实现上述相关算法。
2、实验操作步骤和实验结果,实验中出现的问题和解决方法。
五、注意事项1、集合的表示及相关操作的实现;2、项目集的数据结构描述;参考核心代码如下:(相关的测试main函数可以自己书写。
根据频繁k项集生成关联规则相对简单,只需要计算最小置信度即可从频繁K项集中找到所有的满足条件的关联规则。
)//对事物进行第一次扫描,生成频繁一项集,并返回一项集中个数int init_pass(char *item,char tran[len_t][len],int len,charres_item[len_t][len],float min_sup){float t_sup;int number=0;for(int i=0;i<len;i++){int count=0;for(int j=0;j<len_t;j++){for(int k=0;k<len;k++)if(item[i]==tran[j][k]){count++;break;}break;}t_sup=count*1.0/len;if(t_sup>=min_sup)res_item[number++][0]=item[i];}return number-1;}//生成候选K项集,返回k项集中事物的个数int candidate_gen(char ktran[len][k],char kktran[len][k+1]) {char temp[k],temp1[k],ktemp[k+1];int number=0;for(int i=0;i<len;i++){strcpy(temp,ktran[i]);bool flag;for(j=i+1;j<len;j++){strcpy(temp1,ktran[i]);for(int m=0;m<k;m++){if((m<k-1 && temp[m]==temp1[m])||m==k-1){continue;flag=true;}else {flag=false;break;}}if(flag){if(temp[k-1]>temp1[k-1]){strcpy(ktemp,temp1);ktemp[k]=temp[k-1];}else{strcpy(ktemp,temp);ktemp[k]=temp1[k-1]}break;}}flag=judge(kemp,ktran[len][k]);if(flag==true)strcpy(kktran[number++],ktemp);}return number-1;}//判断子集是否在k项集中bool judge(char *srcstr,char desstr[len][k]) {char temp[k];int count=0;for(int i=0;i<k-1;i++){for(int j=0;j<i;j++)temp[j]=srcstr[j];for(int j=i+1;j<k+1;j++)temp[j]=srcstr[j];for(int p=0;p<len;p++)if(strcmp(temp,desstr[i])==0){count++;break;}}if(count==k-1)return true;return false;}//apriori算法int apriori(char item[len],char tran[length][len],char res_tran[length][len],float min_sup){char ttran[length][len];int number,count,t_num;for(int i=0;i<length;i++)for(int j=0;j<len;j++)ttran[i][j]='0';number=init_pass(item,tran[length][len],len,ttran[length][len],min_sup);for(int i=0i<length;i++)res_tran[i][0]=ttran[i][0];for(int k=2;number!=0;k++){t_num=number;number=candidate_gen(res_item[number][k-1],ttran[number][k]);if(k==2)continue;else{count=0;for(int i=0;i<number;i++){char temp[k];strcpy(temp,ttran[i]);bool t_flag=false;for(int j=0;j<length;j++){//求出候选K项集中每个事物的支持计数int t_k=0;for(int n=0;n<k;n++){bool m_flag=falsefor(int g=t_k;g<len;g++){if(temp[k]==tran[j][g]){m_flag=true;t_k=g;break;}}if(m_flag==true && n==k-1)t_flag=true;}if(t_flag==true)count++;flag = false;}if(count/length > min_sup)strcpy(res_item[i],temp);count=0;}}}return t_num; }实验2-1 ID3算法实现一、实验目的通过编程实现决策树算法,信息增益的计算、数据子集划分、决策树的构建过程。
加深对相关算法的理解过程。
实验类型:综合计划课间:4学时二、实验内容1、分析决策树算法的实现流程;2、分析信息增益的计算、数据子集划分、决策树的构建过程;3、根据算法描述编程实现算法,调试运行;三、实验方法算法描述:以代表训练样本的单个结点开始建树;若样本都在同一个类,则该结点成为树叶,并用该类标记;否则,算法使用信息增益作为启发信息,选择能够最好地将样本分类的属性;对测试属性的每个已知值,创建一个分支,并据此划分样本;算法使用同样的过程,递归形成每个划分上的样本决策树递归划分步骤,当下列条件之一成立时停止:给定结点的所有样本属于同一类;没有剩余属性可以进一步划分样本,在此情况下,采用多数表决进行四、实验步骤1、算法实现过程中需要使用的数据结构描述:Struct{int Attrib_Col; // 当前节点对应属性int Value; // 对应边值Tree_Node* Left_Node; // 子树Tree_Node* Right_Node // 同层其他节点Boolean IsLeaf; // 是否叶子节点int ClassNo; // 对应分类标号}Tree_Node;2、整体算法流程主程序:InputData();T=Build_ID3(Data,Record_No, Num_Attrib);OutputRule(T);释放内存;3、相关子函数:3.1、 InputData(){输入属性集大小Num_Attrib;输入样本数Num_Record;分配内存Data[Num_Record][Num_Attrib];输入样本数据Data[Num_Record][Num_Attrib];获取类别数C(从最后一列中得到);}3.2、Build_ID3(Data,Record_No, Num_Attrib){Int Class_Distribute[C];If (Record_No==0) { return Null }N=new tree_node();计算Data中各类的分布情况存入Class_Distribute Temp_Num_Attrib=0;For (i=0;i<Num_Attrib;i++)If (Data[0][i]>=0) Temp_Num_Attrib++;If Temp_Num_Attrib==0{N->ClassNo=最多的类;N->IsLeaf=TRUE;N->Left_Node=NULL;N->Right_Node=NULL;Return N;}If Class_Distribute中仅一类的分布大于0{N->ClassNo=该类;N->IsLeaf=TRUE;N->Left_Node=NULL;N->Right_Node=NULL;Return N;}InforGain=0;CurrentCol=-1;For i=0;i<Num_Attrib-1;i++){TempGain=Compute_InforGain(Data,Record_No,I,Num_Attrib); If (InforGain<TempGain){ InforGain=TempGain; CurrentCol=I;}}N->Attrib_Col=CurrentCol;//记录CurrentCol所对应的不同值放入DiferentValue[];I=0;Value_No=-1;While i<Record_No {Flag=false;For (k=0;k<Value_No;k++)if (DiferentValu[k]=Data[i][CurrentCol]) flag=true;if (flag==false){Value_No++;DiferentValue[Value_No]=Data[i][CurrentCol] }I++;}SubData=以Data大小申请内存空间;For (i=0;i<Value_No;i++){k=-1;for (j=0;j<Record_No-1;j++)if (Data[j][CurrentCol]==DiferentValu[i]){k=k++;For(int i1=0;i1<Num_Attrib;i1++)If (i1<>CurrentCol)SubData[k][i1]=Data[j][i1];Else SubData[k][i1]=-1;}N->Attrib_Col=CurrentCol;N->Value=DiferentValu[i];N->Isleaf=false;N->ClassNo=0;N->Left_Node=Build_ID3(SubData,k+1, Num_Attrib);N->Right_Node=new Tree_Node;N=N->Right_Node;}}3.3、计算信息增益Compute_InforGain(Data,Record_No, Col_No, Num_Attrib)Int DifferentValue[MaxDifferentValue];Int Total_DifferentValue;Int s[ClassNo][MaxDifferentValue];s=0;// 数组清0;Total_DifferentValue=-1;For (i=0;i<Record_No;i++){J=GetPosition(DifferentValue,Total_DifferentValue,Data[i][Col_no]);If (j<0) {Total_DifferentValue++;DifferentValue[Total_DifferentValue]=Data[i][Col_no];J=Total_DifferentValue;}S[Data[i][Num_Attrib-1]][j]++;}Total_I=0;For (i=0;i<ClassNo;i++){Sum=0;For(j=0;j<Record_No;j++) if Data[j][Num_Attrib-1]==i sum++; Total_I=Compute_PI(Sum/Record_No);}EA=0;For (i=0;i<Total_DifferentValue;i++);{ temp=0;sj=0; //sj是数据子集中属于类j的样本个数;For (j=0;j<ClassNO;j++)sj+=s[j][i];For (j=0;j<ClassNO;j++)EA+=sj/Record_No*Compute_PI(s[j][i]/sj);}Return total_I-EA;}3.4、得到某数字在数组中的位置GetPosition(Data, DataSize,Value){For (i=0;i<DataSize;i++) if (Data[i]=value) return I;Return -1;}3.5、计算Pi*LogPiFloat Compute_PI(float pi){If pi<=0 then return 0;If pi>=1 then return 0;Return 0-pi*log2(pi);}五、实验报告要求1、用C语言或者其他语言实现上述相关算法。