Apriori算法及java实现培训课件_第1页
Apriori算法及java实现培训课件_第2页
Apriori算法及java实现培训课件_第3页
Apriori算法及java实现培训课件_第4页
Apriori算法及java实现培训课件_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1Apriori介绍Apriori算法使用频繁项集的先验知识,使用一种称作逐层搜索的迭代方法,k项集用于探索(k+1)项集。首先,通过扫描事务(交易)记录,找出所有的频繁1项集,该集合记做Li,然后利用Li找频繁2项集的集合L2,L2找L3,如此下去,直到不能再找到任何频繁k项集。最后再在所有的频繁集中找出强规则,即产生用户感兴趣的关联规则。其中,Apriori算法具有这样一条性质:任一频繁项集的所有非空子集也必须是频繁的。因为假如P(I)最小支持度阈值,当有元素A添加到I中时,结果项集(API)不可能比I出现次数更多。因此API也不是频繁的。2连接步和剪枝步在上述的关联规则挖掘过程的两个步骤

2、中,第一步往往是总体性能的瓶颈。Apriori算法采用连接步和剪枝步两种方式来找出所有的频繁项集。1)连接步为找出Lk(所有白频繁k项集的集合),通过将Lk-i(所有的频繁k-1项集的集合)与自身连接产生候选k项集的集合。候选集合记作Ck。设li和12是Lk-i中的成员。记l加表示li中的第j项。假设Apriori算法对事务或项集中的项按字典次序排序,即对于(k-i)项集liJili2卜.lik-i。将Lk-i与自身连接,如果(lii=l2i)&(li2=l22)&.&(lik-2=l2k-2)&(lik-il2k-i),那认为li和l2是可连接。连接li和l2产生的结果是lii,li2,li

3、k-i,l2k-i。2)剪枝步Ck是Lk的超集,也就是说,Ck的成员可能是也可能不是频繁的。通过扫描所有的事务(交易),确定Ck中每个候选的计数,判断是否小于最小支持度计数,如果不是,则认为该候选是频繁的。为了压缩Ck,可以利用Apriori性质:任一频繁项集的所有非空子集也必须是频繁的,反之,如果某个候选的非空子集不是频繁的,那么该候选肯定不是频繁的,从而可以将其从Ck中删除。(Tip:为什么要压缩Ck呢?因为实际情况下事务记录往往是保存在外存储上,比如数据库或者其他格式的文件上,在每次计算候选计数时都需要将候选与所有事务进行比对,众所周知,访问外存的效率往往都比较低,因此Apriori加入

4、了所谓的剪枝步,事先对候选集进行过滤,以减少访问外存的次数。)3Apriori算法实例交易ID商品ID列表Ti00Ii,I2,I5T200I2,I4T300I2,I3T400Ii,I2,I4T500Ii,I3T600I2,I3T700Ii,I3T800Ii,I2,I3,I5T900I1,I2,I3扫I&新者斯文人证武日物所有的-文持记:it.“集支持俊计教口皿 40W14011昌的 2E比4值印 2 值因 =E阂0g吟1网固 0CZ嗖案。皿4P1J3) 8固42mm4但跄2mw2L2町歧犊族支待蕉廿餐与酷小支师度帔术上图为某商场的交易记录,共有9个事务,利用Apriori算法寻找所有的频繁项集

5、的过程如下:C3腰差(3婷信物所有的文新记承.对每个悦医计款厦集支持度计苞口由I血塔后2支持理由效k里集支持鹿讨魂(ILE4312(11噌2详细介绍下候选3项集的集合C3的产生过程:从连接步,首先C3=I1,I2,I3,11,12,1511,13,15,12,13,14,12,13,15,I2,I4,I5(C3是由L2与自身连接产生)。根据Apriori性质,频繁项集的所有子集也必须频繁的,可以确定有4 个候选集11,13,15 , 12,13,14C312,13,15,I2,I4,I5不可能时频繁的,因为它们存在子集不属于频繁集,因此将它们从中删除。注意,由于Apriori算法使用逐层搜索技

6、术,给定候选k项集后,只需检查它们的(k-1)个子集是否频繁。3.Apriori伪代码算法:Apriori输入:D-事务数据库;min_sup-最小支持度计数阈值输出:L-D中的频繁项集方法:Li=find_frequent_1-itemsets(D);/找出所有频繁1项集For(k=2;Lk-1!=null;k+)Ck=apriori_gen(Lk-i);/产生候选,并剪枝Foreach事务tinD扫描D进行候选计数Ct=subset(Ck,t);/得到t的子集Foreach候选c属于Ctc.count+;Lk=c属于Ck|c.count=min_supReturnL=所有的频繁集;Proc

7、edureapriori_gen(Lk-1:frequent(k-1)-itemsets)Foreach项集1i属于LForeach项集l2属于LIf(l11=l21)&(l12=l22)&(l1k-2=l2k-2)&(l1k-1B)=P(B|A)=support_count(AB)/support_count(A)关联规则产生步骤如下:1)对于每个频繁项集l,产生其所有非空真子集;2)对于每个非空真子集s,如果support_count(l)/support_count(s)=min_conf,则输出s-(l-s),其中,min_conf是最小置信度阈值。例如,在上述例子中,针对频繁集I1,

8、12,15。可以产生哪些关联规则?该频繁集的非空真子集有I1,I2,I1,15,I2,15,I1,12和15,对应置信度如下:I1&I2-15confidence=2/4=50%I1&I5-I2confidence=2/2=100%I2&I5-I1confidence=2/2=100%I1-I2&I5con巾dence=2/6=33%I2-I1&I5confidence=2/7=29%I5-I1&I2confidence=2/2=100%如果min_conf=70%,则强规则有I1&I5-I2,I2&I5-I1,I5-I1&I2。5 .AprioriJava代码packagecom.aprio

9、ri;importjava.util.ArrayList;importjava.util.Collections;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.Set;publicclassAprioriprivatefinalstaticintSUPPORT=2;/支持度阈值privatefinalstaticdoubleCONFIDENCE=0.7;/置信度阈值privatefinalstaticStringITEM_SPLIT=;/项之间的分隔符privatefinalst

10、aticStringCON=-;/项之间的分隔符privatefinalstaticListtransList=newArrayList();/所有交易static/初始化交易记录transList.add(1;2;5;);transList.add(2;4;);transList.add(2;3;);transList.add(1;2;4;);transList.add(1;3;);transList.add(2;3;);transList.add(1;3;);transList.add(1;2;3;5;);transList.add(1;2;3;);publicMapgetFC()Mapf

11、requentCollectionMap=newHashMap();/所有的频繁集frequentCollectionMap.putAll(getItem1FC();MapitemkFcMap=newHashMap();itemkFcMap.putAll(getItem1FC();while(itemkFcMap!=null&itemkFcMap.size()!=0)MapcandidateCollection=getCandidateCollection(itemkFcMap);SetccKeySet=candidateCollection.keySet();/对候选集项进行累加计数for(

12、Stringtrans:transList)for(Stringcandidate:ccKeySet)booleanflag=true;/用来判断交易中是否出现该候选项,如果出现,计数加1String口candidateItems=candidate.split(ITEM_SPLIT);for(StringcandidateItem:candidateItems)if(trans.indexOf(candidateItem+ITEM_SPLIT)=-1)flag=false;break;if(flag)Integercount=candidateCollection.get(candidate

13、);candidateCollection.put(candidate,count+1);从候选集中找到符合支持度的频繁集项itemkFcMap.clear();for(Stringcandidate:ccKeySet)Integercount=candidateCollection.get(candidate);if(count=SUPPORT)itemkFcMap.put(candidate,count);/合并所有频繁集frequentCollectionMap.putAll(itemkFcMap);returnfrequentCollectionMap;privateMapgetCan

14、didateCollection(MapitemkFcMap)MapcandidateCollection=newHashMap();SetitemkSet1=itemkFcMap.keySet();SetitemkSet2=itemkFcMap.keySet();for(Stringitemk1:itemkSet1)for(Stringitemk2:itemkSet2)/进行连接String口tmp1=itemk1.split(ITEM_SPLIT);String口tmp2ntemk2.split(ITEM_SPLIT);Stringc=;if(tmp1.length=1)if(tmp10.

15、compareTo(tmp20)0)c=tmp10+ITEM_SPLIT+tmp20+ITEM_SPLIT;elsebooleanflag=true;for(inti=0;itmp1.length-1;i+)if(!tmp1i.equals(tmp2i)flag=false;break;if(flag&(pareTo(tmp2tmp2.length-1)0)c=itemk1+tmp2tmp2.length-1+ITEM_SPLIT;进行剪枝booleanhasInfrequentSubSet=false;if(!c.equals()String口tmp

16、C=c.split(ITEM_SPLIT);for(inti=0;itmpC.length;i+)StringsubC=;for(intj=0;jtmpC.length;j+)if(i!=j)subC=subC+tmpCj+ITEM_SPLIT;if(itemkFcMap.get(subC)=null)hasInfrequentSubSet=true;break;elsehasInfrequentSubSet=true;if(!hasInfrequentSubSet)candidateCollection.put(c,0);returncandidatecollection;privateMa

17、pgetItem1FC()MapsItem1FcMap=newHashMap();MaprItem1FcMap=newHashMap();/频繁1项集for(Stringtrans:transList)String口items=trans.split(ITEM_SPLIT);for(Stringitem:items)Integercount=sItem1FcMap.get(item+ITEM_SPLIT);if(count=null)sItem1FcMap.put(item+ITEM_SPLIT,1);elsesItem1FcMap.put(item+ITEM_SPLIT,count+1);S

18、etkeySet=sItem1FcMap.keySet();for(Stringkey:keySet)Integercount=sItem1FcMap.get(key);if(count=SUPPORT)rItem1FcMap.put(key,count);returnrItem1FcMap;publicMapgetRelationRules(MapfrequentCollectionMap)MaprelationRules=newHashMap();SetkeySet=frequentCollectionMap.keySet();for(Stringkey:keySet)doublecoun

19、tAll=frequentCollectionMap.get(key);String口keyItems=key.split(ITEM_SPLIT);if(keyItems.length1)Listsource=newArrayList();Collections.addAll(source,keyItems);ListListresult=newArrayListList();buildSubSet(source,result);/获得source的所有非空子集for(ListitemList:result)if(itemList.size()source.size()只处理真子集Listot

20、herList=newArrayList();for(StringsourceItem:source)if(!itemList.contains(sourceItem)otherList.add(sourceItem);StringreasonStr=;/前置StringresultStr=;/结果for(Stringitem:itemList)reasonStr=reasonStr+item+ITEM_SPLIT;for(Stringitem:otherList)resultStr=resultStr+item+ITEM_SPLIT;doublecountReason=frequentCol

21、lectionMap.get(reasonStr);doubleitemConfidence=countAll/countReason;/计算置信度if(itemConfidence=CONFIDENCE)Stringrule=reasonStr+CON+resultStr;relationRules.put(rule,itemConfidence);returnrelationRules;privatevoidbuildSubSet(ListsourceSet,ListListresult)/仅有一个元素时,递归终止。此时非空子集仅为其自身,所以直接添加到result中if(sourceSe

22、t.size()=1)Listset=newArrayList();set.add(sourceSet.get(0);result.add(set);elseif(sourceSet.size()1)/当有n个元素时,递归求出前n-1个子集,在于result中buildSubSet(sourceSet.subList(0,sourceSet.size()-1),result);intsize=result.size();/求出此时result的长度,用于后面的追加第n个元素时计数/把第n个元素加入到集合中Listsingle=newArrayList();single.add(sourceSet.get(sou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论