精品文档精品文档《数据挖掘》课程作业题目基于关联规则Apriori算法的事务数据挖掘班级学号姓名日期2010.06.13精品文档精品文档目录一、引言··························································2二、正文··························································21.背景···························································22.算法思想·····················································23.数据集························································34.源代码························································35.算法流程·············································错误!未定义书签。6.运行结果……………………………………………………………………16三、结论··································错误!未定义书签。四、参考文献····························错误!未定义书签。精品文档精品文档一、引言随着网络、数据库技术的迅速发展以及数据库管理系统的广泛应用,人们积累的数据越来越多。由此,数据挖掘技术应运而生。数据挖掘(DataMining)就是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中,提取隐含在其中的、人们事先不知道的、但又是潜在有用的信息和知识的过程。它是一种新的商业信息处理技术,其主要特点是对商业数据库中的大量业务数据进行抽取、转换、分析和其他模型化处理,从中提取辅助商业决策的关键性数据。简而言之,数据挖掘其实是一类深层次的数据分析方法。从这个角度数据挖掘也可以描述为:按企业制定的业务目标,对大量的企业数据进行探索和分析,揭示隐藏的、未知的或验证已知的规律性,并进一步将其模型化的先进有效的方法。其中关联规则的算法的研究在数据挖掘算法的研究中占有相当重要的地位,关联规则算法的核心是Apriori算法,但随着对关联规则研究的深入,它的缺点也暴露出来了。本文将对数据挖掘的一种经典算法Apriori算法对于事务项目数据的挖掘应用。二、正文1、背景自1994年由Agrawal等人提出的关联规则挖掘Apriori的算法从其产生到现在,对关联规则挖掘方面的研究有着很大的影响。Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法。算法基于这样的事实:算法使用频繁项集性质的先验知识。Apriori使用一种称作逐层搜索的迭代方法,k-项集用于探索(k+1)-项集。首先,找出频繁1-项集的集合。该集合记作L1。L1用于找频繁2-项集的集合L2,而L2用于找L3,如此下去,直到不能找到频繁k-项集。找每个Lk需要一次数据库扫描。为提高频繁项集逐层产生的效率,一种称作Apriori性质的重要性质用于压缩搜索空间。为了提高频繁项目集逐层产生的效率,Apriori算法利用了两个重要的性质用于压缩搜索空间:(l)若X是频繁项集,则x的所有子集都是频繁项集。(2)若x是非频繁项集,则X的所有超集都是非频繁项集。2、算法思想算法:Apriori算法,使用逐层迭代找出频繁项集。输入:事务数据库D;最小支持度阈值min_sup。输出:D中的频繁项集L。1)L1=find_frequent_1_itemsets(D);2)for(k=2;Lk-1≠;k++){3)Ck=aproiri_gen(Lk-1,min_sup);4)foreachtransactiontD{//scanDforcount5)Ct=subset(Ck,t);//getsubsetsoftthatarecandidates6)foreachcandidatecCt7)c.count++;8)}9)Lk={cCk|c.count≥min_sup}10)}11)returnL=∪kLk;精品文档精品文档3、数据集我用的的是一个事务数据集,数据集存在一个transaction数据库中,数据库中有三个表:customer、tranDB、transactionDB,存有事务和项目的数据Transactiondb:tranDB:Customer:4、源代码//AprioriView.cpp:implementationoftheCAprioriViewclass//#includestdafx.h精品文档精品文档#includeApriori.h#includetime.h#includeAprioriSet.h#includeAprioriDoc.h#includeAprioriView.h#includeSetPara.h#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CAprioriViewIMPLEMENT_DYNCREATE(CAprioriView,CRecordView)BEGIN_MESSAGE_MAP(CAprioriView,CRecordView)//{{AFX_MSG_MAP(CAprioriView)ON_BN_CLICKED(IDC_Bn_FreqItem,OnBnFreqItem)ON_COMMAND(ID_Parameter,OnParameter)//}}AFX_MSG_MAP//StandardprintingcommandsON_COMMAND(ID_FILE_PRINT,CRecordView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT,CRecordView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW,CRecordView::OnFilePrintPreview)END_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CAprioriViewconstruction/destructionCAprioriView::CAprioriView():CRecordView(CAprioriView::IDD){//{{AFX_DATA_INIT(CAprioriView)m_pSet=NULL;nAllFreqItem=0;//}}AFX_DATA_INIT//TODO:addconstructioncodehere}CAprioriView::~CAprioriView(){精品文档精品文档}voidCAprioriView::DoDataExchange(CDataExchange*pDX){CRecordView::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAprioriView)DDX_Control(pDX,IDC_List_FreqItem,m_List_FreqItem);//}}AFX_DATA_MAP}BOOLCAprioriView::PreCreateWindow(CREATESTRUCT&cs){//TODO:ModifytheWindowclassorstylesherebymodifying//theCREATESTRUCTcsreturnCRecordView::PreCreateWindow(cs);}voidCAprioriView::OnInitialUpdate(){m_pSet=&GetDocument()-m_aprioriSet;CRecordView::OnInitialUpdate();GetParentFrame()-RecalcLayout();ResizeParentToFit();}///////////////////////////////////////////////////////////////////////////////CAprioriViewprintingBOOLCAprioriView::OnPreparePrinting(CPrintInfo*pInfo){//defaultpreparationreturnDoPreparePrinting(pInfo);}voidCAprioriView::OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/){//TODO:addextrainitializationbeforeprinting}voidCAprioriView::OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)精品文档精品文档{//TODO:addcleanupafterprinting}///////////////////////////////////////////////////////////////////////////////CAprioriViewdiagnostics#ifdef_DEBUGvoidCAprioriView::AssertValid()const{CRecordView::AssertValid();}voidCAprioriView::Dump(CDumpContext&dc)const{CRecordView::Dump(dc);}CAprioriDoc*CAprioriView::GetDocument()//non-debugversionisinline{ASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CAprioriDoc)));return(CAprioriDoc*)m_pDocument;}#endif//_DEBUG///////////////////////////////////////////////////////////////////////////////CAprioriViewdatabasesupportCRecordset*CAprioriView::OnGetRecordset(){returnm_pSet;}///////////////////////////////////////////////////////////////////////////////CAprioriViewmessagehandlersvoidCAprioriView::OnBnFreqItem(){//TODO:AddyourcontrolnotificationhandlercodehereintnFieldCount=m_pSet-GetODBCFieldCount();intnDbCount;CStringstrValue;CStringstrIntToString=;精品文档精品文档clock_tstart,stop,tick;doubletimeused;intnLargeCount=0;intnListFreqItemCount=0;start=clock();ClearItem();m_List_FreqItem.InsertColumn(0,Item,LVCFMT_LEFT,100);m_List_FreqItem.InsertC